View Javadoc
1   package com.atlassian.plugin.parsers;
2   
3   import com.google.common.collect.ImmutableList;
4   import org.junit.Test;
5   
6   import java.util.Collections;
7   import java.util.List;
8   
9   import static com.atlassian.plugin.parsers.SafeModeCommandLineArguments.PLUGIN_LIST_SEPARATOR;
10  import static java.util.Collections.singletonList;
11  import static org.junit.Assert.assertEquals;
12  import static org.junit.Assert.assertFalse;
13  import static org.junit.Assert.assertTrue;
14  
15  public class TestSafeModeCommandLineArguments {
16      private String testDisablePluginParameterLinux = "--disable-addons=";
17      private String testDisablePluginParameterWindows = "/disableaddons=";
18      private String pluginKeyWithSlashes = "com.atlassian.test.plugin/adsfasdf";
19      private String pluginKeyWithSpaces = "asdf.asdf adsfasdf";
20      private String ordinaryPluginKey = "com.atlassian.test.plugin";
21      private String pluginKeyWithEmojis = "asdf.🙈.plugin";
22      private String pluginKeyWithKanji ="佀佁佂佃佄佅但佇佈佉佊佋佌位低住";
23  
24      @Test
25      public void disablePluginParameterContainingKanjiShouldDisablePlugin() {
26          testDisablePlugins(singletonList(pluginKeyWithKanji), testDisablePluginParameterWindows, false);
27          testDisablePlugins(singletonList(pluginKeyWithKanji), testDisablePluginParameterLinux, false);
28      }
29  
30      @Test
31      public void disablePluginParameterContainingSlashesShouldDisablePlugin() {
32          testDisablePlugins(singletonList(pluginKeyWithSlashes), testDisablePluginParameterWindows, false);
33          testDisablePlugins(singletonList(pluginKeyWithSlashes), testDisablePluginParameterLinux, false);
34      }
35  
36      @Test
37      public void disablePluginParameterContainingEmojisShouldDisablePlugin() {
38          testDisablePlugins(singletonList(pluginKeyWithEmojis), testDisablePluginParameterWindows, false);
39          testDisablePlugins(singletonList(pluginKeyWithEmojis), testDisablePluginParameterLinux, false);
40      }
41  
42      @Test
43      public void disablePluginParameterContainingSpacesAndQuotesShouldDisablePlugin() {
44          testDisablePlugins(singletonList(pluginKeyWithSpaces), testDisablePluginParameterWindows, true);
45          testDisablePlugins(singletonList(pluginKeyWithSpaces), testDisablePluginParameterLinux, true);
46      }
47  
48      @Test
49      public void disablePluginParameterWithJustASCIICharactersShouldDisablePluginWithQuotes() {
50          testDisablePlugins(singletonList(ordinaryPluginKey), testDisablePluginParameterWindows, true);
51          testDisablePlugins(singletonList(ordinaryPluginKey), testDisablePluginParameterLinux, true);
52      }
53  
54      @Test
55      public void disableMultiplePluginsWithQuotesShouldDisablePlugin() {
56          List<String> plugins = ImmutableList.of(ordinaryPluginKey, pluginKeyWithSlashes, pluginKeyWithSpaces);
57          testDisablePlugins(plugins, testDisablePluginParameterWindows, true);
58          testDisablePlugins(plugins, testDisablePluginParameterLinux, true);
59      }
60  
61      @Test
62      public void disablePluginParameterWithJustASCIICharactersShouldDisablePlugin() {
63          testDisablePlugins(singletonList(ordinaryPluginKey), testDisablePluginParameterWindows, false);
64          testDisablePlugins(singletonList(ordinaryPluginKey), testDisablePluginParameterLinux, false);
65      }
66  
67      @Test
68      public void disableParameterWithNoArgumentsPresent() {
69          SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("--disable-addons");
70          assertEquals(Collections.emptyList(), safeModeCommandLineArguments.getDisabledPlugins().orElse(null));
71          assertFalse(safeModeCommandLineArguments.isSafeMode());
72      }
73  
74      @Test
75      public void disableParameterWithEqualsSignNoArgumentsPresent() {
76          SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("--disable-addons=");
77          assertEquals(Collections.emptyList(), safeModeCommandLineArguments.getDisabledPlugins().orElse(null));
78          assertFalse(safeModeCommandLineArguments.isSafeMode());
79      }
80  
81      @Test
82      public void noParametersPresent() {
83          SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("");
84          assertFalse(safeModeCommandLineArguments.getDisabledPlugins().isPresent());
85          assertFalse(safeModeCommandLineArguments.isSafeMode());
86          assertFalse(safeModeCommandLineArguments.shouldLastEnabledBeDisabled());
87      }
88  
89      @Test
90      public void disableLastEnabledParameterPresentWindows(){
91          SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("/disablelastenabled");
92          assertTrue(safeModeCommandLineArguments.shouldLastEnabledBeDisabled());
93      }
94  
95      @Test
96      public void disableLastEnabledParameterPresentLinux(){
97          SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("--disable-last-enabled");
98          assertTrue(safeModeCommandLineArguments.shouldLastEnabledBeDisabled());
99      }
100 
101     private void testDisablePlugins(List<String> plugins, String testParameter, boolean quotes) {
102         String pluginsList = "";
103 
104         for (String plugin : plugins) {
105             pluginsList = pluginsList.concat(PLUGIN_LIST_SEPARATOR).concat(plugin);
106         }
107 
108         if (quotes) {
109             pluginsList = testParameter.concat("\"".concat(pluginsList.substring(1)));//strip off the leading : and add a "
110         } else {
111             pluginsList = testParameter.concat(pluginsList.substring(1));//strip off the leading :
112         }
113 
114         if (quotes) {
115             pluginsList = pluginsList.concat("\"");
116         }
117         SafeModeCommandLineArguments parser = new SafeModeCommandLineArguments(pluginsList);
118 
119         plugins.forEach(p -> assertTrue(parser.isDisabledByParam(p)));
120     }
121 }