/*
*
* * Copyright (c) 2016. David Sowerby
* *
* * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* * the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* * specific language governing permissions and limitations under the License.
*
*/
package uk.q3c.krail.core.navigate;
import com.google.inject.Inject;
import com.mycila.testing.junit.MycilaJunitRunner;
import com.mycila.testing.plugin.guice.GuiceContext;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(MycilaJunitRunner.class)
@GuiceContext({})
public class StrictURIFragmentHandlerTest {
final String view = "view1";
final String view_ = "view1/";
final String view_p = "view1/a=b";
final String view_p2 = "view1/a=b/year=1970";
final String view_p2m1 = "view1/a=b/year=";
final String view_p2m2 = "view1/a=b/=1970";
final String view_p2m3 = "view1/a=b/1970";
final String view_p2m5 = "view1/=b/year=1970";
final String view_p2m6 = "view1/a=/year=1970";
final String subView = "view1/subView";
final String subView_ = "view1/subView/";
final String subView_p = "view1/subView/a=b";
final String subView_p2 = "view1/subView/a=b/year=1970";
final String dbl = "view//subView";
final String home = "";
final String home_p = "a=b";
final String home_p2 = "a=b/year=1970";
final String subView_p2_bang = "!view1/subView/a=b/year=1970";
@Inject
StrictURIFragmentHandler uriHandler;
@Test
public void readVirtualPageAndparameterList() {
// given
// when
NavigationState navigationState = uriHandler.navigationState(view);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(view);
assertThat(navigationState.getParameters()).isEmpty();
// when
navigationState = uriHandler.navigationState(view_);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(view);
assertThat(navigationState.getParameters()).isEmpty();
// when
navigationState = uriHandler.navigationState(view_p);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(view);
assertThat(navigationState.getParameterList()).containsOnly("a=b");
assertThat(navigationState.getParameters()
.get("a")).isEqualTo("b");
// when
navigationState = uriHandler.navigationState(view_p2);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(view);
assertThat(navigationState.getParameterList()).containsOnly("a=b", "year=1970");
assertThat(navigationState.getParameterValue("a")).isEqualTo("b");
assertThat(navigationState.getParameterValue("year")).isEqualTo("1970");
// when
navigationState = uriHandler.navigationState(view_p2m1);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(view);
assertThat(navigationState.getParameterList()).containsOnly("a=b");
assertThat(navigationState.getParameterValue("a")).isEqualTo("b");
assertThat(navigationState.getParameterValue("year")).isEqualTo(null);
// when
navigationState = uriHandler.navigationState(view_p2m2);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(view);
assertThat(navigationState.getParameterList()).containsOnly("a=b");
// when
navigationState = uriHandler.navigationState(view_p2m3);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(view);
assertThat(navigationState.getParameterList()).containsOnly("a=b");
// when
navigationState = uriHandler.navigationState(view_p2m5);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(view);
assertThat(navigationState.getParameterList()).containsOnly("year=1970");
// when
navigationState = uriHandler.navigationState(view_p2m6);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(view);
assertThat(navigationState.getParameterList()).containsOnly("year=1970");
// when
navigationState = uriHandler.navigationState(subView);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(subView);
assertThat(navigationState.getParameterList()).isEmpty();
// when
navigationState = uriHandler.navigationState(subView_);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(subView);
assertThat(navigationState.getParameterList()).isEmpty();
// when
navigationState = uriHandler.navigationState(subView_p);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(subView);
assertThat(navigationState.getParameterList()).containsOnly("a=b");
// when
navigationState = uriHandler.navigationState(subView_p2);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(subView);
assertThat(navigationState.getParameterList()).containsOnly("a=b", "year=1970");
// when
navigationState = uriHandler.navigationState(dbl);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(dbl);
assertThat(navigationState.getParameterList()).isEmpty();
// when
navigationState = uriHandler.navigationState(home);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(home);
assertThat(navigationState.getParameterList()).isEmpty();
// when
navigationState = uriHandler.navigationState(home_p);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo(home);
assertThat(navigationState.getParameterList()).containsOnly("a=b");
// when
navigationState = uriHandler.navigationState(home_p2);
// then
assertThat(navigationState.getVirtualPage()).isEqualTo("");
assertThat(navigationState.getParameterList()).containsOnly("a=b", "year=1970");
}
@Test
public void setVirtualPage() {
// given
uriHandler.setUseBang(false);
NavigationState navigationState = uriHandler.navigationState(home_p2);
// when
navigationState.virtualPage("view2")
.update(uriHandler);
String fragment = uriHandler.fragment(navigationState);
// then
assertThat(fragment).isEqualTo("view2/a=b/year=1970");
assertThat(navigationState.getVirtualPage()).isEqualTo("view2");
assertThat(navigationState.getParameterList()).containsOnly("a=b", "year=1970");
}
@Test
public void setParameter() {
// given
// when
NavigationState navigationState = uriHandler.navigationState(view_p2);
// then
assertThat(navigationState.isDirty()).isFalse();
// when
navigationState.parameter("a", "23"); // update
// then
assertThat(navigationState.isDirty()).isTrue();
// when
navigationState.parameter("id", "111")
.update(uriHandler); // new
uriHandler.setUseBang(false);
// then
assertThat(navigationState.getParameterList()).containsExactly("a=23", "year=1970", "id=111");
assertThat(uriHandler.fragment(navigationState)).isEqualTo("view1/a=23/year=1970/id=111");
}
@Test
public void removeParameter() {
// given
NavigationState navigationState = uriHandler.navigationState(view_p2);
// when
navigationState.removeParameter("a")
.update(uriHandler);
// then
assertThat(uriHandler.fragment(navigationState)).isEqualTo("view1/year=1970");
}
@Test
public void hashBang() {
// given
NavigationState navigationState = uriHandler.navigationState(view_p2);
// when
uriHandler.setUseBang(true);
String fragment = uriHandler.fragment(navigationState);
// then
assertThat(fragment).isEqualTo("!" + view_p2);
// when
navigationState = uriHandler.navigationState(subView_p2_bang);
fragment = uriHandler.fragment(navigationState);
// then
assertThat(fragment).isEqualTo(subView_p2_bang);
// when missing bang
navigationState = uriHandler.navigationState(view_p2m1);
fragment = uriHandler.fragment(navigationState);
// then
assertThat(fragment).isEqualTo("!" + "view1/a=b");
}
@Test
public void BangFragmentWhenNotExpected() {
// given
NavigationState navigationState = uriHandler.navigationState(subView_p2_bang);
uriHandler.setUseBang(false);
// when
String fragment = uriHandler.fragment(navigationState);
// then
assertThat(fragment).isEqualTo(subView_p2);
}
@Test
public void pathSegments() {
// given
NavigationState navigationState = uriHandler.navigationState("home/view/wiggly");
// when
List<String> result = navigationState.getPathSegments();
// then
assertThat(result).containsOnly("home", "view", "wiggly");
assertThat(result.get(0)).isEqualTo("home");
assertThat(result.get(1)).isEqualTo("view");
assertThat(result.get(2)).isEqualTo("wiggly");
// given
navigationState = uriHandler.navigationState("home/view/wiggly/id=1");
// when
result = navigationState.getPathSegments();
// then
assertThat(result).containsOnly("home", "view", "wiggly");
assertThat(result.get(0)).isEqualTo("home");
assertThat(result.get(1)).isEqualTo("view");
assertThat(result.get(2)).isEqualTo("wiggly");
// given
navigationState = uriHandler.navigationState("");
// when
result = navigationState.getPathSegments();
// then
assertThat(result).containsOnly("");
assertThat(result.get(0)).isEqualTo("");
}
@Test
public void nullFragment() {
// given
// when
NavigationState navigationState = uriHandler.navigationState(null);
List<String> result = navigationState.getPathSegments();
// then
assertThat(result).containsOnly("");
assertThat(result.get(0)).isEqualTo("");
}
@Test
public void updateFragment() {
// given
NavigationState navigationState = uriHandler.navigationState("home/perfect/wiggly");
navigationState.addParameter("age", "15");
navigationState.setVirtualPage("home/only");
// when
uriHandler.updateFragment(navigationState);
// then
assertThat(navigationState.getFragment()).isEqualTo("home/only/age=15");
}
}