001    /**
002     * Copyright (c) 2000-2011 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                            else if (param1.equals("clickAndWait")) {
597                                    sb.append("selenium.click(RuntimeVariables.replace(\"");
598                                    sb.append(param2);
599                                    sb.append("\"));");
600                                    sb.append("selenium.waitForPageToLoad(\"30000\");");
601                            }
602                            else if (param1.equals("clickAtAndWait") ||
603                                             param1.equals("keyPressAndWait") ||
604                                             param1.equals("selectAndWait")) {
605    
606                                    sb.append("selenium.");
607    
608                                    String text = param1.substring(0, param1.length() - 7);
609    
610                                    sb.append(text);
611                                    sb.append("(\"");
612                                    sb.append(param2);
613                                    sb.append("\", RuntimeVariables.replace(\"");
614                                    sb.append(param3);
615                                    sb.append("\"));");
616                                    sb.append("selenium.waitForPageToLoad(\"30000\");");
617                            }
618                            else if (param1.equals("close") || param1.equals("refresh") ||
619                                             param1.equals("setBrowserOption") ||
620                                             param1.equals("windowFocus") ||
621                                             param1.equals("windowMaximize")) {
622    
623                                    sb.append("selenium.");
624                                    sb.append(param1);
625                                    sb.append("();");
626                            }
627                            else if (param1.equals("dragAndDropToObject")) {
628                                    sb.append("selenium.");
629                                    sb.append("dragAndDropToObject(\"");
630                                    sb.append(param2);
631                                    sb.append("\", \"");
632                                    sb.append(param3);
633                                    sb.append("\");");
634                            }
635                            else if (param1.equals("echo")) {
636                                    sb.append("System.out.println(\"");
637                                    sb.append(param2);
638                                    sb.append("\");");
639                            }
640                            else if (param1.equals("gotoIf")) {
641                                    String conditional = StringUtil.replace(
642                                            param2, new String[] {"${", "}"}, new String[] {"", ""});
643    
644                                    sb.append("if (");
645                                    sb.append(conditional);
646                                    sb.append(") {");
647                                    sb.append("label =");
648                                    sb.append(labels.get(param3));
649                                    sb.append(";");
650                                    sb.append("continue;");
651                                    sb.append("}");
652                            }
653                            else if (param1.equals("label")) {
654                                    String label = labels.get(param2);
655    
656                                    sb.append("case ");
657                                    sb.append(label);
658                                    sb.append(":");
659                            }
660                            else if (param1.equals("pause")) {
661                                    sb.append("Thread.sleep(");
662                                    sb.append(param2);
663                                    sb.append(");");
664                            }
665                            else if (param1.equals("refreshAndWait") ||
666                                             param1.equals("windowMaximizeAndWait")) {
667    
668                                    String text = param1.substring(0, param1.length() - 7);
669    
670                                    sb.append("selenium.");
671                                    sb.append(text);
672                                    sb.append("();");
673                                    sb.append("selenium.waitForPageToLoad(\"30000\");");
674                            }
675                            else if (param1.equals("store")) {
676                                    sb.append("boolean ");
677                                    sb.append(param3);
678                                    sb.append(" = ");
679    
680                                    if (param2.startsWith("eval(")) {
681                                            String eval = param2.substring(5, param2.length() - 1);
682    
683                                            eval = StringUtil.replace(eval, "'", "\"");
684    
685                                            sb.append(eval);
686                                    }
687    
688                                    sb.append(";");
689                            }
690                            else if (param1.equals("storeAttribute")) {
691                                    sb.append("String ");
692                                    sb.append(param3);
693                                    sb.append(" = selenium.getAttribute(\"");
694                                    sb.append(param2);
695                                    sb.append("\");");
696    
697                                    sb.append("RuntimeVariables.setValue(\"");
698                                    sb.append(param3);
699                                    sb.append("\", ");
700                                    sb.append(param3);
701                                    sb.append(");");
702                            }
703                            else if (param1.equals("storeCurrentDay")) {
704                                    sb.append("String ");
705                                    sb.append(param2);
706                                    sb.append(" = selenium.getCurrentDay();");
707    
708                                    sb.append("RuntimeVariables.setValue(\"");
709                                    sb.append(param2);
710                                    sb.append("\", ");
711                                    sb.append(param2);
712                                    sb.append(");");
713                            }
714                            else if (param1.equals("storeCurrentMonth")) {
715                                    sb.append("String ");
716                                    sb.append(param2);
717                                    sb.append(" = selenium.getCurrentMonth();");
718    
719                                    sb.append("RuntimeVariables.setValue(\"");
720                                    sb.append(param2);
721                                    sb.append("\", ");
722                                    sb.append(param2);
723                                    sb.append(");");
724                            }
725                            else if (param1.equals("storeCurrentYear")) {
726                                    sb.append("String ");
727                                    sb.append(param2);
728                                    sb.append(" = selenium.getCurrentYear();");
729    
730                                    sb.append("RuntimeVariables.setValue(\"");
731                                    sb.append(param2);
732                                    sb.append("\", ");
733                                    sb.append(param2);
734                                    sb.append(");");
735                            }
736                            else if (param1.equals("storeElementPresent")) {
737                                    sb.append("boolean ");
738                                    sb.append(param3);
739                                    sb.append(" = selenium.isElementPresent(\"");
740                                    sb.append(param2);
741                                    sb.append("\");");
742                            }
743                            else if (param1.equals("storeFirstNumber")) {
744                                    sb.append("String ");
745                                    sb.append(param3);
746                                    sb.append(" = selenium.getFirstNumber(\"");
747                                    sb.append(param2);
748                                    sb.append("\");");
749    
750                                    sb.append("RuntimeVariables.setValue(\"");
751                                    sb.append(param3);
752                                    sb.append("\", ");
753                                    sb.append(param3);
754                                    sb.append(");");
755                            }
756                            else if (param1.equals("storeFirstNumberIncrement")) {
757                                    sb.append("String ");
758                                    sb.append(param3);
759                                    sb.append(" = selenium.getFirstNumberIncrement(\"");
760                                    sb.append(param2);
761                                    sb.append("\");");
762    
763                                    sb.append("RuntimeVariables.setValue(\"");
764                                    sb.append(param3);
765                                    sb.append("\", ");
766                                    sb.append(param3);
767                                    sb.append(");");
768                            }
769                            else if (param1.equals("storeLocation")) {
770                                    sb.append("String ");
771                                    sb.append(param2);
772                                    sb.append(" = selenium.getLocation();");
773    
774                                    sb.append("RuntimeVariables.setValue(\"");
775                                    sb.append(param2);
776                                    sb.append("\", ");
777                                    sb.append(param2);
778                                    sb.append(");");
779                            }
780                            else if (param1.equals("storeText")) {
781                                    sb.append("String ");
782                                    sb.append(param3);
783                                    sb.append(" = selenium.getText(\"");
784                                    sb.append(param2);
785                                    sb.append("\");");
786    
787                                    sb.append("RuntimeVariables.setValue(\"");
788                                    sb.append(param3);
789                                    sb.append("\", ");
790                                    sb.append(param3);
791                                    sb.append(");");
792                            }
793                            else if (param1.equals("storeValue")) {
794                                    sb.append("String ");
795                                    sb.append(param3);
796                                    sb.append(" = selenium.getValue(\"");
797                                    sb.append(param2);
798                                    sb.append("\");");
799    
800                                    sb.append("RuntimeVariables.setValue(\"");
801                                    sb.append(param3);
802                                    sb.append("\", ");
803                                    sb.append(param3);
804                                    sb.append(");");
805                            }
806                            else if (param1.equals("storeVisible")) {
807                                    sb.append("boolean ");
808                                    sb.append(param3);
809                                    sb.append(" = selenium.isVisible(\"");
810                                    sb.append(param2);
811                                    sb.append("\");");
812                            }
813                            else if (param1.equals("verifyElementNotPresent") ||
814                                             param1.equals("verifyElementPresent")) {
815    
816                                    if (param1.equals("verifyElementNotPresent")) {
817                                            sb.append("verifyFalse");
818                                    }
819                                    else if (param1.equals("verifyElementPresent")) {
820                                            sb.append("verifyTrue");
821                                    }
822    
823                                    sb.append("(selenium.isElementPresent(\"");
824                                    sb.append(param2);
825                                    sb.append("\"));");
826                            }
827                            else if (param1.equals("verifyTextNotPresent") ||
828                                             param1.equals("verifyTextPresent")) {
829    
830                                    if (param1.equals("verifyTextNotPresent")) {
831                                            sb.append("verifyFalse");
832                                    }
833                                    else if (param1.equals("verifyTextPresent")) {
834                                            sb.append("verifyTrue");
835                                    }
836    
837                                    sb.append("(selenium.isTextPresent(\"");
838                                    sb.append(param2);
839                                    sb.append("\"));");
840                            }
841                            else if (param1.equals("verifyTitle")) {
842                                    sb.append("verifyEquals(\"");
843                                    sb.append(param2);
844                                    sb.append("\", selenium.getTitle());");
845                            }
846                            else if (param1.equals("waitForConfirmation") ||
847                                             param1.equals("waitForElementNotPresent") ||
848                                             param1.equals("waitForElementPresent") ||
849                                             param1.equals("waitForNotPartialText") ||
850                                             param1.equals("waitForNotSelectedLabel") ||
851                                             param1.equals("waitForNotTable") ||
852                                             param1.equals("waitForNotText") ||
853                                             param1.equals("waitForNotValue") ||
854                                             param1.equals("waitForNotVisible") ||
855                                             param1.equals("waitForPartialText") ||
856                                             param1.equals("waitForSelectedLabel") ||
857                                             param1.equals("waitForTable") ||
858                                             param1.equals("waitForText") ||
859                                             param1.equals("waitForTextNotPresent") ||
860                                             param1.equals("waitForTextPresent") ||
861                                             param1.equals("waitForValue") ||
862                                             param1.equals("waitForVisible")) {
863    
864                                    sb.append("for (int second = 0;; second++) {");
865                                    sb.append("if (second >= 90) {");
866                                    sb.append("fail(\"timeout\");");
867                                    sb.append("}");
868    
869                                    sb.append("try {");
870                                    sb.append("if (");
871    
872                                    if (param1.equals("waitForElementNotPresent") ||
873                                            param1.equals("waitForNotPartialText") ||
874                                            param1.equals("waitForNotSelectedLabel") ||
875                                            param1.equals("waitForNotTable") ||
876                                            param1.equals("waitForNotText") ||
877                                            param1.equals("waitForNotValue") ||
878                                            param1.equals("waitForNotVisible") ||
879                                            param1.equals("waitForTextNotPresent")) {
880    
881                                            sb.append("!");
882                                    }
883    
884                                    if (param1.equals("waitForConfirmation")) {
885                                            sb.append("\"");
886                                            sb.append(param2);
887                                            sb.append("\".equals(selenium.getConfirmation())");
888                                    }
889                                    else if (param1.equals("waitForElementNotPresent") ||
890                                            param1.equals("waitForElementPresent")) {
891    
892                                            sb.append("selenium.isElementPresent");
893                                            sb.append("(\"");
894                                            sb.append(param2);
895                                            sb.append("\")");
896                                    }
897                                    else if (param1.equals("waitForNotPartialText") ||
898                                                     param1.equals("waitForPartialText")) {
899    
900                                            sb.append("selenium.isPartialText(\"");
901                                            sb.append(param2);
902                                            sb.append("\", ");
903    
904                                            if (param3.startsWith("${")) {
905                                                    sb.append("RuntimeVariables.getValue(\"");
906    
907                                                    String text = param3.substring(2, param3.length() - 1);
908    
909                                                    sb.append(text);
910                                                    sb.append("\")");
911                                            }
912                                            else {
913                                                    sb.append("\"");
914                                                    sb.append(param3);
915                                                    sb.append("\"");
916                                            }
917    
918                                            sb.append(")");
919                                    }
920                                    else if (param1.equals("waitForNotSelectedLabel") ||
921                                                     param1.equals("waitForSelectedLabel"))
922                                    {
923    
924                                            if (param3.startsWith("${")) {
925                                                    sb.append("RuntimeVariables.getValue(\"");
926    
927                                                    String text = param3.substring(2, param3.length() - 1);
928    
929                                                    sb.append(text);
930                                                    sb.append("\")");
931                                            }
932                                            else {
933                                                    sb.append("\"");
934                                                    sb.append(param3);
935                                                    sb.append("\"");
936                                            }
937    
938                                            sb.append(".equals(selenium.getSelectedLabel(\"");
939                                            sb.append(param2);
940                                            sb.append("\"))");
941                                    }
942                                    else if (param1.equals("waitForNotTable") ||
943                                                     param1.equals("waitForTable")) {
944    
945                                            sb.append("StringPool.BLANK.equals(selenium.getTable(\"");
946                                            sb.append(param2);
947                                            sb.append("\"))");
948                                    }
949                                    else if (param1.equals("waitForNotText") ||
950                                                     param1.equals("waitForText")) {
951    
952                                            sb.append("RuntimeVariables.replace(\"");
953                                            sb.append(param3);
954                                            sb.append("\").equals(selenium.getText(\"");
955                                            sb.append(param2);
956                                            sb.append("\"))");
957                                    }
958                                    else if (param1.equals("waitForNotValue") ||
959                                                     param1.equals("waitForValue")) {
960    
961                                            sb.append("RuntimeVariables.replace(\"");
962                                            sb.append(param3);
963                                            sb.append("\").equals(selenium.getValue(\"");
964                                            sb.append(param2);
965                                            sb.append("\"))");
966                                    }
967                                    else if (param1.equals("waitForNotVisible") ||
968                                                     param1.equals("waitForVisible")) {
969    
970                                            sb.append("selenium.isVisible");
971                                            sb.append("(\"");
972                                            sb.append(param2);
973                                            sb.append("\")");
974                                    }
975                                    else if (param1.equals("waitForTextNotPresent") ||
976                                                     param1.equals("waitForTextPresent")) {
977    
978                                            sb.append("selenium.isTextPresent");
979                                            sb.append("(\"");
980                                            sb.append(param2);
981                                            sb.append("\")");
982                                    }
983    
984                                    sb.append(") {");
985                                    sb.append("break;");
986                                    sb.append("}");
987                                    sb.append("}");
988                                    sb.append("catch (Exception e) {");
989                                    sb.append("}");
990    
991                                    sb.append("Thread.sleep(1000);");
992                                    sb.append("}");
993                            }
994                            else {
995                                    System.out.println(
996                                            testFileName + " has an unknown command " + param1);
997                            }
998                    }
999    
1000                    if (labels.size() > 0) {
1001                            sb.append("case 100:");
1002                            sb.append("label = -1;");
1003                            sb.append("}");
1004                            sb.append("}");
1005                    }
1006    
1007                    sb.append("}");
1008                    sb.append("}");
1009    
1010                    String content = sb.toString();
1011    
1012                    ServiceBuilder.writeFile(new File(testFileName), content);
1013            }
1014    
1015            private static final String[] _FIX_PARAM_OLD_SUBS = new String[] {
1016                    "\\\\n", "<br />"
1017            };
1018    
1019            private static final String[] _FIX_PARAM_NEW_SUBS = new String[] {
1020                    "\\n", "\\n"
1021            };
1022    
1023    }