@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); }
String s = iter.next(); if (paramsStarted) { addParameter(navigationState, s); } else { if (s.contains("=")) { paramsStarted = true; addParameter(navigationState, s); } else { pathSegments.add(s); validateSegments(navigationState); navigationState.updated();
private void validateSegments(NavigationState navigationState) { if (navigationState.getVirtualPage() == null) { String virtualPage = virtualPageFromSegments(navigationState.getPathSegments()); navigationState.virtualPage(virtualPage); } else if (navigationState.getPathSegments() .isEmpty()) { navigationState.pathSegments(segmentsFromVirtualPage(navigationState.getVirtualPage())); } }
/** * Creates and returns a {@link NavigationState} with elements of the {@code fragment} decoded. The "virtual page" is * assumed to finish as soon as a paired parameter is found. No attempt is made to validate the actual structure of * the path, so for example something like <code>view//subview/a=b</code> will result in a virtual page of * <code>view//subview</code>. If <code>uri</code> is null or empty, the {@code fragment} is considered to be an empty String. If * <code>navigationState</code> contains only paired parameters, the virtual page is set to an empty string. */ @Override public NavigationState navigationState(String fragment) { NavigationState navigationState = new NavigationState(); String updatedFragment = StringUtils.isEmpty(fragment) ? "" : stripBangAndTrailingSlash(fragment); navigationState.fragment(updatedFragment); updateParts(navigationState); return navigationState; }
/** * Updates the fragment in {@code navigationState} from the component parts of {@code navigationState} * * @see uk.q3c.krail.core.navigate.URIFragmentHandler#updateFragment(uk.q3c.krail.core.navigate.NavigationState) */ @Override public void updateFragment(NavigationState navigationState) { navigationState.setUpdateInProgress(true); navigationState.fragment(fragment(navigationState)); validateSegments(navigationState); navigationState.updated(); }
@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"); }
@Override public NavigationState navigationState(URI uri) { return navigationState(uri.getFragment()); }
@Test public void updateFragment() { // given NavigationState navigationState = uriHandler.navigationState("home/perfect/wiggly"); navigationState.parameter("age", "15"); navigationState.virtualPage("home/only"); // when uriHandler.updateFragment(navigationState); // then assertThat(navigationState.getFragment()).isEqualTo("home/only/age=15"); }
@Override public String fragment(NavigationState navigationState) { StringBuilder buf = new StringBuilder(); if (useBang) { buf.append('!'); } String vp = navigationState.getVirtualPage() == null ? virtualPageFromSegments(navigationState.getPathSegments()) : navigationState.getVirtualPage(); buf.append(vp); // append the parameters for (Map.Entry<String, String> entry : navigationState.getParameters() .entrySet()) { buf.append('/'); buf.append(entry.getKey()); buf.append('='); buf.append(entry.getValue()); } return buf.toString(); }
/** * Updates the fragment in {@code navigationState} from the component parts of {@code navigationState} * * @see uk.q3c.krail.core.navigate.URIFragmentHandler#updateFragment(uk.q3c.krail.core.navigate.NavigationState) */ @Override public void updateFragment(NavigationState navigationState) { navigationState.setUpdateInProgress(true); navigationState.fragment(fragment(navigationState)); validateSegments(navigationState); navigationState.updated(); }
@Test public void fromURI() { // given NavigationState navigationState = uriHandler.navigationState(URI.create("http://localhost:8080/krail-testapp/#jpa")); // expect assertThat(navigationState.getFragment()).isEqualTo("jpa"); }
/** * Creates and returns a {@link NavigationState} with elements of the {@code uri} decoded. The "virtual page" is * assumed to finish as soon as a paired parameter is found. No attempt is made to validate the actual structure of * the path, so for example something like <code>view//subview/a=b</code> will result in a virtual page of * <code>view//subview</code>. If <code>uri</code> is null or empty, the uri is consider to be an empty String. If * <code>navigationState</code> contains only paired parameters, the virtual page is set to an empty string. */ @Override public NavigationState navigationState(String uri) { NavigationState navigationState = new NavigationState(); String fragment = StringUtils.isEmpty(uri) ? "" : stripBangAndTrailingSlash(uri); navigationState.fragment(fragment); updateParts(navigationState); return navigationState; }
@Override public String fragment(NavigationState navigationState) { StringBuilder buf = new StringBuilder(); if (useBang) { buf.append('!'); } String vp = navigationState.getVirtualPage() == null ? virtualPageFromSegments(navigationState.getPathSegments()) : navigationState.getVirtualPage(); buf.append(vp); // append the parameters for (Map.Entry<String, String> entry : navigationState.getParameters() .entrySet()) { buf.append('/'); buf.append(entry.getKey()); buf.append('='); buf.append(entry.getValue()); } return buf.toString(); }
@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 nullFragment() { // given // when NavigationState navigationState = uriHandler.navigationState((String) null); List<String> result = navigationState.getPathSegments(); // then assertThat(result).containsOnly(""); assertThat(result.get(0)).isEqualTo(""); }
private void validateSegments(NavigationState navigationState) { if (navigationState.getVirtualPage() == null) { String virtualPage = virtualPageFromSegments(navigationState.getPathSegments()); navigationState.virtualPage(virtualPage); } else if (navigationState.getPathSegments() .isEmpty()) { navigationState.pathSegments(segmentsFromVirtualPage(navigationState.getVirtualPage())); } }
String s = iter.next(); if (paramsStarted) { addParameter(navigationState, s); } else { if (s.contains("=")) { paramsStarted = true; addParameter(navigationState, s); } else { pathSegments.add(s); validateSegments(navigationState); navigationState.updated();
@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 createWithEditAndWildcard() { // given String uri = "private/wiggly/id=1"; NavigationState navigationState = uriHandler.navigationState(uri); // when PagePermission p = new PagePermission(navigationState, true, true); // then assertThat(p).isEqualTo(new WildcardPermission("page:edit:private:wiggly:*")); }
@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"); }