package net.sf.sahi.playback;
import net.sf.sahi.config.Configuration;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.*;
/**
* Sahi - Web Automation and Test Tool
* <p/>
* Copyright 2006 V Narayan Raman
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
public class SahiScriptTest {
TestScript testScript = new TestScript("scrName", null, "scrName");
@Before
public void setup() {
Configuration.init();
}
@Test
public void testGetInclude() {
assertEquals("prof.sah", SahiScript
.getInclude("/*asdad*/ _include(\"prof.sah\"); //asdasd\n"));
}
@Test
public void testGetIncludeSingleQuote() {
assertEquals("prof.sah", SahiScript.getInclude("_include('prof.sah')"));
}
@Test
public void testModify() {
assertEquals("_sahi.schedule(\"_sahi._assertEqual(_sahi._table(\\\"aa\\\"))\", \"scrName&n=1\");\r\n",
testScript.modify("_assertEqual(_table(\"aa\"))"));
assertEquals("_sahi._assertEqual(_sahi._table(\"aa\"))\r\n", testScript
.modify("__assertEqual(_table(\"aa\"))"));
assertEquals("if(_sahi._table(\"aa\"))\r\n", testScript.modify("if(_table(\"aa\"))"));
assertEquals(
"_sahi.schedule(\"_sahi._setGlobal(\\\"newFinanceTypeName\\\", \'sahiTestFT\'+_sahi._random(10000))\", \"scrName&n=1\");\r\n",
testScript
.modify("_setGlobal(\"newFinanceTypeName\", \'sahiTestFT\'+_random(10000))"));
assertEquals("var $n = _sahi._getGlobal(\"nv\");\r\n", testScript
.modify("var $n = _getGlobal(\"nv\");\r\n"));
assertEquals("var $n = _sahi._getGlobal(\"nv\");\r\n", testScript
.modify("var $n = _sahi._getGlobal(\"nv\");\r\n"));
assertEquals("_sahi._setGlobal(\"n\", \'aa\'+_sahi._random(10000));\r\n", testScript
.modify("_sahi._setGlobal(\"n\", \'aa\'+_random(10000));"));
assertEquals("_sahi._textbox(\"username\").value=\"kk\";\r\n", testScript
.modify("_textbox(\"username\").value=\"kk\";"));
assertEquals("_sahi._textbox(\"username\").value=\"kk\";\r\n", testScript
.modify("__textbox(\"username\").value=\"kk\";"));
assertEquals("_sahi.schedule(\"_sahi._call(fn1())\", \"scrName&n=1\");\r\n", testScript
.modify("_call(fn1())"));
assertEquals("_sahi.schedule(\"_sahi._click(\"+s_v($ar[$i[1][\"COL\"]])+\")\", \"scrName&n=1\");\r\n", testScript
.modify("_click($ar[$i[1][\"COL\"]])"));
}
@Test
public void testKeywordsAsASubstringFails() {
assertEquals(
"_sahi.schedule(\"_sahi._setValue(_sahi._textbox (\\\"form_loginname\\\"), \\\"narayanraman\\\");\", \"scrName&n=1\");\r\n",
testScript
.modify("_setValue(_textbox (\"form_loginname\"), \"narayanraman\");"));
}
@Test
public void testModifyFunctionNames() {
assertEquals("_sahi._setGlobal(", TestScript.modifyFunctionNames("_setGlobal("));
assertEquals("_insert (", TestScript.modifyFunctionNames("_insert ("));
assertEquals("_sahi._setValue (", TestScript.modifyFunctionNames("__setValue ("));
}
@Test
public void testGetRegExp() {
ArrayList<String> keywords = new ArrayList<String>();
keywords.add("_accessor");
keywords.add("_alert");
assertEquals("_sahi._?(_accessor|_alert)(\\s*\\()", TestScript.getRegExp(true, keywords));
}
@Test
public void testGetActionRegExp() {
ArrayList<String> keywords = new ArrayList<String>();
keywords.add("_alert");
keywords.add("_assertEqual");
assertEquals("^(?:_alert|_assertEqual)\\s*\\(.*", TestScript.getActionRegExp(keywords));
}
@Test
public void testLineStartsWithActionKeyword() {
assertTrue(TestScript.lineStartsWithActionKeyword("_alert()"));
}
@Test
public void xtestEfficiency() {
long start = System.currentTimeMillis();
TestScript.lineStartsWithActionKeyword("_alert()");
for (int i = 0; i < 10000; i++) {
TestScript.lineStartsWithActionKeyword("_alert()");
}
long t1 = System.currentTimeMillis() - start;
start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
TestScript.lineStartsWithActionKeyword("_alert()");
}
long t2 = System.currentTimeMillis() - start;
assertTrue( t1 < 100);
assertTrue( t2 < 100);
}
@Test
public void testRegEx() {
assertEquals("sahi_alert", "__alert".replaceAll("_?(_alert)", "sahi$1"));
assertEquals("sahi_alert", "_alert".replaceAll("_?(_alert)", "sahi$1"));
}
class TestScript extends SahiScript {
public TestScript() {
super(null, new ArrayList<String>(), null);
}
public TestScript(String fileName, ArrayList<String> parents, String scriptName) {
super(fileName, parents, scriptName);
}
String getFQN(String include) {
return null;
}
SahiScript getNewInstance(String scriptName, ArrayList<?> parentScriptName) {
return null;
}
protected void loadScript(String url) {
}
}
@Test
public void testBrackets() {
assertEquals("axx", "a((".replaceAll("\\(", "x"));
assertEquals("sahi_log (form_login", "_log (form_login".replaceAll(
"_?(_log|_textbox)(\\s*\\()", "sahi$1$2"));
assertEquals("sahi_log(form_login", "_log(form_login".replaceAll(
"_?(_log|_textbox)(\\s*\\()", "sahi$1$2"));
assertTrue("_assertEqual(".matches("^(_assertEqual)\\s*\\("));
assertTrue("_assertEqual (".matches("^(_assertEqual)\\s*\\("));
}
@Test
public void testGetActionKeywords() {
List<?> keywords = SahiScript.getActionKeyWords();
assertTrue(keywords.contains("_alert"));
assertTrue(keywords.contains("_assertEqual"));
assertTrue(keywords.contains("_assertNotEqual"));
assertTrue(keywords.contains("_assertNotNull"));
assertTrue(keywords.contains("_assertNull"));
assertTrue(keywords.contains("_assertTrue"));
assertTrue(keywords.contains("_assertNotTrue"));
assertTrue(keywords.contains("_click"));
assertTrue(keywords.contains("_clickLinkByAccessor"));
assertTrue(keywords.contains("_dragDrop"));
assertTrue(keywords.contains("_setSelected"));
assertTrue(keywords.contains("_setValue"));
assertTrue(keywords.contains("_simulateEvent"));
assertTrue(keywords.contains("_call"));
assertTrue(keywords.contains("_eval"));
assertTrue(keywords.contains("_setGlobal"));
assertTrue(keywords.contains("_wait"));
assertTrue(keywords.contains("_popup"));
assertTrue(keywords.contains("_highlight"));
assertTrue(keywords.contains("_log"));
assertTrue(keywords.contains("_navigateTo"));
}
@Test
public void testGetKeywords() {
List<?> keywords = SahiScript.getKeyWords();
assertTrue(keywords.contains("_accessor"));
assertTrue(keywords.contains("_alert"));
assertTrue(keywords.contains("_assertEqual"));
assertTrue(keywords.contains("_assertNotEqual"));
assertTrue(keywords.contains("_assertNotNull"));
assertTrue(keywords.contains("_assertNull"));
assertTrue(keywords.contains("_assertTrue"));
assertTrue(keywords.contains("_assertNotTrue"));
assertTrue(keywords.contains("_button"));
assertTrue(keywords.contains("_checkbox"));
assertTrue(keywords.contains("_click"));
assertTrue(keywords.contains("_clickLinkByAccessor"));
assertTrue(keywords.contains("_dragDrop"));
assertTrue(keywords.contains("_getCellText"));
assertTrue(keywords.contains("_getSelectedText"));
assertTrue(keywords.contains("_image"));
assertTrue(keywords.contains("_imageSubmitButton"));
assertTrue(keywords.contains("_link"));
assertTrue(keywords.contains("_password"));
assertTrue(keywords.contains("_radio"));
assertTrue(keywords.contains("_select"));
assertTrue(keywords.contains("_setSelected"));
assertTrue(keywords.contains("_setValue"));
assertTrue(keywords.contains("_simulateEvent"));
assertTrue(keywords.contains("_submit"));
assertTrue(keywords.contains("_textarea"));
assertTrue(keywords.contains("_textbox"));
assertTrue(keywords.contains("_event"));
assertTrue(keywords.contains("_call"));
assertTrue(keywords.contains("_eval"));
assertTrue(keywords.contains("_setGlobal"));
assertTrue(keywords.contains("_getGlobal"));
assertTrue(keywords.contains("_wait"));
assertTrue(keywords.contains("_random"));
assertTrue(keywords.contains("_savedRandom"));
assertTrue(keywords.contains("_cell"));
assertTrue(keywords.contains("_table"));
assertTrue(keywords.contains("_containsText"));
assertTrue(keywords.contains("_containsHTML"));
assertTrue(keywords.contains("_popup"));
assertTrue(keywords.contains("_byId"));
assertTrue(keywords.contains("_highlight"));
assertTrue(keywords.contains("_log"));
assertTrue(keywords.contains("_navigateTo"));
}
@Test
public void testFindCondition() {
assertEquals("'' == _textbox(\"t1\").value", testScript.findCondition("_condition('' == _textbox(\"t1\").value)"));
assertEquals("'$x' == _textbox(\"t1\").value", testScript.findCondition("_condition('$x' == _textbox(\"t1\").value)"));
}
@Test
public void testIsSet() throws Exception {
assertTrue(testScript.isSet("_set($a, \"abc\")"));
assertFalse(testScript.isSet("_setValue(xxx, \"abc\")"));
assertTrue(testScript.isSet("_popup(\"abc\")._set($a, \"abc\")"));
assertTrue(testScript.isSet("_popup($win)._set($a, \"abc\")"));
assertFalse(testScript.isSet("_xx_set(xxx, \"abc\")"));
}
@Test
public void testModifyConditionWithTwo$Vars() throws Exception {
assertEquals("if (_sahi._condition(\"\"+s_v($a)+\"==\"+s_v($b)+\"\", \"scrName&n=0\"))", testScript.modifyCondition("if (_condition($a==$b))", 0));
}
@Test
public void testModifyCondition() throws Exception {
assertEquals("if (_sahi._condition(\"a==b\", \"scrName&n=0\"))", testScript.modifyCondition("if (_condition(a==b))", 0));
assertEquals("if (_sahi._condition(\"\"+s_v($i)+\"==10\", \"scrName&n=0\"))", testScript.modifyCondition("if (_condition($i==10))", 0));
assertEquals("if (_sahi._condition(\"\"+s_v($x[$i])+\"==10\", \"scrName&n=0\"))", testScript.modifyCondition("if (_condition($x[$i]==10))", 0));
assertEquals("if (_sahi._condition(\"_sahi._link('a').href == \\\"abcd\\\"\", \"scrName&n=0\"))", testScript.modifyCondition("if (_condition(_link('a').href == \"abcd\"))", 0));
}
// public void testIf(){
// assertEquals("_sahi.schedule(\"_sahi.saveCondition('' == _sahi._textbox(\\\"t1\\\").value);\", \"scrName&n=10\");\r\nif (\"true\" == _sahi.getServerVar(\"condn\")) {",
// testScript.modifyIf("if (_condition('' == _textbox(\"t1\").value)) {", 10));
// }
@Test
public void testWait() {
assertEquals("_sahi.executeWait(\"_sahi._wait(1000)\", \"scrName&n=5\");\r\n", testScript.modifyWait("_wait(1000)", 5));
assertEquals("_sahi.executeWait(\"_sahi._wait(1000, _sahi._byId(\\\"abc\\\"));\", \"scrName&n=5\");\r\n", testScript.modifyWait("_wait(1000, _byId(\"abc\"))", 5));
assertEquals("_sahi.executeWait(\"_sahi._wait(1000, \"+s_v($BYID_ABC)+\");\", \"scrName&n=5\");\r\n", testScript.modifyWait("_wait(1000, $BYID_ABC)", 5));
assertEquals("_sahi.executeWait(\"_sahi._wait(1000, _sahi._exists(\"+s_v($BYID_ABC)+\"));\", \"scrName&n=5\");\r\n", testScript.modifyWait("_wait(1000, _exists($BYID_ABC))", 5));
}
@Test
public void testProcessSet() {
assertEquals("_sahi.schedule(\"_sahi.setServerVar('abc', document.links);\", \"scrName&n=23\");\r\nabc = _sahi.getServerVar('abc');\r\n", testScript.processSet("_set(abc, document.links)", 23));
assertEquals("_sahi.schedule(\"_sahi.setServerVar('abc', getLinks());\", \"scrName&n=23\");\r\nabc = _sahi.getServerVar('abc');\r\n", testScript.processSet("_set( abc, getLinks())", 23));
assertEquals("_sahi.schedule(\"_sahi.setServerVar('\\\\$abc', getLinks());\", \"scrName&n=23\");\r\n$abc = _sahi.getServerVar('\\$abc');\r\n", testScript.processSet("_set( $abc, getLinks())", 23));
assertEquals("_sahi.schedule(\"_sahi.setServerVar('\\\\$abc[\\\\$i]', getLinks());\", \"scrName&n=23\");\r\n$abc[$i] = _sahi.getServerVar('\\$abc[\\$i]');\r\n", testScript.processSet("_set( $abc[$i], getLinks())", 23));
assertEquals("_sahi.schedule(\"_sahi._popup('win')._sahi.setServerVar('abc', document.links);\", \"scrName&n=23\");\r\nabc = _sahi.getServerVar('abc');\r\n",
testScript.processSet("_popup('win')._set(abc, document.links)", 23));
}
@Test
public void testRemoveBrowserJS() {
assertEquals("a \n b c", testScript.removeBrowserJS("a <browser> asbs sd\n sd </browser>b<browser> asbs sd sd </browser> c"));
}
@Test
public void test2Params() {
assertEquals("_assertEqual(\\\"Rs. 18\\\", \"+s_v($table.get(\"Soap\", \"Price\"))+\");",
SahiScript.separateVariables("_assertEqual(\"Rs. 18\", $table.get(\"Soap\", \"Price\"));"));
assertEquals("_assertEqual(\\\"Rs. 18\\\", \"+s_v($table.get(\"Soap\",\t\"Price\"))+\");",
SahiScript.separateVariables("_assertEqual(\"Rs. 18\", $table.get(\"Soap\",\t\"Price\"));"));
}
@Test
public void testExtractBrowserJS() {
assertEquals(" alert(123);\n print('abc');\n", testScript.extractBrowserJS("a <browser>\n alert(123);\n</browser>\nb\n<browser>\n print('abc');\n</browser>\nc\n", false));
}
@Test
public void testWhiteSpaces() {
assertEquals("a();\r\n\r\nb();\r\n", testScript.modify("a();\r\n\r\nb();"));
assertEquals("a();\r\n\r\nb();\r\n", testScript.modify("a();\r\n\r\nb();\r\n"));
}
@Test
public void testQuotedDollarVariables() {
assertEquals("_sahi.schedule(\"_sahi.setServerVar('abc', \\\"$url\\\");\", \"scrName&n=23\");\r\nabc = _sahi.getServerVar('abc');\r\n", testScript.processSet("_set(abc, \"$url\")", 23));
}
@Test
public void testSeparateVariablesNoDollar() {
assertEquals("_setValue(_textbox(1), \\\"url\\\")", SahiScript.separateVariables("_setValue(_textbox(1), \"url\")"));
}
@Test
public void testSeparateVariablesWithQuotedDollar() {
assertEquals("_setValue(_textbox(1), \\\"$url\\\")", SahiScript.separateVariables("_setValue(_textbox(1), \"$url\")"));
}
@Test
public void testSeparateVariablesWithDollar() {
assertEquals("_setValue(_textbox(1), \"+s_v($url)+\")", SahiScript.separateVariables("_setValue(_textbox(1), $url)"));
}
@Test
public void testSeparateVariablesWith2Dollar() {
assertEquals("\"\"+s_v($a)+\"==\"+s_v($b)+\"\"", "\"" + SahiScript.separateVariables("$a==$b") + "\"");
assertEquals("\"_setValue(\"+s_v($a)+\", \"+s_v($b)+\")\"", "\"" + SahiScript.separateVariables("_setValue($a, $b)") + "\"");
}
@Test
public void testSeparateVariablesWithRegExp() {
assertEquals("_assertEqual(\"+s_v($fullFilePath.replace(/\\/g, '/'))+\", 'a');", SahiScript.separateVariables("_assertEqual($fullFilePath.replace(/\\/g, '/'), 'a');"));
assertEquals("_assertEqual(\"+s_v($fullFilePath.replace(/\\/g, '/'))+\", \"+s_v($resolvedPath.replace(/\\/g, '/'))+\");", SahiScript.separateVariables("_assertEqual($fullFilePath.replace(/\\/g, '/'), $resolvedPath.replace(/\\/g, '/'));"));
}
@Test
public void testNormalizeNewLinesForOSes() throws Exception {
assertEquals("a\nb\nc", testScript.normalizeNewLinesForOSes("a\r\nb\r\nc"));
assertEquals("a\nb\nc", testScript.normalizeNewLinesForOSes("a\nb\nc"));
assertEquals("a\nb\nc", testScript.normalizeNewLinesForOSes("a\rb\rc"));
assertEquals("a\nb\n\nc", testScript.normalizeNewLinesForOSes("a\nb\n\nc"));
assertEquals("a\nb\n\nc", testScript.normalizeNewLinesForOSes("a\rb\r\rc"));
assertEquals("a\nb\n\nc", testScript.normalizeNewLinesForOSes("a\r\nb\r\n\r\nc"));
}
}