From a6a4eb731990b57b33bbe3449db73b5998215ea6 Mon Sep 17 00:00:00 2001 From: Tunatroll Date: Sat, 7 Mar 2026 09:30:25 -0700 Subject: [PATCH 1/3] Add grand-flip-out plugin with IP warning Added grand-flip-out plugin with repository details and warning. --- plugins/grand-flip-out | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 plugins/grand-flip-out diff --git a/plugins/grand-flip-out b/plugins/grand-flip-out new file mode 100644 index 000000000000..d68fcc708b2a --- /dev/null +++ b/plugins/grand-flip-out @@ -0,0 +1,3 @@ +repository=https://github.com/Tunatroll/grand-flip-out.git +commit=1d2649de4cb8cdac32a771b6e6fcb9396e32fdc1 +warning=This plugin submits your IP address to a 3rd-party server not controlled or verified by RuneLite developers. From cd345e4b06da92421e9875072d8b13984bb87e4b Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 21 May 2026 10:03:53 +0000 Subject: [PATCH 2/3] Add warning metadata regression test Co-authored-by: Tunatroll --- .../pluginhub/packager/PluginTest.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java b/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java index 3aa33c51ff22..df11f1812148 100644 --- a/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java +++ b/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java @@ -79,6 +79,17 @@ public void testExamplePluginCompiles() throws DisabledPluginException, PluginBu } } + @Test + public void testWarningIsIncludedInDisplayData() throws DisabledPluginException, PluginBuildException, IOException, InterruptedException + { + String warning = "This plugin submits your IP address to a 3rd-party server."; + try (Plugin p = createExamplePluginWithWarning("warning", warning)) + { + p.build(Util.readRLVersion(), true); + Assert.assertEquals(warning, p.getDisplayData().getWarning()); + } + } + @Test public void testMissingPlugin() throws DisabledPluginException, PluginBuildException, IOException, InterruptedException { @@ -195,11 +206,22 @@ private static Plugin createExamplePlugin(String name) throws DisabledPluginExce return createExamplePlugin(name, "com.example"); } + private static Plugin createExamplePluginWithWarning(String name, String warning) throws DisabledPluginException, PluginBuildException, IOException, InterruptedException + { + return createExamplePlugin(name, "com.example", warning); + } + private static Plugin createExamplePlugin(String name, String packageName) throws DisabledPluginException, PluginBuildException, IOException, InterruptedException + { + return createExamplePlugin(name, packageName, null); + } + + private static Plugin createExamplePlugin(String name, String packageName, String warning) throws DisabledPluginException, PluginBuildException, IOException, InterruptedException { Plugin p = newPlugin(name, "" + "repository=https://github.com/runelite/example-plugin.git\n" + - "commit=0000000000000000000000000000000000000000"); + "commit=0000000000000000000000000000000000000000\n" + + (warning == null ? "" : "warning=" + warning)); Assert.assertEquals(0, new ProcessBuilder( new File("./create_new_plugin.py").getAbsolutePath(), From 95ed5de08c9653e5131d7ad94990e2fa53ccc65c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 21 May 2026 10:06:45 +0000 Subject: [PATCH 3/3] Keep warning regression test isolated Co-authored-by: Tunatroll --- .../pluginhub/packager/PluginTest.java | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java b/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java index df11f1812148..f36a6fdfae53 100644 --- a/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java +++ b/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java @@ -28,6 +28,8 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.nio.charset.StandardCharsets; import java.util.Properties; import lombok.extern.slf4j.Slf4j; @@ -80,12 +82,23 @@ public void testExamplePluginCompiles() throws DisabledPluginException, PluginBu } @Test - public void testWarningIsIncludedInDisplayData() throws DisabledPluginException, PluginBuildException, IOException, InterruptedException + public void testWarningIsIncludedInDisplayData() throws Throwable { String warning = "This plugin submits your IP address to a 3rd-party server."; - try (Plugin p = createExamplePluginWithWarning("warning", warning)) + try (Plugin p = newPlugin("warning", "" + + "repository=https://github.com/runelite/example-plugin.git\n" + + "commit=0000000000000000000000000000000000000000\n" + + "warning=" + warning)) { - p.build(Util.readRLVersion(), true); + try + { + assembleDisplayData(p); + Assert.fail(); + } + catch (IOException e) + { + assertContains(e.getMessage(), "chunk.properties"); + } Assert.assertEquals(warning, p.getDisplayData().getWarning()); } } @@ -206,22 +219,11 @@ private static Plugin createExamplePlugin(String name) throws DisabledPluginExce return createExamplePlugin(name, "com.example"); } - private static Plugin createExamplePluginWithWarning(String name, String warning) throws DisabledPluginException, PluginBuildException, IOException, InterruptedException - { - return createExamplePlugin(name, "com.example", warning); - } - private static Plugin createExamplePlugin(String name, String packageName) throws DisabledPluginException, PluginBuildException, IOException, InterruptedException - { - return createExamplePlugin(name, packageName, null); - } - - private static Plugin createExamplePlugin(String name, String packageName, String warning) throws DisabledPluginException, PluginBuildException, IOException, InterruptedException { Plugin p = newPlugin(name, "" + "repository=https://github.com/runelite/example-plugin.git\n" + - "commit=0000000000000000000000000000000000000000\n" + - (warning == null ? "" : "warning=" + warning)); + "commit=0000000000000000000000000000000000000000"); Assert.assertEquals(0, new ProcessBuilder( new File("./create_new_plugin.py").getAbsolutePath(), @@ -242,4 +244,18 @@ private void assertContains(String haystack, String needle) { Assert.assertTrue(haystack, haystack.contains(needle)); } + + private static void assembleDisplayData(Plugin plugin) throws Throwable + { + Method method = Plugin.class.getDeclaredMethod("assembleDisplayData", boolean.class); + method.setAccessible(true); + try + { + method.invoke(plugin, true); + } + catch (InvocationTargetException e) + { + throw e.getCause(); + } + } }