001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.tools;
016    
017    import com.liferay.portal.kernel.util.CharPool;
018    import com.liferay.portal.kernel.util.FileUtil;
019    import com.liferay.portal.kernel.util.SetUtil;
020    import com.liferay.portal.kernel.util.StringBundler;
021    import com.liferay.portal.kernel.util.StringPool;
022    import com.liferay.portal.kernel.util.StringUtil;
023    import com.liferay.portal.kernel.util.UnicodeFormatter;
024    import com.liferay.portal.tools.servicebuilder.ServiceBuilder;
025    import com.liferay.portal.util.InitUtil;
026    
027    import java.io.File;
028    
029    import java.util.HashMap;
030    import java.util.Map;
031    import java.util.Set;
032    
033    import org.apache.tools.ant.DirectoryScanner;
034    
035    /**
036     * @author Brian Wing Shun Chan
037     */
038    public class SeleneseToJavaBuilder {
039    
040            public static void main(String[] args) throws Exception {
041                    InitUtil.initWithSpring();
042    
043                    if (args.length == 1) {
044                            new SeleneseToJavaBuilder(args[0]);
045                    }
046                    else {
047                            throw new IllegalArgumentException();
048                    }
049            }
050    
051            public SeleneseToJavaBuilder(String basedir) throws Exception {
052                    DirectoryScanner ds = new DirectoryScanner();
053    
054                    ds.setBasedir(basedir);
055                    ds.setExcludes(
056                            new String[] {
057                                    "**\\EvaluateLogTest.java", "**\\IterateThemeTest.java",
058                                    "**\\StopSeleniumTest.java",
059                                    "**\\WaitForSystemShutdownTest.java"
060                            });
061                    ds.setIncludes(new String[] {"**\\*Test.html", "**\\*Test.java"});
062                    /*ds.setIncludes(
063                            new String[] {
064                                    "**\\liferay\\portalweb\\portal\\login\\*Test.html",
065                                    "**\\liferay\\portalweb\\portal\\login\\*Test.java"
066                            });*/
067    
068                    ds.scan();
069    
070                    Set<String> fileNames = SetUtil.fromArray(ds.getIncludedFiles());
071    
072                    for (String fileName : fileNames) {
073    
074                            // I would have preferred to use XlateHtmlSeleneseToJava, but it
075                            // is horribly out of sync with Selenium IDE and generates incorrect
076                            // code.
077    
078                            /*String input = StringUtil.replace(
079                                    basedir + "/" + fileName, "\\", "/");
080    
081                            XlateHtmlSeleneseToJava.main(
082                                    new String[] {
083                                            "test", "-silent", input
084                                    }
085                            );*/
086    
087                            if (fileName.endsWith("Test.html")) {
088                                    translate(basedir, fileName);
089                            }
090                            else if (fileName.endsWith("Test.java")) {
091                                    if (!fileNames.contains(
092                                                    fileName.substring(0, fileName.length() - 5) +
093                                                            ".html")) {
094    
095                                            System.out.println("Unused: " + fileName);
096                                    }
097                            }
098                    }
099            }
100    
101            protected String fixParam(String param) {
102                    StringBuilder sb = new StringBuilder();
103    
104                    char[] array = param.toCharArray();
105    
106                    for (int i = 0; i < array.length; ++i) {
107                            char c = array[i];
108    
109                            if (c == CharPool.BACK_SLASH) {
110                                    sb.append("\\\\");
111                            }
112                            else if (c == CharPool.QUOTE) {
113                                    sb.append("\\\"");
114                            }
115                            else if (Character.isWhitespace(c)) {
116                                    sb.append(c);
117                            }
118                            else if ((c < 0x0020) || (c > 0x007e)) {
119                                    sb.append("\\u");
120                                    sb.append(UnicodeFormatter.charToHex(c));
121                            }
122                            else {
123                                    sb.append(c);
124                            }
125                    }
126    
127                    return StringUtil.replace(
128                            sb.toString(), _FIX_PARAM_OLD_SUBS, _FIX_PARAM_NEW_SUBS);
129            }
130    
131            protected String[] getParams(String step) throws Exception {
132                    String[] params = new String[3];
133    
134                    int x = 0;
135                    int y = 0;
136    
137                    for (int i = 0; i < 3; i++) {
138                            x = step.indexOf("<td>", x) + 4;
139                            y = step.indexOf("\n", x);
140                            y = step.lastIndexOf("</td>", y);
141    
142                            params[i] = step.substring(x, y);
143                    }
144    
145                    return params;
146            }
147    
148            protected void translate(String basedir, String fileName) throws Exception {
149                    fileName = StringUtil.replace(
150                            fileName, StringPool.BACK_SLASH, StringPool.SLASH);
151    
152                    int x = fileName.lastIndexOf(StringPool.SLASH);
153                    int y = fileName.indexOf(CharPool.PERIOD);
154    
155                    String testPackagePath = StringUtil.replace(
156                            fileName.substring(0, x), StringPool.SLASH, StringPool.PERIOD);
157                    String testName = fileName.substring(x + 1, y);
158                    String testMethodName =
159                            "test" + testName.substring(0, testName.length() - 4);
160                    String testFileName =
161                            basedir + "/" + fileName.substring(0, y) + ".java";
162    
163                    StringBundler sb = new StringBundler();
164    
165                    sb.append("package ");
166                    sb.append(testPackagePath);
167                    sb.append(";\n\n");
168    
169                    sb.append("import com.liferay.portal.kernel.util.FileUtil;\n");
170                    sb.append("import com.liferay.portal.kernel.util.StringPool;\n");
171                    sb.append("import com.liferay.portalweb.portal.BaseTestCase;\n\n");
172                    sb.append(
173                            "import com.liferay.portalweb.portal.util.RuntimeVariables;\n\n");
174    
175                    sb.append("public class ");
176                    sb.append(testName);
177                    sb.append(" extends BaseTestCase {");
178    
179                    sb.append("public void ");
180                    sb.append(testMethodName);
181                    sb.append("() throws Exception {");
182    
183                    String xml = FileUtil.read(basedir + "/" + fileName);
184    
185                    if ((xml.indexOf("<title>" + testName + "</title>") == -1) ||
186                            (xml.indexOf("colspan=\"3\">" + testName + "</td>") == -1)) {
187    
188                            System.out.println(testName + " has an invalid test name");
189                    }
190    
191                    if (xml.indexOf("&gt;") != -1) {
192                            xml = StringUtil.replace(xml, "&gt;", ">");
193    
194                            FileUtil.write(basedir + "/" + fileName, xml);
195                    }
196    
197                    if (xml.indexOf("&lt;") != -1) {
198                            xml = StringUtil.replace(xml, "&lt;", "<");
199    
200                            FileUtil.write(basedir + "/" + fileName, xml);
201                    }
202    
203                    if (xml.indexOf("&quot;") != -1) {
204                            xml = StringUtil.replace(xml, "&quot;", "\"");
205    
206                            FileUtil.write(basedir + "/" + fileName, xml);
207                    }
208    
209                    x = xml.indexOf("<tbody>");
210                    y = xml.indexOf("</tbody>");
211    
212                    xml = xml.substring(x, y + 8);
213    
214                    Map<String, String> labels = new HashMap<String, String>();
215    
216                    int labelCount = 1;
217    
218                    Map<Integer, Boolean> takeScreenShots = new HashMap<Integer, Boolean>();
219    
220                    x = 0;
221                    y = 0;
222    
223                    while (true) {
224                            x = xml.indexOf("<tr>", x);
225                            y = xml.indexOf("\n</tr>", x);
226    
227                            if ((x == -1) || (y == -1)) {
228                                    break;
229                            }
230    
231                            x += 6;
232                            y++;
233    
234                            String step = xml.substring(x, y);
235    
236                            String[] params = getParams(step);
237    
238                            String param1 = params[0];
239                            String param2 = fixParam(params[1]);
240    
241                            if (param1.equals("assertConfirmation")) {
242                                    int previousX = x - 6;
243    
244                                    previousX = xml.lastIndexOf("<tr>", previousX - 1);
245                                    previousX += 6;
246    
247                                    takeScreenShots.put(previousX, Boolean.FALSE);
248                            }
249                            else if (param1.equals("label")) {
250                                    String label = labels.get(param2);
251    
252                                    if (label == null) {
253                                            labelCount++;
254    
255                                            label = labels.put(param2, String.valueOf(labelCount));
256                                    }
257                            }
258                    }
259    
260                    if (labels.size() > 0) {
261                            sb.append("int label = 1;");
262    
263                            sb.append("while (label >= 1) {");
264                            sb.append("switch (label) {");
265                            sb.append("case 1:");
266                    }
267    
268                    x = 0;
269                    y = 0;
270    
271                    while (true) {
272                            x = xml.indexOf("<tr>", x);
273                            y = xml.indexOf("\n</tr>", x);
274    
275                            if ((x == -1) || (y == -1)) {
276                                    break;
277                            }
278    
279                            x += 6;
280                            y++;
281    
282                            String step = xml.substring(x, y);
283    
284                            String[] params = getParams(step);
285    
286                            String param1 = params[0];
287                            String param2 = fixParam(params[1]);
288                            String param3 = fixParam(params[2]);
289    
290                            if (param1.equals("addSelection") || param1.equals("clickAt") ||
291                                    param1.equals("doubleClickAt") || param1.equals("keyPress") ||
292                                    param1.equals("mouseMoveAt") || param1.equals("openWindow") ||
293                                    param1.equals("select") || param1.equals("type") ||
294                                    param1.equals("typeKeys") || param1.equals("uploadFile") ||
295                                    param1.equals("waitForPopUp")) {
296    
297                                    sb.append("selenium.");
298                                    sb.append(param1);
299                                    sb.append("(");
300    
301                                    if (param2.startsWith("${")) {
302                                            sb.append("RuntimeVariables.getValue(\"");
303    
304                                            String text = param2.substring(2, param2.length() - 1);
305    
306                                            sb.append(text);
307                                            sb.append("\")");
308                                    }
309                                    else {
310                                            sb.append("\"");
311                                            sb.append(param2);
312                                            sb.append("\"");
313                                    }
314    
315                                    sb.append(", RuntimeVariables.replace(");
316    
317                                    if (param3.startsWith("${")) {
318                                            sb.append("RuntimeVariables.getValue(\"");
319    
320                                            String text = param3.substring(2, param3.length() - 1);
321    
322                                            sb.append(text);
323                                            sb.append("\")");
324                                    }
325                                    else {
326                                            sb.append("\"");
327                                            sb.append(param3);
328                                            sb.append("\"");
329                                    }
330    
331                                    sb.append("));");
332                            }
333                            else if (param1.equals("assertAlert") ||
334                                             param1.equals("assertNotAlert")) {
335    
336                                    if (param1.equals("assertAlert")) {
337                                            sb.append("assertEquals");
338                                    }
339                                    else if (param1.equals("assertNotAlert")) {
340                                            sb.append("assertNotEquals");
341                                    }
342    
343                                    sb.append("(\"");
344                                    sb.append(param2);
345                                    sb.append("\", selenium.getAlert());");
346                            }
347                            else if (param1.equals("assertChecked") ||
348                                             param1.equals("assertNotChecked")) {
349    
350                                    if (param1.equals("assertChecked")) {
351                                            sb.append("assertTrue");
352                                    }
353                                    else if (param1.equals("assertNotChecked")) {
354                                            sb.append("assertFalse");
355                                    }
356    
357                                    sb.append("(selenium.isChecked(\"");
358                                    sb.append(param2);
359                                    sb.append("\"));");
360                            }
361                            else if (param1.equals("assertConfirmation")) {
362                                    param2 = StringUtil.replace(param2, "?", "[\\\\s\\\\S]");
363    
364                                    sb.append("assertTrue(selenium.getConfirmation().matches(\"^");
365                                    sb.append(param2);
366                                    sb.append("$\"));");
367                            }
368                            else if (param1.equals("assertLocation") ||
369                                             param1.equals("assertNotLocation")) {
370    
371                                    if (param1.equals("assertLocation")) {
372                                            sb.append("assertEquals");
373                                    }
374                                    else if (param1.equals("assertNotLocation")) {
375                                            sb.append("assertNotEquals");
376                                    }
377    
378                                    sb.append("(RuntimeVariables.replace(\"");
379                                    sb.append(param2);
380                                    sb.append("\"), selenium.getLocation());");
381                            }
382                            else if (param1.equals("assertElementNotPresent") ||
383                                             param1.equals("assertElementPresent")) {
384    
385                                    if (param1.equals("assertElementNotPresent")) {
386                                            sb.append("assertFalse");
387                                    }
388                                    else if (param1.equals("assertElementPresent")) {
389                                            sb.append("assertTrue");
390                                    }
391    
392                                    sb.append("(selenium.isElementPresent(\"");
393                                    sb.append(param2);
394                                    sb.append("\"));");
395                            }
396                            else if (param1.equals("assertNotPartialText") ||
397                                             param1.equals("assertPartialText")) {
398    
399                                    if (param1.equals("assertNotPartialText")) {
400                                            sb.append("assertFalse");
401                                    }
402                                    else if (param1.equals("assertPartialText")) {
403                                            sb.append("assertTrue");
404                                    }
405    
406                                    sb.append("(selenium.isPartialText(\"");
407                                    sb.append(param2);
408                                    sb.append("\", ");
409    
410                                    if (param3.startsWith("${")) {
411                                            sb.append("RuntimeVariables.getValue(\"");
412    
413                                            String text = param3.substring(2, param3.length() - 1);
414    
415                                            sb.append(text);
416                                            sb.append("\")");
417                                    }
418                                    else {
419                                            sb.append("\"");
420                                            sb.append(param3);
421                                            sb.append("\"");
422                                    }
423    
424                                    sb.append("));");
425                            }
426                            else if (param1.equals("assertNotSelectedLabel") ||
427                                             param1.equals("assertSelectedLabel")) {
428    
429                                    if (param1.equals("assertNotSelectedLabel")) {
430                                            sb.append("assertNotEquals");
431                                    }
432                                    else if (param1.equals("assertSelectedLabel")) {
433                                            sb.append("assertEquals");
434                                    }
435    
436                                    sb.append("(");
437    
438                                    if (param3.startsWith("${")) {
439                                            sb.append("RuntimeVariables.getValue(\"");
440    
441                                            String text = param3.substring(2, param3.length() - 1);
442    
443                                            sb.append(text);
444                                            sb.append("\")");
445                                    }
446                                    else {
447                                            sb.append("\"");
448                                            sb.append(param3);
449                                            sb.append("\"");
450                                    }
451    
452                                    sb.append(", selenium.getSelectedLabel(\"");
453                                    sb.append(param2);
454                                    sb.append("\"));");
455                            }
456                            else if (param1.equals("assertNotSelectedLabels") ||
457                                             param1.equals("assertSelectedLabels")) {
458    
459                                    if (param1.equals("assertNotSelectedLabels")) {
460                                            sb.append("assertNotEquals");
461                                    }
462                                    else if (param1.equals("assertSelectedLabels")) {
463                                            sb.append("assertEquals");
464                                    }
465    
466                                    sb.append("(\"");
467                                    sb.append(param3);
468                                    sb.append("\", join(selenium.getSelectedLabels(\"");
469                                    sb.append(param2);
470                                    sb.append("\"), \',\'));");
471                            }
472                            else if (param1.equals("assertNotText") ||
473                                             param1.equals("assertText")) {
474    
475                                    if (param1.equals("assertNotText")) {
476                                            sb.append("assertNotEquals");
477                                    }
478                                    else if (param1.equals("assertText")) {
479                                            sb.append("assertEquals");
480                                    }
481    
482                                    sb.append("(RuntimeVariables.replace(\"");
483                                    sb.append(param3);
484                                    sb.append("\"), selenium.getText(\"");
485                                    sb.append(param2);
486                                    sb.append("\"));");
487                            }
488                            else if (param1.equals("assertNotValue") ||
489                                             param1.equals("assertValue")) {
490    
491                                    if (param1.equals("assertNotValue")) {
492                                            sb.append("assertNotEquals");
493                                    }
494                                    else if (param1.equals("assertValue")) {
495                                            sb.append("assertEquals");
496                                    }
497    
498                                    sb.append("(\"");
499                                    sb.append(param3);
500                                    sb.append("\", selenium.getValue(\"");
501                                    sb.append(param2);
502                                    sb.append("\"));");
503                            }
504                            else if (param1.equals("assertNotVisible") ||
505                                             param1.equals("assertVisible")) {
506    
507                                    if (param1.equals("assertNotVisible")) {
508                                            sb.append("assertFalse");
509                                    }
510                                    else if (param1.equals("assertVisible")) {
511                                            sb.append("assertTrue");
512                                    }
513    
514                                    sb.append("(");
515                                    sb.append("selenium.isVisible(\"");
516                                    sb.append(param2);
517                                    sb.append("\"));");
518                            }
519                            else if (param1.equals("assertSelectOptions")) {
520                                    String[] expectedArray = StringUtil.split(param3);
521    
522                                    sb.append("String[] actualArray = ");
523                                    sb.append("selenium.getSelectOptions(\"");
524                                    sb.append(param2);
525                                    sb.append("\");");
526    
527                                    sb.append("assertEquals(");
528                                    sb.append(expectedArray.length);
529                                    sb.append(", actualArray.length);");
530    
531                                    for (int i = 0; i < expectedArray.length; i++) {
532                                            sb.append("assertEquals(\"");
533                                            sb.append(expectedArray[i]);
534                                            sb.append("\", actualArray[");
535                                            sb.append(i);
536                                            sb.append("]);");
537                                    }
538                            }
539                            else if (param1.equals("assertTextNotPresent") ||
540                                             param1.equals("assertTextPresent")) {
541    
542                                    if (param1.equals("assertTextNotPresent")) {
543                                            sb.append("assertFalse");
544                                    }
545                                    else if (param1.equals("assertTextPresent")) {
546                                            sb.append("assertTrue");
547                                    }
548    
549                                    sb.append("(selenium.isTextPresent(\"");
550                                    sb.append(param2);
551                                    sb.append("\"));");
552                            }
553                            else if (param1.equals("captureEntirePageScreenshot")) {
554                                    int pos = param2.lastIndexOf("\\");
555    
556                                    String dirName = param2.substring(0, pos + 1);
557    
558                                    sb.append("FileUtil.mkdirs(RuntimeVariables.replace(\"");
559                                    sb.append(dirName);
560                                    sb.append("\"));");
561                                    sb.append("selenium.captureEntirePageScreenshot(");
562                                    sb.append("RuntimeVariables.replace(\"");
563                                    sb.append(param2);
564                                    sb.append("\"), \"\");");
565                            }
566                            else if (param1.equals("check") || param1.equals("click") ||
567                                             param1.equals("doubleClick") ||
568                                             param1.equals("downloadFile") ||
569                                             param1.equals("mouseDown") || param1.equals("mouseMove") ||
570                                             param1.equals("mouseOver") || param1.equals("mouseUp") ||
571                                             param1.equals("open") || param1.equals("selectFrame") ||
572                                             param1.equals("selectPopUp") ||
573                                             param1.equals("selectWindow") ||
574                                             param1.equals("setTimeout") || param1.equals("uncheck")) {
575    
576                                    sb.append("selenium.");
577                                    sb.append(param1);
578                                    sb.append("(");
579    
580                                    if (param2.startsWith("${")) {
581                                            sb.append("RuntimeVariables.getValue(\"");
582    
583                                            String text = param2.substring(2, param2.length() - 1);
584    
585                                            sb.append(text);
586                                            sb.append("\")");
587                                    }
588                                    else {
589                                            sb.append("\"");
590                                            sb.append(param2);
591                                            sb.append("\"");
592                                    }
593    
594                                    sb.append(");");
595    
596                                    if (param1.equals("open")) {
597                                            sb.append("loadRequiredJavaScriptModules();");
598                                    }
599                            }
600                            else if (param1.equals("clickAndWait")) {
601                                    sb.append("selenium.click(RuntimeVariables.replace(\"");
602                                    sb.append(param2);
603                                    sb.append("\"));");
604                                    sb.append("selenium.waitForPageToLoad(\"30000\");");
605    
606                                    sb.append("loadRequiredJavaScriptModules();");
607                            }
608                            else if (param1.equals("clickAtAndWait") ||
609                                             param1.equals("keyPressAndWait") ||
610                                             param1.equals("selectAndWait")) {
611    
612                                    sb.append("selenium.");
613    
614                                    String text = param1.substring(0, param1.length() - 7);
615    
616                                    sb.append(text);
617                                    sb.append("(\"");
618                                    sb.append(param2);
619                                    sb.append("\", RuntimeVariables.replace(\"");
620                                    sb.append(param3);
621                                    sb.append("\"));");
622                                    sb.append("selenium.waitForPageToLoad(\"30000\");");
623    
624                                    sb.append("loadRequiredJavaScriptModules();");
625                            }
626                            else if (param1.equals("close") || param1.equals("refresh") ||
627                                             param1.equals("setBrowserOption") ||
628                                             param1.equals("windowFocus") ||
629                                             param1.equals("windowMaximize")) {
630    
631                                    sb.append("selenium.");
632                                    sb.append(param1);
633                                    sb.append("();");
634                            }
635                            else if (param1.equals("dragAndDropToObject")) {
636                                    sb.append("selenium.");
637                                    sb.append("dragAndDropToObject(\"");
638                                    sb.append(param2);
639                                    sb.append("\", \"");
640                                    sb.append(param3);
641                                    sb.append("\");");
642                            }
643                            else if (param1.equals("echo")) {
644                                    sb.append("System.out.println(\"");
645                                    sb.append(param2);
646                                    sb.append("\");");
647                            }
648                            else if (param1.equals("gotoIf")) {
649                                    String conditional = StringUtil.replace(
650                                            param2, new String[] {"${", "}"}, new String[] {"", ""});
651    
652                                    sb.append("if (");
653                                    sb.append(conditional);
654                                    sb.append(") {");
655                                    sb.append("label =");
656                                    sb.append(labels.get(param3));
657                                    sb.append(";");
658                                    sb.append("continue;");
659                                    sb.append("}");
660                            }
661                            else if (param1.equals("label")) {
662                                    String label = labels.get(param2);
663    
664                                    sb.append("case ");
665                                    sb.append(label);
666                                    sb.append(":");
667                            }
668                            else if (param1.equals("pause")) {
669                                    sb.append("Thread.sleep(");
670                                    sb.append(param2);
671                                    sb.append(");");
672                            }
673                            else if (param1.equals("refreshAndWait") ||
674                                             param1.equals("windowMaximizeAndWait")) {
675    
676                                    String text = param1.substring(0, param1.length() - 7);
677    
678                                    sb.append("selenium.");
679                                    sb.append(text);
680                                    sb.append("();");
681                                    sb.append("selenium.waitForPageToLoad(\"30000\");");
682    
683                                    sb.append("loadRequiredJavaScriptModules();");
684                            }
685                            else if (param1.equals("store")) {
686                                    sb.append("boolean ");
687                                    sb.append(param3);
688                                    sb.append(" = ");
689    
690                                    if (param2.startsWith("eval(")) {
691                                            String eval = param2.substring(5, param2.length() - 1);
692    
693                                            eval = StringUtil.replace(eval, "'", "\"");
694    
695                                            sb.append(eval);
696                                    }
697    
698                                    sb.append(";");
699                            }
700                            else if (param1.equals("storeAttribute")) {
701                                    sb.append("String ");
702                                    sb.append(param3);
703                                    sb.append(" = selenium.getAttribute(\"");
704                                    sb.append(param2);
705                                    sb.append("\");");
706    
707                                    sb.append("RuntimeVariables.setValue(\"");
708                                    sb.append(param3);
709                                    sb.append("\", ");
710                                    sb.append(param3);
711                                    sb.append(");");
712                            }
713                            else if (param1.equals("storeCurrentDay")) {
714                                    sb.append("String ");
715                                    sb.append(param2);
716                                    sb.append(" = selenium.getCurrentDay();");
717    
718                                    sb.append("RuntimeVariables.setValue(\"");
719                                    sb.append(param2);
720                                    sb.append("\", ");
721                                    sb.append(param2);
722                                    sb.append(");");
723                            }
724                            else if (param1.equals("storeCurrentMonth")) {
725                                    sb.append("String ");
726                                    sb.append(param2);
727                                    sb.append(" = selenium.getCurrentMonth();");
728    
729                                    sb.append("RuntimeVariables.setValue(\"");
730                                    sb.append(param2);
731                                    sb.append("\", ");
732                                    sb.append(param2);
733                                    sb.append(");");
734                            }
735                            else if (param1.equals("storeCurrentYear")) {
736                                    sb.append("String ");
737                                    sb.append(param2);
738                                    sb.append(" = selenium.getCurrentYear();");
739    
740                                    sb.append("RuntimeVariables.setValue(\"");
741                                    sb.append(param2);
742                                    sb.append("\", ");
743                                    sb.append(param2);
744                                    sb.append(");");
745                            }
746                            else if (param1.equals("storeElementPresent")) {
747                                    sb.append("boolean ");
748                                    sb.append(param3);
749                                    sb.append(" = selenium.isElementPresent(\"");
750                                    sb.append(param2);
751                                    sb.append("\");");
752                            }
753                            else if (param1.equals("storeFirstNumber")) {
754                                    sb.append("String ");
755                                    sb.append(param3);
756                                    sb.append(" = selenium.getFirstNumber(\"");
757                                    sb.append(param2);
758                                    sb.append("\");");
759    
760                                    sb.append("RuntimeVariables.setValue(\"");
761                                    sb.append(param3);
762                                    sb.append("\", ");
763                                    sb.append(param3);
764                                    sb.append(");");
765                            }
766                            else if (param1.equals("storeFirstNumberIncrement")) {
767                                    sb.append("String ");
768                                    sb.append(param3);
769                                    sb.append(" = selenium.getFirstNumberIncrement(\"");
770                                    sb.append(param2);
771                                    sb.append("\");");
772    
773                                    sb.append("RuntimeVariables.setValue(\"");
774                                    sb.append(param3);
775                                    sb.append("\", ");
776                                    sb.append(param3);
777                                    sb.append(");");
778                            }
779                            else if (param1.equals("storeLocation")) {
780                                    sb.append("String ");
781                                    sb.append(param2);
782                                    sb.append(" = selenium.getLocation();");
783    
784                                    sb.append("RuntimeVariables.setValue(\"");
785                                    sb.append(param2);
786                                    sb.append("\", ");
787                                    sb.append(param2);
788                                    sb.append(");");
789                            }
790                            else if (param1.equals("storeText")) {
791                                    sb.append("String ");
792                                    sb.append(param3);
793                                    sb.append(" = selenium.getText(\"");
794                                    sb.append(param2);
795                                    sb.append("\");");
796    
797                                    sb.append("RuntimeVariables.setValue(\"");
798                                    sb.append(param3);
799                                    sb.append("\", ");
800                                    sb.append(param3);
801                                    sb.append(");");
802                            }
803                            else if (param1.equals("storeValue")) {
804                                    sb.append("String ");
805                                    sb.append(param3);
806                                    sb.append(" = selenium.getValue(\"");
807                                    sb.append(param2);
808                                    sb.append("\");");
809    
810                                    sb.append("RuntimeVariables.setValue(\"");
811                                    sb.append(param3);
812                                    sb.append("\", ");
813                                    sb.append(param3);
814                                    sb.append(");");
815                            }
816                            else if (param1.equals("storeVisible")) {
817                                    sb.append("boolean ");
818                                    sb.append(param3);
819                                    sb.append(" = selenium.isVisible(\"");
820                                    sb.append(param2);
821                                    sb.append("\");");
822                            }
823                            else if (param1.equals("verifyElementNotPresent") ||
824                                             param1.equals("verifyElementPresent")) {
825    
826                                    if (param1.equals("verifyElementNotPresent")) {
827                                            sb.append("verifyFalse");
828                                    }
829                                    else if (param1.equals("verifyElementPresent")) {
830                                            sb.append("verifyTrue");
831                                    }
832    
833                                    sb.append("(selenium.isElementPresent(\"");
834                                    sb.append(param2);
835                                    sb.append("\"));");
836                            }
837                            else if (param1.equals("verifyTextNotPresent") ||
838                                             param1.equals("verifyTextPresent")) {
839    
840                                    if (param1.equals("verifyTextNotPresent")) {
841                                            sb.append("verifyFalse");
842                                    }
843                                    else if (param1.equals("verifyTextPresent")) {
844                                            sb.append("verifyTrue");
845                                    }
846    
847                                    sb.append("(selenium.isTextPresent(\"");
848                                    sb.append(param2);
849                                    sb.append("\"));");
850                            }
851                            else if (param1.equals("verifyTitle")) {
852                                    sb.append("verifyEquals(\"");
853                                    sb.append(param2);
854                                    sb.append("\", selenium.getTitle());");
855                            }
856                            else if (param1.equals("waitForConfirmation") ||
857                                             param1.equals("waitForElementNotPresent") ||
858                                             param1.equals("waitForElementPresent") ||
859                                             param1.equals("waitForNotPartialText") ||
860                                             param1.equals("waitForNotSelectedLabel") ||
861                                             param1.equals("waitForNotTable") ||
862                                             param1.equals("waitForNotText") ||
863                                             param1.equals("waitForNotValue") ||
864                                             param1.equals("waitForNotVisible") ||
865                                             param1.equals("waitForPartialText") ||
866                                             param1.equals("waitForSelectedLabel") ||
867                                             param1.equals("waitForTable") ||
868                                             param1.equals("waitForText") ||
869                                             param1.equals("waitForTextNotPresent") ||
870                                             param1.equals("waitForTextPresent") ||
871                                             param1.equals("waitForValue") ||
872                                             param1.equals("waitForVisible")) {
873    
874                                    sb.append("for (int second = 0;; second++) {");
875                                    sb.append("if (second >= 90) {");
876                                    sb.append("fail(\"timeout\");");
877                                    sb.append("}");
878    
879                                    sb.append("try {");
880                                    sb.append("if (");
881    
882                                    if (param1.equals("waitForElementNotPresent") ||
883                                            param1.equals("waitForNotPartialText") ||
884                                            param1.equals("waitForNotSelectedLabel") ||
885                                            param1.equals("waitForNotTable") ||
886                                            param1.equals("waitForNotText") ||
887                                            param1.equals("waitForNotValue") ||
888                                            param1.equals("waitForNotVisible") ||
889                                            param1.equals("waitForTextNotPresent")) {
890    
891                                            sb.append("!");
892                                    }
893    
894                                    if (param1.equals("waitForConfirmation")) {
895                                            sb.append("\"");
896                                            sb.append(param2);
897                                            sb.append("\".equals(selenium.getConfirmation())");
898                                    }
899                                    else if (param1.equals("waitForElementNotPresent") ||
900                                                     param1.equals("waitForElementPresent")) {
901    
902                                            sb.append("selenium.isElementPresent");
903                                            sb.append("(\"");
904                                            sb.append(param2);
905                                            sb.append("\")");
906                                    }
907                                    else if (param1.equals("waitForNotPartialText") ||
908                                                     param1.equals("waitForPartialText")) {
909    
910                                            sb.append("selenium.isPartialText(\"");
911                                            sb.append(param2);
912                                            sb.append("\", ");
913    
914                                            if (param3.startsWith("${")) {
915                                                    sb.append("RuntimeVariables.getValue(\"");
916    
917                                                    String text = param3.substring(2, param3.length() - 1);
918    
919                                                    sb.append(text);
920                                                    sb.append("\")");
921                                            }
922                                            else {
923                                                    sb.append("\"");
924                                                    sb.append(param3);
925                                                    sb.append("\"");
926                                            }
927    
928                                            sb.append(")");
929                                    }
930                                    else if (param1.equals("waitForNotSelectedLabel") ||
931                                                     param1.equals("waitForSelectedLabel"))
932                                    {
933    
934                                            if (param3.startsWith("${")) {
935                                                    sb.append("RuntimeVariables.getValue(\"");
936    
937                                                    String text = param3.substring(2, param3.length() - 1);
938    
939                                                    sb.append(text);
940                                                    sb.append("\")");
941                                            }
942                                            else {
943                                                    sb.append("\"");
944                                                    sb.append(param3);
945                                                    sb.append("\"");
946                                            }
947    
948                                            sb.append(".equals(selenium.getSelectedLabel(\"");
949                                            sb.append(param2);
950                                            sb.append("\"))");
951                                    }
952                                    else if (param1.equals("waitForNotTable") ||
953                                                     param1.equals("waitForTable")) {
954    
955                                            sb.append("StringPool.BLANK.equals(selenium.getTable(\"");
956                                            sb.append(param2);
957                                            sb.append("\"))");
958                                    }
959                                    else if (param1.equals("waitForNotText") ||
960                                                     param1.equals("waitForText")) {
961    
962                                            sb.append("RuntimeVariables.replace(\"");
963                                            sb.append(param3);
964                                            sb.append("\").equals(selenium.getText(\"");
965                                            sb.append(param2);
966                                            sb.append("\"))");
967                                    }
968                                    else if (param1.equals("waitForNotValue") ||
969                                                     param1.equals("waitForValue")) {
970    
971                                            sb.append("RuntimeVariables.replace(\"");
972                                            sb.append(param3);
973                                            sb.append("\").equals(selenium.getValue(\"");
974                                            sb.append(param2);
975                                            sb.append("\"))");
976                                    }
977                                    else if (param1.equals("waitForNotVisible") ||
978                                                     param1.equals("waitForVisible")) {
979    
980                                            sb.append("selenium.isVisible");
981                                            sb.append("(\"");
982                                            sb.append(param2);
983                                            sb.append("\")");
984                                    }
985                                    else if (param1.equals("waitForTextNotPresent") ||
986                                                     param1.equals("waitForTextPresent")) {
987    
988                                            sb.append("selenium.isTextPresent");
989                                            sb.append("(\"");
990                                            sb.append(param2);
991                                            sb.append("\")");
992                                    }
993    
994                                    sb.append(") {");
995                                    sb.append("break;");
996                                    sb.append("}");
997                                    sb.append("}");
998                                    sb.append("catch (Exception e) {");
999                                    sb.append("}");
1000    
1001                                    sb.append("Thread.sleep(1000);");
1002                                    sb.append("}");
1003                            }
1004                            else {
1005                                    System.out.println(
1006                                            testFileName + " has an unknown command " + param1);
1007                            }
1008                    }
1009    
1010                    if (labels.size() > 0) {
1011                            sb.append("case 100:");
1012                            sb.append("label = -1;");
1013                            sb.append("}");
1014                            sb.append("}");
1015                    }
1016    
1017                    sb.append("}");
1018                    sb.append("}");
1019    
1020                    String content = sb.toString();
1021    
1022                    ServiceBuilder.writeFile(new File(testFileName), content);
1023            }
1024    
1025            private static final String[] _FIX_PARAM_OLD_SUBS = new String[] {
1026                    "\\\\n", "<br />"
1027            };
1028    
1029            private static final String[] _FIX_PARAM_NEW_SUBS = new String[] {
1030                    "\\n", "\\n"
1031            };
1032    
1033    }