/* 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.processor.command.tests; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.matchers.JUnitMatchers.containsString; import java.io.File; import java.io.IOException; import org.junit.Test; import com.gorillalogic.monkeytalk.processor.PlaybackResult; import com.gorillalogic.monkeytalk.processor.PlaybackStatus; import com.gorillalogic.monkeytalk.processor.ScriptProcessor; public class VarsCommandTest extends BaseCommandHelper { @Test public void testVerifyWithMissingExpected() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Verify", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.ERROR)); assertThat(result.getMessage(), is("command 'Vars * Verify' must have the expected value as its first arg")); assertThat(output, containsString("START")); assertThat( output, containsString("COMPLETE : ERROR : command 'Vars * Verify' must have the expected value as its first arg")); } @Test public void testVerifyWithMissingVar() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Verify 123", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.ERROR)); assertThat(result.getMessage(), is("command 'Vars * Verify 123' must have a variable as its second arg")); assertThat(output, containsString("START")); assertThat( output, containsString("COMPLETE : ERROR : command 'Vars * Verify 123' must have a variable as its second arg")); } @Test public void testVerifyWithBadVar() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Verify 123 foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.ERROR)); assertThat( result.getMessage(), is("command 'Vars * Verify 123 foo' must have a valid variable as its second arg -- variable 'foo' not found")); assertThat(output, containsString("START")); assertThat( output, containsString("COMPLETE : ERROR : command 'Vars * Verify 123 foo' must have a valid variable as its second arg -- variable 'foo' not found")); } @Test public void testVerifyWithBadAction() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=123\nVars * VerifyFoo 123 foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.ERROR)); assertThat(result.getMessage(), is("command 'Vars * VerifyFoo 123 foo' has unknown action 'VerifyFoo'")); assertThat(output, containsString("START")); assertThat( output, containsString("COMPLETE : ERROR : command 'Vars * VerifyFoo 123 foo' has unknown action 'VerifyFoo'")); } @Test public void testVerify() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=123\nVars * Verify 123 foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.OK)); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=123 -> OK")); assertThat(output, containsString("Vars * Verify 123 foo -> OK")); assertThat(output, containsString("COMPLETE : OK")); } @Test public void testVerifyFailure() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=123\nVars * Verify 456 foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.FAILURE)); assertThat(result.getMessage(), is("Expected \"456\" but found \"123\"")); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=123 -> OK")); assertThat( output, containsString("Vars * Verify 456 foo -> FAILURE : Expected \"456\" but found \"123\"")); assertThat(output, containsString("COMPLETE : FAILURE : Expected \"456\" but found \"123\"")); } @Test public void testVerifyNot() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=123\nVars * VerifyNot 456 foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.OK)); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=123 -> OK")); assertThat(output, containsString("Vars * VerifyNot 456 foo -> OK")); assertThat(output, containsString("COMPLETE : OK")); } @Test public void testVerifyNotFailure() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=123\nVars * VerifyNot 123 foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.FAILURE)); assertThat(result.getMessage(), is("Expected not \"123\" but found \"123\"")); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=123 -> OK")); assertThat( output, containsString("Vars * VerifyNot 123 foo -> FAILURE : Expected not \"123\" but found \"123\"")); assertThat(output, containsString("COMPLETE : FAILURE : Expected not \"123\" but found \"123\"")); } @Test public void testVerifyWildcard() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=\"i like cheese\"\nVars * VerifyWildcard \"i ???? ch*\" foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.OK)); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=\"i like cheese\" -> OK")); assertThat(output, containsString("Vars * VerifyWildcard \"i ???? ch*\" foo -> OK")); assertThat(output, containsString("COMPLETE : OK")); } @Test public void testVerifyWildcardFailure() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=\"i like cheese\"\nVars * VerifyWildcard \"i ???? ch*ABC\" foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.FAILURE)); assertThat( result.getMessage(), is("Expected match to wildcard pattern \"i ???? ch*ABC\" but found \"i like cheese\"")); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=\"i like cheese\" -> OK")); assertThat( output, containsString("Vars * VerifyWildcard \"i ???? ch*ABC\" foo -> FAILURE : Expected match to wildcard pattern \"i ???? ch*ABC\" but found \"i like cheese\"")); assertThat( output, containsString("COMPLETE : FAILURE : Expected match to wildcard pattern \"i ???? ch*ABC\" but found \"i like cheese\"")); } @Test public void testVerifyNotWildcard() throws IOException { File dir = tempDir(); tempScript( "foo.mt", "Vars * Define foo=\"i like cheese\"\nVars * VerifyNotWildcard \"i ???? ch*ABC\" foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.OK)); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=\"i like cheese\" -> OK")); assertThat(output, containsString("Vars * VerifyNotWildcard \"i ???? ch*ABC\" foo -> OK")); assertThat(output, containsString("COMPLETE : OK")); } @Test public void testVerifyNotWildcardFailure() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=\"i like cheese\"\nVars * VerifyNotWildcard \"i ???? ch*\" foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.FAILURE)); assertThat( result.getMessage(), is("Expected non-match to wildcard pattern \"i ???? ch*\" but found \"i like cheese\"")); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=\"i like cheese\" -> OK")); assertThat( output, containsString("Vars * VerifyNotWildcard \"i ???? ch*\" foo -> FAILURE : Expected non-match to wildcard pattern \"i ???? ch*\" but found \"i like cheese\"")); assertThat( output, containsString("COMPLETE : FAILURE : Expected non-match to wildcard pattern \"i ???? ch*\" but found \"i like cheese\"")); } @Test public void testVerifyRegex() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=\"abc123\"\nVars * VerifyRegex \\w{3}\\d{3} foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.OK)); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=\"abc123\" -> OK")); assertThat(output, containsString("Vars * VerifyRegex \\w{3}\\d{3} foo -> OK")); assertThat(output, containsString("COMPLETE : OK")); } @Test public void testVerifyRegexFailure() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=\"abc123\"\nVars * VerifyRegex \\w{3}\\d{4} foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.FAILURE)); assertThat(result.getMessage(), is("Expected match to regex pattern \"\\w{3}\\d{4}\" but found \"abc123\"")); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=\"abc123\" -> OK")); assertThat( output, containsString("Vars * VerifyRegex \\w{3}\\d{4} foo -> FAILURE : Expected match to regex pattern \"\\w{3}\\d{4}\" but found \"abc123\"")); assertThat( output, containsString("COMPLETE : FAILURE : Expected match to regex pattern \"\\w{3}\\d{4}\" but found \"abc123\"")); } @Test public void testVerifyNotRegex() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=\"abc123\"\nVars * VerifyNotRegex \\w{3}\\d{4} foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.OK)); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=\"abc123\" -> OK")); assertThat(output, containsString("Vars * VerifyNotRegex \\w{3}\\d{4} foo -> OK")); assertThat(output, containsString("COMPLETE : OK")); } @Test public void testVerifyNotRegexFailure() throws IOException { File dir = tempDir(); tempScript("foo.mt", "Vars * Define foo=\"abc123\"\nVars * VerifyNotRegex \\w{3}\\d{3} foo", dir); ScriptProcessor processor = new ScriptProcessor(HOST, PORT, dir); processor.setPlaybackListener(LISTENER_WITH_OUTPUT); PlaybackResult result = processor.runScript("foo.mt"); assertThat("FAIL: " + result, result.getStatus(), is(PlaybackStatus.FAILURE)); assertThat(result.getMessage(), is("Expected non-match to regex pattern \"\\w{3}\\d{3}\" but found \"abc123\"")); assertThat(output, containsString("START")); assertThat(output, containsString("Vars * Define foo=\"abc123\" -> OK")); assertThat( output, containsString("Vars * VerifyNotRegex \\w{3}\\d{3} foo -> FAILURE : Expected non-match to regex pattern \"\\w{3}\\d{3}\" but found \"abc123\"")); assertThat( output, containsString("COMPLETE : FAILURE : Expected non-match to regex pattern \"\\w{3}\\d{3}\" but found \"abc123\"")); } }