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 b1543cad7c2..f6fc1e7fa07 100644 --- a/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java +++ b/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java @@ -135,7 +135,8 @@ public class PageConfig { // query parameters static final String PROJECT_PARAM_NAME = "project"; static final String GROUP_PARAM_NAME = "group"; - private static final String DEBUG_PARAM_NAME = "debug"; + @VisibleForTesting + static final String DEBUG_PARAM_NAME = "debug"; private final AuthorizationFramework authFramework; private RuntimeEnvironment env; @@ -525,7 +526,7 @@ private static Comparator getFileComparator() { @VisibleForTesting public static List getSortedFiles(File[] files) { - return Arrays.stream(files).sorted(getFileComparator()).map(File::getName).collect(Collectors.toList()); + return Arrays.stream(files).sorted(getFileComparator()).map(File::getName).toList(); } /** diff --git a/opengrok-web/src/main/java/org/opengrok/web/Scripts.java b/opengrok-web/src/main/java/org/opengrok/web/Scripts.java index 9d4bd455225..3166fdaffc0 100644 --- a/opengrok-web/src/main/java/org/opengrok/web/Scripts.java +++ b/opengrok-web/src/main/java/org/opengrok/web/Scripts.java @@ -18,7 +18,7 @@ */ /* - * Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2025, Oracle and/or its affiliates. All rights reserved. * Portions Copyright (c) 2017, 2020, Chris Fraire . * Portions Copyright (c) 2022, Krystof Tulinger . */ @@ -34,6 +34,7 @@ import java.util.TreeSet; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.VisibleForTesting; import org.webjars.WebJarAssetLocator; /** @@ -43,10 +44,14 @@ */ public class Scripts implements Iterable { - private static final String DEBUG_SUFFIX = "-debug"; + @VisibleForTesting + static final String DEBUG_SUFFIX = "-debug"; private static final String WEBJAR_PATH_PREFIX = "META-INF/resources/"; - enum Type { + /** + * Holds type of the script. + */ + public enum Type { MINIFIED, DEBUG } @@ -64,12 +69,18 @@ public abstract static class Script { */ protected String scriptData; protected int priority; + private final String scriptName; - protected Script(String scriptData, int priority) { + protected Script(String scriptName, String scriptData, int priority) { + this.scriptName = scriptName; this.scriptData = scriptData; this.priority = priority; } + public String getScriptName() { + return scriptName; + } + public abstract String toHtml(); public String getScriptData() { @@ -87,7 +98,11 @@ public int getPriority() { public static class FileScript extends Script { public FileScript(String script, int priority) { - super(script, priority); + super(null, script, priority); + } + + public FileScript(String scriptName, String script, int priority) { + super(scriptName, script, priority); } @Override @@ -98,7 +113,6 @@ public String toHtml() { this.getPriority() + "\">\n"; } - } protected static final Map SCRIPTS = new TreeMap<>(); @@ -209,6 +223,11 @@ public boolean isEmpty() { return outputScripts.iterator(); } + @VisibleForTesting + List getScriptNames() { + return outputScripts.stream().map(Script::getScriptName).toList(); + } + /** * Add a script which is identified by the name. * @@ -231,7 +250,7 @@ public boolean addScript(String contextPath, String scriptName, Type type) { } private void addScript(String contextPath, String scriptName) { - this.addScript(new FileScript(contextPath + SCRIPTS.get(scriptName).getScriptData(), + this.addScript(new FileScript(scriptName, contextPath + SCRIPTS.get(scriptName).getScriptData(), SCRIPTS.get(scriptName).getPriority())); } 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 6d7ace258b6..a2b44b407f8 100644 --- a/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java +++ b/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java @@ -874,4 +874,54 @@ public Cookie[] getCookies() { PageConfig cfg = PageConfig.get(req); assertEquals(List.of(SortOrder.LASTMODIFIED), cfg.getSortOrder()); } + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void testAddScript(boolean isDebug) { + HttpServletRequest req = new DummyHttpServletRequest() { + @Override + public String getPathInfo() { + return "path"; + } + + @Override + public String getContextPath() { + return "/"; + } + + @Override + public String getParameter(String name) { + if (name.equals(PageConfig.DEBUG_PARAM_NAME)) { + return isDebug ? "true" : "false"; + } + return null; + } + }; + + PageConfig cfg = PageConfig.get(req); + final String scriptName = "utils"; + cfg.addScript(scriptName); + assertTrue(cfg.getScripts().getScriptNames(). + contains(isDebug ? scriptName + Scripts.DEBUG_SUFFIX : scriptName)); + } + + @Test + void testAddScriptInvalid() { + HttpServletRequest req = new DummyHttpServletRequest() { + @Override + public String getPathInfo() { + return "path"; + } + + @Override + public String getContextPath() { + return "/"; + } + }; + + PageConfig cfg = PageConfig.get(req); + final String scriptName = "invalidScriptName"; + cfg.addScript(scriptName); + assertFalse(cfg.getScripts().getScriptNames().contains(scriptName)); + } }