diff --git a/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java b/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java index 6a7166d00b1..5d14522d053 100644 --- a/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java +++ b/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java @@ -1890,4 +1890,9 @@ public boolean evaluateMatchOffset() { } return false; } + + @VisibleForTesting + String getFragmentIdentifier() { + return fragmentIdentifier; + } } diff --git a/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java b/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java index d8353dee60b..858480a53c8 100644 --- a/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java +++ b/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java @@ -90,6 +90,7 @@ import static org.mockito.Mockito.when; import static org.opengrok.indexer.condition.RepositoryInstalled.Type.MERCURIAL; import static org.opengrok.indexer.history.LatestRevisionUtil.getLatestRevision; +import static org.opengrok.indexer.web.Util.fixPathIfWindows; /** * Unit tests for the {@code PageConfig} class. @@ -1091,4 +1092,52 @@ public String getPathInfo() { // cleanup assertTrue(file.setReadable(true, false)); } + + @Test + void testEvaluateMatchOffsetNoParam() { + final String relativePath = Path.of("mercurial", "main.c").toString(); + HttpServletRequest req = new DummyHttpServletRequest() { + @Override + public String getPathInfo() { + return fixPathIfWindows(relativePath); + } + }; + + final File file = new File(RuntimeEnvironment.getInstance().getSourceRootPath(), relativePath); + assertTrue(file.exists()); + PageConfig cfg = PageConfig.get(req); + assertFalse(cfg.evaluateMatchOffset()); + assertNull(cfg.getFragmentIdentifier()); + } + + private static Stream> getParamsForTestEvaluateMatchOffset() { + return Stream.of(Pair.of("0", "1"), + Pair.of("42", "3")); + } + + @ParameterizedTest + @MethodSource("getParamsForTestEvaluateMatchOffset") + void testEvaluateMatchOffset(Pair offsetPair) { + final String relativePath = Path.of("mercurial", "main.c").toString(); + HttpServletRequest req = new DummyHttpServletRequest() { + @Override + public String getPathInfo() { + return fixPathIfWindows(relativePath); + } + + @Override + public String getParameter(String name) { + if (name.equals(QueryParameters.MATCH_OFFSET_PARAM)) { + return offsetPair.getLeft(); + } + return null; + } + }; + + final File file = new File(RuntimeEnvironment.getInstance().getSourceRootPath(), relativePath); + assertTrue(file.exists()); + PageConfig cfg = PageConfig.get(req); + assertTrue(cfg.evaluateMatchOffset()); + assertEquals(offsetPair.getRight(), cfg.getFragmentIdentifier()); + } }