/* 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.api.js.tools.tests;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.containsString;
import java.io.File;
import java.io.IOException;
import org.junit.AfterClass;
import org.junit.Test;
import com.gorillalogic.monkeytalk.api.js.tools.JSLibGenerator;
import com.gorillalogic.monkeytalk.utils.TestHelper;
public class JSLibGeneratorTest extends TestHelper {
@AfterClass
public static void afterClass() throws IOException {
cleanup();
}
@Test
public void testEmptyLib() throws IOException {
File dir = tempDir();
String js = JSLibGenerator.createLib("myproj", dir);
assertThat(js, containsString("// myproj.js generated by MonkeyTalk"));
assertThat(js, not(containsString("$")));
}
@Test
public void testLibForSingleScript() throws IOException {
File dir = tempDir();
tempScript("foo.mt", "Button OK Click", dir);
String js = JSLibGenerator.createLib("myproj", dir);
assertThat(js, containsString("// myproj.js generated by MonkeyTalk"));
assertThat(js, not(containsString("$")));
assertThat(js, containsString("myproj.foo = function(app)"));
assertThat(js, containsString("myproj.foo.prototype.call = function()"));
assertThat(js, containsString("MT.Application.prototype.foo = function()"));
}
@Test
public void testGenMultipleScripts() throws IOException {
File dir = tempDir();
tempScript("foo.mt", "Button OK Click", dir);
tempScript("bar.mt", "Input bar EnterText \"Bo Bo\"", dir);
tempScript("baz.mt", "Vars * Define first last", dir);
String js = JSLibGenerator.createLib("myproj", dir);
assertThat(js, containsString("// myproj.js generated by MonkeyTalk"));
assertThat(js, not(containsString("$")));
assertThat(js, containsString("myproj.foo = function(app)"));
assertThat(js, containsString("myproj.foo.prototype.call = function()"));
assertThat(js, containsString("MT.Application.prototype.foo = function()"));
assertThat(js, containsString("myproj.bar = function(app)"));
assertThat(js, containsString("myproj.bar.prototype.call = function()"));
assertThat(js, containsString("MT.Application.prototype.bar = function()"));
assertThat(js, containsString("myproj.baz = function(app)"));
assertThat(js, containsString("myproj.baz.prototype.call = function(first, last)"));
assertThat(js, containsString("MT.Application.prototype.baz = function()"));
}
@Test
public void testGenSingleCustomCommand() throws IOException {
File dir = tempDir();
tempScript("mycomp.myaction.mt", "Button OK Click", dir);
String js = JSLibGenerator.createLib("myproj", dir);
assertThat(js, containsString("// myproj.js generated by MonkeyTalk"));
assertThat(js, not(containsString("$")));
assertThat(js, containsString("myproj.mycomp = function(app, monkeyId)"));
assertThat(js, containsString("myproj.mycomp.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.mycomp = function(monkeyId)"));
assertThat(js, containsString("myproj.mycomp.prototype.myaction = function()"));
}
@Test
public void testGenSingleCustomCommandWithArgs() throws IOException {
File dir = tempDir();
tempScript("mycomp.myaction.mt", "Vars * Define first last in with", dir);
String js = JSLibGenerator.createLib("myproj", dir);
assertThat(js, containsString("// myproj.js generated by MonkeyTalk"));
assertThat(js, not(containsString("$")));
assertThat(js, containsString("myproj.mycomp = function(app, monkeyId)"));
assertThat(js, containsString("myproj.mycomp.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.mycomp = function(monkeyId)"));
assertThat(
js,
containsString("myproj.mycomp.prototype.myaction = function(first, last, _in, _with)"));
assertThat(
js,
containsString("MT.CustomType.prototype.run.call(this, 'mycomp', 'myaction', first, last, _in, _with);"));
}
@Test
public void testGenMultipleCustomCommand() throws IOException {
File dir = tempDir();
tempScript("mycompA.myactionA.mt", "Button OK Click", dir);
tempScript("mycompB.myactionB.mt", "Button OK Click", dir);
tempScript("mycompC.myactionC.mt", "Button OK Click", dir);
String js = JSLibGenerator.createLib("myproj", dir);
assertThat(js, containsString("// myproj.js generated by MonkeyTalk"));
assertThat(js, not(containsString("$")));
assertThat(js, containsString("myproj.mycompA = function(app, monkeyId)"));
assertThat(js, containsString("myproj.mycompA.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.mycompA = function(monkeyId)"));
assertThat(js, containsString("myproj.mycompA.prototype.myactionA = function()"));
assertThat(js, containsString("myproj.mycompB = function(app, monkeyId)"));
assertThat(js, containsString("myproj.mycompB.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.mycompB = function(monkeyId)"));
assertThat(js, containsString("myproj.mycompB.prototype.myactionB = function()"));
assertThat(js, containsString("myproj.mycompC = function(app, monkeyId)"));
assertThat(js, containsString("myproj.mycompC.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.mycompC = function(monkeyId)"));
assertThat(js, containsString("myproj.mycompC.prototype.myactionC = function()"));
}
@Test
public void testGenMultipleCustomCommandActions() throws IOException {
File dir = tempDir();
tempScript("mycomp.myactionA.mt", "Button OK Click", dir);
tempScript("mycomp.myactionB.mt", "Button OK Click", dir);
tempScript("mycomp.myactionC.mt", "Button OK Click", dir);
String js = JSLibGenerator.createLib("myproj", dir);
assertThat(js, containsString("// myproj.js generated by MonkeyTalk"));
assertThat(js, not(containsString("$")));
assertThat(js, containsString("myproj.mycomp = function(app, monkeyId)"));
assertThat(js, containsString("myproj.mycomp.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.mycomp = function(monkeyId)"));
assertThat(js, containsString("myproj.mycomp.prototype.myactionA = function()"));
assertThat(js, containsString("myproj.mycomp.prototype.myactionB = function()"));
assertThat(js, containsString("myproj.mycomp.prototype.myactionC = function()"));
}
@Test
public void testGenMultipleCustomCommandActionsUppercase() throws IOException {
File dir = tempDir();
tempScript("COMP.ACTIONA.mt", "Button OK Click", dir);
tempScript("COMP.ACTIONB.mt", "Button OK Click", dir);
tempScript("COMP.ACTIONC.mt", "Button OK Click", dir);
String js = JSLibGenerator.createLib("myproj", dir);
assertThat(js, containsString("// myproj.js generated by MonkeyTalk"));
assertThat(js, not(containsString("$")));
assertThat(js, containsString("myproj.COMP = function(app, monkeyId)"));
assertThat(js, containsString("myproj.COMP.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.cOMP = function(monkeyId)"));
assertThat(js, containsString("myproj.COMP.prototype.aCTIONA = function()"));
assertThat(js, containsString("myproj.COMP.prototype.aCTIONB = function()"));
assertThat(js, containsString("myproj.COMP.prototype.aCTIONC = function()"));
}
@Test
public void testGenEverything() throws IOException {
File dir = tempDir();
tempScript("foo.mt", "Button OK Click", dir);
tempScript("bar.mt", "Input bar EnterText \"Bo Bo\"", dir);
tempScript("baz.mt", "Vars * Define first last", dir);
tempScript("mycomp.myactionA.mt", "Button OK Click", dir);
tempScript("mycomp.myactionB.mt", "Button OK Click", dir);
tempScript("mycomp.myactionC.mt", "Button OK Click", dir);
tempScript("mycomp2.myactionA.mt", "Button OK Click", dir);
tempScript("mycomp2.myactionB.mt", "Button OK Click", dir);
tempScript("mycomp3.myargactionA.mt", "Vars * Define first last", dir);
tempScript("mycomp3.myargactionB.mt", "Vars * Define foo bar baz", dir);
String js = JSLibGenerator.createLib("myproj", dir);
assertThat(js, containsString("// myproj.js generated by MonkeyTalk"));
assertThat(js, not(containsString("$")));
assertThat(js, containsString("myproj.foo = function(app)"));
assertThat(js, containsString("myproj.foo.prototype.call = function()"));
assertThat(js, containsString("MT.Application.prototype.foo = function()"));
assertThat(js, containsString("myproj.bar = function(app)"));
assertThat(js, containsString("myproj.bar.prototype.call = function()"));
assertThat(js, containsString("MT.Application.prototype.bar = function()"));
assertThat(js, containsString("myproj.baz = function(app)"));
assertThat(js, containsString("myproj.baz.prototype.call = function(first, last)"));
assertThat(js, containsString("MT.Application.prototype.baz = function()"));
assertThat(js, containsString("myproj.mycomp = function(app, monkeyId)"));
assertThat(js, containsString("myproj.mycomp.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.mycomp = function(monkeyId)"));
assertThat(js, containsString("myproj.mycomp.prototype.myactionA = function()"));
assertThat(js, containsString("myproj.mycomp.prototype.myactionB = function()"));
assertThat(js, containsString("myproj.mycomp.prototype.myactionC = function()"));
assertThat(js, containsString("myproj.mycomp2 = function(app, monkeyId)"));
assertThat(js, containsString("myproj.mycomp2.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.mycomp2 = function(monkeyId)"));
assertThat(js, containsString("myproj.mycomp2.prototype.myactionA = function()"));
assertThat(js, containsString("myproj.mycomp2.prototype.myactionB = function()"));
assertThat(js, containsString("myproj.mycomp3 = function(app, monkeyId)"));
assertThat(js, containsString("myproj.mycomp3.prototype = new MT.CustomType;"));
assertThat(js, containsString("MT.Application.prototype.mycomp3 = function(monkeyId)"));
assertThat(js,
containsString("myproj.mycomp3.prototype.myargactionA = function(first, last)"));
assertThat(
js,
containsString("MT.CustomType.prototype.run.call(this, 'mycomp3', 'myargactionA', first, last);"));
assertThat(js,
containsString("myproj.mycomp3.prototype.myargactionB = function(foo, bar, baz)"));
assertThat(
js,
containsString("MT.CustomType.prototype.run.call(this, 'mycomp3', 'myargactionB', foo, bar, baz);"));
}
}