/* MonkeyTalk - a cross-platform functional testing tool
Copyright (C) 2012 Gorilla Logic, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package com.gorillalogic.monkeytalk.runner.tests;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import static org.junit.matchers.JUnitMatchers.containsString;
import java.io.File;
import java.io.IOException;
import org.junit.Ignore;
import org.junit.Test;
import com.gorillalogic.monkeytalk.api.js.tools.JSHelper;
import com.gorillalogic.monkeytalk.runner.Runner;
public class RunnerTest extends BaseHelper {
@Test
public void testScript() throws IOException {
File dir = tempDir();
File script = tempScript("script.mt", "Button OK Click", dir);
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT),
script.getAbsolutePath() };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(1));
assertThat(server.getCommands().get(0).getCommand(), is("Button OK Click"));
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("result: OK"));
}
@Test
public void testSuite() throws IOException {
File dir = tempDir();
tempScript("foo.mt", "Button FOO Tap\nButton FOO2 Tap\nButton FOO3 Tap", dir);
tempScript("bar.mt", "Button BAR Tap", dir);
File suite = tempScript("mysuite.mts", "Test foo.mt Run\nTest bar.mt Run", dir);
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT), suite.getAbsolutePath() };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(4));
assertThat(server.getCommands().get(0).getCommand(), is("Button FOO Tap"));
assertThat(server.getCommands().get(1).getCommand(), is("Button FOO2 Tap"));
assertThat(server.getCommands().get(2).getCommand(), is("Button FOO3 Tap"));
assertThat(server.getCommands().get(3).getCommand(), is("Button BAR Tap"));
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("running suite : 2 tests"));
assertThat(output.toString(), containsString("1 : foo.mt"));
assertThat(output.toString(), containsString("test result: OK"));
assertThat(output.toString(), containsString("2 : bar.mt"));
assertThat(output.toString(), containsString("test result: OK"));
assertThat(output.toString(), containsString("result: OK"));
}
@Test
public void testWithNullArgs() {
Runner.main(null);
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("\n\nERROR: Bad commandline args\n\n"));
assertThat(output.toString(), not(containsString("print version and exit")));
}
@Test
public void testWithEmptyArgs() {
Runner.main(new String[] {});
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("\n\nERROR: Bad commandline args\n\n"));
assertThat(output.toString(), not(containsString("print version and exit")));
}
@Test
public void testScriptWithBadAgent() {
Runner.main(new String[] { "-agent", "BADAGENT" });
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(),
containsString("\n\nERROR: Unable to find agent BADAGENT\n\n"));
assertThat(output.toString(), containsString("print version and exit"));
}
@Test
public void testWithNoScript() {
Runner.main(new String[] { "-agent", "ios" });
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(),
containsString("ERROR: You must specify a script or suite to run"));
assertThat(output.toString(), containsString("print version and exit"));
}
@Test
public void testWithMissingScript() {
Runner.main(new String[] { "-agent", "ios", "missing.mt" });
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("ERROR: Bad input script. File not found"));
assertThat(output.toString(), containsString("print version and exit"));
}
@Test
public void testJavascript() throws IOException {
File dir = tempDir();
File foo = tempScript("foo.mt", "Button FOO Tap\nInput name EnterText \"Bo Bo\"", dir);
JSHelper.genAPIAndLib(dir);
JSHelper.genJS(foo);
File fooJS = new File(dir, "foo.js");
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT),
fooJS.getAbsolutePath(), "-verbose" };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(2));
assertThat(server.getCommands().get(0).getCommand(), is("Button FOO tap"));
assertThat(server.getCommands().get(1).getCommand(), is("Input name enterText \"Bo Bo\""));
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("Button FOO tap -> OK"));
assertThat(output.toString(), containsString("Input name enterText \"Bo Bo\" -> OK"));
assertThat(output.toString(), containsString("result: OK"));
}
@Test
public void testQuietScript() throws IOException {
File dir = tempDir();
File script = tempScript("script.mt", "Button OK Click", dir);
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT), "-quiet",
script.getAbsolutePath() };
Runner.main(args);
assertThat(output.toString(), is(""));
}
@Test
public void testVerboseScript() throws IOException {
File dir = tempDir();
File script = tempScript("script.mt", "Button OK Tap", dir);
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT), "-verbose",
script.getAbsolutePath() };
Runner.main(args);
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("Button OK Tap -> OK"));
assertThat(output.toString(), containsString("result: OK"));
}
@Test
public void testQuietSuite() throws IOException {
File dir = tempDir();
tempScript("foo.mt", "Button FOO Tap\nButton FOO2 Tap\nButton FOO3 Tap", dir);
tempScript("bar.mt", "Button BAR Tap", dir);
File suite = tempScript("mysuite.mts", "Test foo.mt Run\nTest bar.mt Run", dir);
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT),
suite.getAbsolutePath(), "-quiet" };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(4));
assertThat(server.getCommands().get(0).getCommand(), is("Button FOO Tap"));
assertThat(server.getCommands().get(1).getCommand(), is("Button FOO2 Tap"));
assertThat(server.getCommands().get(2).getCommand(), is("Button FOO3 Tap"));
assertThat(server.getCommands().get(3).getCommand(), is("Button BAR Tap"));
assertThat(output.toString(), is(""));
}
@Test
public void testVerboseSuite() throws IOException {
File dir = tempDir();
tempScript("foo.mt", "Button FOO Tap\nButton FOO2 Tap\nButton FOO3 Tap", dir);
tempScript("bar.mt", "Button BAR Tap", dir);
File suite = tempScript("mysuite.mts", "Test foo.mt Run\nTest bar.mt Run", dir);
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT),
suite.getAbsolutePath(), "-verbose" };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(4));
assertThat(server.getCommands().get(0).getCommand(), is("Button FOO Tap"));
assertThat(server.getCommands().get(1).getCommand(), is("Button FOO2 Tap"));
assertThat(server.getCommands().get(2).getCommand(), is("Button FOO3 Tap"));
assertThat(server.getCommands().get(3).getCommand(), is("Button BAR Tap"));
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("running suite : 2 tests"));
assertThat(output.toString(), containsString("1 : foo.mt"));
assertThat(output.toString(), containsString("Button FOO Tap -> OK"));
assertThat(output.toString(), containsString("Button FOO2 Tap -> OK"));
assertThat(output.toString(), containsString("Button FOO3 Tap -> OK"));
assertThat(output.toString(), containsString("test result: OK"));
assertThat(output.toString(), containsString("2 : bar.mt"));
assertThat(output.toString(), containsString("Button BAR Tap -> OK"));
assertThat(output.toString(), containsString("test result: OK"));
assertThat(output.toString(), containsString("result: OK"));
}
@Test
public void testScriptAndroid() throws IOException {
File dir = tempDir();
File script = tempScript("script.mt", "Button OK Click", dir);
String[] args = { "-agent", "android", "-port", Integer.toString(PORT),
script.getAbsolutePath(), "-verbose" };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(1));
assertThat(server.getCommands().get(0).getCommand(), is("Button OK Click"));
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("Button OK Click -> OK"));
assertThat(output.toString(), containsString("result: OK"));
}
@Test
public void testScriptAndroidWithBadAdbProp() throws IOException {
File dir = tempDir();
File script = tempScript("script.mt", "Button OK Click", dir);
String[] args = { "-agent", "Android", "-adb", "/bin/echo", script.getAbsolutePath() };
Runner.main(args);
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("ERROR: Android - adb not needed"));
assertThat(output.toString(), containsString("print version and exit"));
}
@Test
public void testScriptAndroidEmulator() throws IOException {
File dir = tempDir();
File script = tempScript("script.mt", "Button OK Click", dir);
String[] args = { "-agent", "AndroidEmulator", "-adb", "/bin/echo", "-port",
Integer.toString(PORT), script.getAbsolutePath(), "-verbose" };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(1));
assertThat(server.getCommands().get(0).getCommand(), is("Button OK Click"));
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("Button OK Click -> OK"));
assertThat(output.toString(), containsString("result: OK"));
}
@Ignore
@Test
public void testScriptAndroidEmulatorWithoutAdb() throws IOException {
File dir = tempDir();
File script = tempScript("script.mt", "Button OK Click", dir);
String[] args = { "-agent", "AndroidEmulator", script.getAbsolutePath() };
try {
Runner.main(args);
} catch (RuntimeException ex) {
assertThat(ex.getMessage(), containsString("you must specify adb"));
assertThat(output.toString(),
containsString("Usage: <main class> [options] scripts..."));
return;
}
fail("should have thrown exception");
}
@Test
public void testMultipleScripts() throws IOException {
File dir = tempDir();
File script1 = tempScript("script1.mt", "Button OK Click", dir);
File script2 = tempScript("script2.mt", "Button FOO Click", dir);
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT),
script1.getAbsolutePath(), script2.getAbsolutePath(), "-verbose" };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(2));
assertThat(server.getCommands().get(0).getCommand(), is("Button OK Click"));
assertThat(server.getCommands().get(1).getCommand(), is("Button FOO Click"));
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("Button OK Click -> OK"));
assertThat(output.toString(), containsString("result: OK\nMonkeyTalk"));
assertThat(output.toString(), containsString("Button FOO Click -> OK"));
}
@Test
public void testScriptWithTimeoutAndThinktime() throws IOException {
File dir = tempDir();
File foo = tempScript("foo.mt", "Button FOO Tap\nButton BAR Tap %timeout=2345", dir);
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT), "-timeout", "1234",
"-thinktime", "567", "-startup", "0", "-verbose", foo.getAbsolutePath() };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(2));
assertThat(server.getCommands().get(0).getCommand(),
is("Button FOO Tap %thinktime=567 %timeout=1234"));
assertThat(server.getCommands().get(1).getCommand(),
is("Button BAR Tap %thinktime=567 %timeout=2345"));
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("Button FOO Tap -> OK"));
assertThat(output.toString(), containsString("Button BAR Tap %timeout=2345 -> OK"));
assertThat(output.toString(), containsString("result: OK"));
}
@Test
public void testScriptWithBadStartup() throws IOException {
File dir = tempDir();
File foo = tempScript("foo.mt", "Button FOO Tap", dir);
String[] args = { "-agent", "iOS", "-startup", "1", foo.getAbsolutePath() };
Runner.main(args);
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(),
containsString("ERROR: Unable to startup MonkeyTalk connection - timeout after 1s"));
assertThat(output.toString(), containsString("print version and exit"));
}
@Test
public void testScriptWithDebugPrint() throws IOException {
File dir = tempDir();
File foo = tempScript("foo.mt",
"Button FOO Tap\nDebug * Print foo bar baz\nButton BAR Tap", dir);
String[] args = { "-agent", "ios", "-port", Integer.toString(PORT), "-verbose",
foo.getAbsolutePath() };
Runner.main(args);
assertThat(server.getCommands(), notNullValue());
assertThat(server.getCommands().size(), is(2));
assertThat(server.getCommands().get(0).getCommand(), is("Button FOO Tap"));
assertThat(server.getCommands().get(1).getCommand(), is("Button BAR Tap"));
assertThat(output.toString(), containsString("www.gorillalogic.com"));
assertThat(output.toString(), containsString("Button FOO Tap -> OK\n"));
assertThat(output.toString(), containsString("foo bar baz\n"));
assertThat(output.toString(), containsString("Button BAR Tap -> OK\n"));
assertThat(output.toString(), containsString("result: OK"));
}
}