/* 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);")); } }