in javatests/com/google/gitiles/GitilesViewTest.java [755:802]
public void escaping() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
// Some of these values are not valid for Git, but check them anyway.
GitilesView view =
GitilesView.log()
.copyFrom(HOST)
.setRepositoryName("foo?bar")
.setRevision(Revision.unpeeled("ba/d#name", id))
.setOldRevision(Revision.unpeeled("other\"na/me", parent))
.setPathPart("we ird/pa'th/name")
.putParam("k e y", "val/ue")
.setAnchor("anc#hor")
.build();
// Fields returned by getters are not escaped.
assertThat(view.getServletPath()).isEqualTo("/b");
assertThat(view.getType()).isEqualTo(Type.LOG);
assertThat(view.getHostName()).isEqualTo("host");
assertThat(view.getRepositoryName()).isEqualTo("foo?bar");
assertThat(view.getRevision().getId()).isEqualTo(id);
assertThat(view.getRevision().getName()).isEqualTo("ba/d#name");
assertThat(view.getOldRevision().getId()).isEqualTo(parent);
assertThat(view.getOldRevision().getName()).isEqualTo("other\"na/me");
assertThat(view.getPathPart()).isEqualTo("we ird/pa'th/name");
assertThat(view.getParameters())
.isEqualTo(ImmutableListMultimap.<String, String>of("k e y", "val/ue"));
String qs = "?k+e+y=val%2Fue";
assertThat(view.toUrl())
.isEqualTo(
"/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name"
+ qs
+ "#anc%23hor");
assertThat(view.getBreadcrumbs())
.containsExactly(
// Names are not escaped (auto-escaped by Soy) but values are.
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo?bar", "/b/foo%3Fbar/"),
breadcrumb(
"other\"na/me..ba/d#name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name" + qs),
breadcrumb("we ird", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird" + qs),
breadcrumb(
"pa'th", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th" + qs),
breadcrumb(
"name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name" + qs))
.inOrder();
}