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