/* * Freeplane - mind map editor * Copyright (C) 2010 Volker Boerchers * * This file author is Volker Boerchers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.freeplane.plugin.script; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.freeplane.plugin.script.ExecuteScriptAction.ExecutionMode; import org.freeplane.plugin.script.ScriptingConfiguration.ScriptMetaData; import org.junit.Test; public class ScriptingConfigurationTest { private String scriptName = "TestScript"; @Test public void testAnalyseScriptContent1() { // it's case insensitive // it's tolerant on white space String content = "// some comment" // + "//@ExecutionModes (\t{ ExecutionMode.ON_selECTED_NODE" // + ", \tON_SelECTED_NODE_RECURSIVELY = \"/menu_bar/help\" } )" // + "// @CacheScriptContent ( true\t ) " // + " def test() {}"; ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName); assertEquals("expected only modes set in the script", 2, metaData.getExecutionModes().size()); assertTrue("ON_SELECTED_NODE was set", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE)); final String scriptsParentLocation = ScriptingConfiguration.getScriptsParentLocations()[0]; assertEquals("menu location for ON_SELECTED_NODE should be default", ScriptingConfiguration.getScriptsLocation(scriptsParentLocation) + "/" + scriptName, metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE)); assertTrue("ON_SELECTED_NODE_RECURSIVELY was set", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY)); assertEquals("menu location for ON_SELECTED_NODE_RECURSIVELY was set explicitely", "/menu_bar/help", metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY)); assertTrue("CacheScriptContent was set to true", metaData.cacheContent()); } @Test public void testAnalyseScriptContentWithTitleKey() { // it's case insensitive // it's tolerant on white space String content = "// some comment" // + "\n//@ExecutionModes (\t{\n ExecutionMode.ON_selECTED_NODE=\"/menu_bar/help[icon_button_ok]\"" // + ",\n \tON_SelECTED_NODE_RECURSIVELY = \"/menu_bar/help[Test_Script]\" } )" // + "\n def test() {}\n"; ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName); final String scriptsParentLocation = ScriptingConfiguration.getScriptsParentLocations()[0]; assertEquals("expected only modes set in the script", 2, metaData.getExecutionModes().size()); assertTrue("ON_SELECTED_NODE was set", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE)); assertEquals("wrong menu location", "/menu_bar/help", metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE)); assertEquals("wrong title key", "icon_button_ok", metaData.getTitleKey(ExecutionMode.ON_SELECTED_NODE)); assertTrue("ON_SELECTED_NODE_RECURSIVELY was set", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY)); assertEquals("wrong menu location", "/menu_bar/help", metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY)); assertEquals("wrong title key", "Test_Script", metaData.getTitleKey(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY)); } @Test public void testAnalyseScriptContentRemoveDuplicates() { String content = "// some comment" + "\n// @ExecutionModes (\t{\n ExecutionMode.ON_selECTED_NODE_recursively,\n \tON_SelECTED_NODE_RECURSIVELY } )"; ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName); assertEquals("duplicated modes should not matter", 1, metaData.getExecutionModes().size()); assertTrue("ON_SELECTED_NODE_RECURSIVELY was set", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY)); assertTrue("CacheScriptContent=false is the default", !metaData.cacheContent()); } @Test public void testAnalyseScriptContentForFormula() { String content = "=\"blabla\"" // + "\n// @CacheScriptContent ( true\t ) "; ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName); assertEquals("single node mode should be removed for '=' scripts", 2, metaData.getExecutionModes().size()); assertTrue("ON_SELECTED_NODE shouldn't been removed", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE)); assertTrue("ON_SELECTED_NODE_RECURSIVELY shouldn't been removed", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY)); assertTrue("CacheScriptContent was set to true", metaData.cacheContent()); // assert that duplicate entries do no harm } @Test public void testParseExecutionModes() throws Exception { ScriptMetaData metaData = new ScriptMetaData("test"); ScriptingConfiguration.setExecutionModes( "@ExecutionModes({on_selected_node=\"/menu/bla/blupp\",on_single_node=\"/menu/hi/ho\"})", metaData); ScriptingConfiguration.setExecutionModes( "@ExecutionModes({on_selected_node=\"/menu/bla/blupp\"on_single_node=\"/menu/hi/ho\"})", metaData); ScriptingConfiguration.setExecutionModes("@ExecutionModes({on_single_node=\"/menu/hi/ho\"})", metaData); ScriptingConfiguration.setExecutionModes("@ExecutionModes({on_single_node})", metaData); ScriptingConfiguration.setExecutionModes("@ExecutionModes({\"/menu/hi/ho\"})", metaData); ScriptingConfiguration.setExecutionModes("@ExecutionModes({})", metaData); } }