1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.tools;
16  
17  import com.liferay.portal.kernel.util.CharPool;
18  import com.liferay.portal.kernel.util.FileUtil;
19  import com.liferay.portal.kernel.util.SetUtil;
20  import com.liferay.portal.kernel.util.StringBundler;
21  import com.liferay.portal.kernel.util.StringPool;
22  import com.liferay.portal.kernel.util.StringUtil;
23  import com.liferay.portal.kernel.util.UnicodeFormatter;
24  import com.liferay.portal.tools.servicebuilder.ServiceBuilder;
25  import com.liferay.portal.util.InitUtil;
26  
27  import java.io.File;
28  
29  import java.util.HashMap;
30  import java.util.Map;
31  import java.util.Set;
32  
33  import org.apache.tools.ant.DirectoryScanner;
34  
35  /**
36   * <a href="SeleneseToJavaBuilder.java.html"><b><i>View Source</i></b></a>
37   *
38   * @author Brian Wing Shun Chan
39   */
40  public class SeleneseToJavaBuilder {
41  
42      public static void main(String[] args) throws Exception {
43          InitUtil.initWithSpring();
44  
45          if (args.length == 1) {
46              new SeleneseToJavaBuilder(args[0]);
47          }
48          else {
49              throw new IllegalArgumentException();
50          }
51      }
52  
53      public SeleneseToJavaBuilder(String basedir) throws Exception {
54          DirectoryScanner ds = new DirectoryScanner();
55  
56          ds.setBasedir(basedir);
57          ds.setExcludes(
58              new String[] {
59                  "**\\IterateThemeTest.java", "**\\StopSeleniumTest.java"
60              });
61          ds.setIncludes(new String[] {"**\\*Test.html", "**\\*Test.java"});
62          /*ds.setIncludes(
63              new String[] {
64                  "**\\liferay\\portalweb\\portal\\login\\*Test.html",
65                  "**\\liferay\\portalweb\\portal\\login\\*Test.java"
66              });*/
67  
68          ds.scan();
69  
70          Set<String> fileNames = SetUtil.fromArray(ds.getIncludedFiles());
71  
72          for (String fileName : fileNames) {
73  
74              // I would have preferred to use XlateHtmlSeleneseToJava, but it
75              // is horribly out of sync with Selenium IDE and generates incorrect
76              // code.
77  
78              /*String input = StringUtil.replace(
79                  basedir + "/" + fileName, "\\", "/");
80  
81              XlateHtmlSeleneseToJava.main(
82                  new String[] {
83                      "test", "-silent", input
84                  }
85              );*/
86  
87              if (fileName.endsWith("Test.html")) {
88                  translate(basedir, fileName);
89              }
90              else if (fileName.endsWith("Test.java")) {
91                  if (!fileNames.contains(
92                          fileName.substring(0, fileName.length() - 5) +
93                              ".html")) {
94  
95                      System.out.println("unused: " + fileName);
96                  }
97              }
98          }
99      }
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("keyPress") || param1.equals("openWindow") ||
292                 param1.equals("select") || param1.equals("type") ||
293                 param1.equals("typeKeys") || 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("(\"");
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("mouseDown") || param1.equals("mouseOver") ||
567                      param1.equals("mouseUp") || param1.equals("open") ||
568                      param1.equals("selectFrame") ||
569                      param1.equals("selectPopUp") ||
570                      param1.equals("selectWindow") ||
571                      param1.equals("setTimeout") || param1.equals("uncheck")) {
572 
573                 sb.append("selenium.");
574                 sb.append(param1);
575                 sb.append("(\"");
576                 sb.append(param2);
577                 sb.append("\");");
578             }
579             else if (param1.equals("clickAndWait")) {
580                 sb.append("selenium.click(RuntimeVariables.replace(\"");
581                 sb.append(param2);
582                 sb.append("\"));");
583                 sb.append("selenium.waitForPageToLoad(\"30000\");");
584             }
585             else if (param1.equals("clickAtAndWait") ||
586                      param1.equals("keyPressAndWait") ||
587                      param1.equals("selectAndWait")) {
588 
589                 sb.append("selenium.");
590 
591                 String text = param1.substring(0, param1.length() - 7);
592 
593                 sb.append(text);
594                 sb.append("(\"");
595                 sb.append(param2);
596                 sb.append("\", RuntimeVariables.replace(\"");
597                 sb.append(param3);
598                 sb.append("\"));");
599                 sb.append("selenium.waitForPageToLoad(\"30000\");");
600             }
601             else if (param1.equals("close") || param1.equals("refresh") ||
602                      param1.equals("windowFocus") ||
603                      param1.equals("windowMaximize")) {
604 
605                 sb.append("selenium.");
606                 sb.append(param1);
607                 sb.append("();");
608             }
609             else if (param1.equals("dragAndDropToObject")) {
610                 sb.append("selenium.");
611                 sb.append("dragAndDropToObject(\"");
612                 sb.append(param2);
613                 sb.append("\", \"");
614                 sb.append(param3);
615                 sb.append("\");");
616             }
617             else if (param1.equals("echo")) {
618                 sb.append("System.out.println(\"");
619                 sb.append(param2);
620                 sb.append("\");");
621             }
622             else if (param1.equals("gotoIf")) {
623                 String conditional = StringUtil.replace(
624                     param2, new String[] {"${", "}"}, new String[] {"", ""});
625 
626                 sb.append("if (");
627                 sb.append(conditional);
628                 sb.append(") {");
629                 sb.append("label =");
630                 sb.append(labels.get(param3));
631                 sb.append(";");
632                 sb.append("continue;");
633                 sb.append("}");
634             }
635             else if (param1.equals("label")) {
636                 String label = labels.get(param2);
637 
638                 sb.append("case ");
639                 sb.append(label);
640                 sb.append(":");
641             }
642             else if (param1.equals("pause")) {
643                 sb.append("Thread.sleep(");
644                 sb.append(param2);
645                 sb.append(");");
646             }
647             else if (param1.equals("refreshAndWait") ||
648                      param1.equals("windowMaximizeAndWait")) {
649 
650                 String text = param1.substring(0, param1.length() - 7);
651 
652                 sb.append("selenium.");
653                 sb.append(text);
654                 sb.append("();");
655                 sb.append("selenium.waitForPageToLoad(\"30000\");");
656             }
657             else if (param1.equals("store")) {
658                 sb.append("boolean ");
659                 sb.append(param3);
660                 sb.append(" = ");
661 
662                 if (param2.startsWith("eval(")) {
663                     String eval = param2.substring(5, param2.length() - 1);
664 
665                     eval = StringUtil.replace(eval, "'", "\"");
666 
667                     sb.append(eval);
668                 }
669 
670                 sb.append(";");
671             }
672             else if (param1.equals("storeCurrentDay")) {
673                 sb.append("String ");
674                 sb.append(param2);
675                 sb.append(" = selenium.getCurrentDay();");
676 
677                 sb.append("RuntimeVariables.setValue(\"");
678                 sb.append(param2);
679                 sb.append("\", ");
680                 sb.append(param2);
681                 sb.append(");");
682             }
683             else if (param1.equals("storeCurrentMonth")) {
684                 sb.append("String ");
685                 sb.append(param2);
686                 sb.append(" = selenium.getCurrentMonth();");
687 
688                 sb.append("RuntimeVariables.setValue(\"");
689                 sb.append(param2);
690                 sb.append("\", ");
691                 sb.append(param2);
692                 sb.append(");");
693             }
694             else if (param1.equals("storeCurrentYear")) {
695                 sb.append("String ");
696                 sb.append(param2);
697                 sb.append(" = selenium.getCurrentYear();");
698 
699                 sb.append("RuntimeVariables.setValue(\"");
700                 sb.append(param2);
701                 sb.append("\", ");
702                 sb.append(param2);
703                 sb.append(");");
704             }
705             else if (param1.equals("storeFirstNumber")) {
706                 sb.append("String ");
707                 sb.append(param3);
708                 sb.append(" = selenium.getFirstNumber(\"");
709                 sb.append(param2);
710                 sb.append("\");");
711 
712                 sb.append("RuntimeVariables.setValue(\"");
713                 sb.append(param3);
714                 sb.append("\", ");
715                 sb.append(param3);
716                 sb.append(");");
717             }
718             else if (param1.equals("storeFirstNumberIncrement")) {
719                 sb.append("String ");
720                 sb.append(param3);
721                 sb.append(" = selenium.getFirstNumberIncrement(\"");
722                 sb.append(param2);
723                 sb.append("\");");
724 
725                 sb.append("RuntimeVariables.setValue(\"");
726                 sb.append(param3);
727                 sb.append("\", ");
728                 sb.append(param3);
729                 sb.append(");");
730             }
731             else if (param1.equals("storeLocation")) {
732                 sb.append("String ");
733                 sb.append(param2);
734                 sb.append(" = selenium.getLocation();");
735 
736                 sb.append("RuntimeVariables.setValue(\"");
737                 sb.append(param2);
738                 sb.append("\", ");
739                 sb.append(param2);
740                 sb.append(");");
741             }
742             else if (param1.equals("storeText")) {
743                 sb.append("String ");
744                 sb.append(param3);
745                 sb.append(" = selenium.getText(\"");
746                 sb.append(param2);
747                 sb.append("\");");
748 
749                 sb.append("RuntimeVariables.setValue(\"");
750                 sb.append(param3);
751                 sb.append("\", ");
752                 sb.append(param3);
753                 sb.append(");");
754             }
755             else if (param1.equals("verifyElementNotPresent") ||
756                      param1.equals("verifyElementPresent")) {
757 
758                 if (param1.equals("verifyElementNotPresent")) {
759                     sb.append("verifyFalse");
760                 }
761                 else if (param1.equals("verifyElementPresent")) {
762                     sb.append("verifyTrue");
763                 }
764 
765                 sb.append("(selenium.isElementPresent(\"");
766                 sb.append(param2);
767                 sb.append("\"));");
768             }
769             else if (param1.equals("verifyTextNotPresent") ||
770                      param1.equals("verifyTextPresent")) {
771 
772                 if (param1.equals("verifyTextNotPresent")) {
773                     sb.append("verifyFalse");
774                 }
775                 else if (param1.equals("verifyTextPresent")) {
776                     sb.append("verifyTrue");
777                 }
778 
779                 sb.append("(selenium.isTextPresent(\"");
780                 sb.append(param2);
781                 sb.append("\"));");
782             }
783             else if (param1.equals("verifyTitle")) {
784                 sb.append("verifyEquals(\"");
785                 sb.append(param2);
786                 sb.append("\", selenium.getTitle());");
787             }
788             else if (param1.equals("waitForElementNotPresent") ||
789                      param1.equals("waitForElementPresent") ||
790                      param1.equals("waitForNotPartialText") ||
791                      param1.equals("waitForNotSelectedLabel") ||
792                      param1.equals("waitForNotTable") ||
793                      param1.equals("waitForNotText") ||
794                      param1.equals("waitForNotValue") ||
795                      param1.equals("waitForNotVisible") ||
796                      param1.equals("waitForPartialText") ||
797                      param1.equals("waitForSelectedLabel") ||
798                      param1.equals("waitForTable") ||
799                      param1.equals("waitForText") ||
800                      param1.equals("waitForTextNotPresent") ||
801                      param1.equals("waitForTextPresent") ||
802                      param1.equals("waitForValue") ||
803                      param1.equals("waitForVisible")) {
804 
805                 sb.append("for (int second = 0;; second++) {");
806                 sb.append("if (second >= 60) {");
807                 sb.append("fail(\"timeout\");");
808                 sb.append("}");
809 
810                 sb.append("try {");
811                 sb.append("if (");
812 
813                 if (param1.equals("waitForElementNotPresent") ||
814                     param1.equals("waitForNotPartialText") ||
815                     param1.equals("waitForNotSelectedLabel") ||
816                     param1.equals("waitForNotTable") ||
817                     param1.equals("waitForNotText") ||
818                     param1.equals("waitForNotValue") ||
819                     param1.equals("waitForNotVisible") ||
820                     param1.equals("waitForTextNotPresent")) {
821 
822                     sb.append("!");
823                 }
824 
825                 if (param1.equals("waitForElementNotPresent") ||
826                     param1.equals("waitForElementPresent")) {
827 
828                     sb.append("selenium.isElementPresent");
829                     sb.append("(\"");
830                     sb.append(param2);
831                     sb.append("\")");
832                 }
833                 else if (param1.equals("waitForNotPartialText") ||
834                          param1.equals("waitForPartialText")) {
835 
836                     sb.append("selenium.isPartialText(\"");
837                     sb.append(param2);
838                     sb.append("\", ");
839 
840                     if (param3.startsWith("${")) {
841                         sb.append("RuntimeVariables.getValue(\"");
842 
843                         String text = param3.substring(2, param3.length() - 1);
844 
845                         sb.append(text);
846                         sb.append("\")");
847                     }
848                     else {
849                         sb.append("\"");
850                         sb.append(param3);
851                         sb.append("\"");
852                     }
853 
854                     sb.append(")");
855                 }
856                 else if (param1.equals("waitForNotSelectedLabel") ||
857                          param1.equals("waitForSelectedLabel"))
858                 {
859 
860                     if (param3.startsWith("${")) {
861                         sb.append("RuntimeVariables.getValue(\"");
862 
863                         String text = param3.substring(2, param3.length() - 1);
864 
865                         sb.append(text);
866                         sb.append("\")");
867                     }
868                     else {
869                         sb.append("\"");
870                         sb.append(param3);
871                         sb.append("\"");
872                     }
873 
874                     sb.append(".equals(selenium.getSelectedLabel(\"");
875                     sb.append(param2);
876                     sb.append("\"))");
877                 }
878                 else if (param1.equals("waitForNotTable") ||
879                          param1.equals("waitForTable")) {
880 
881                     sb.append("StringPool.BLANK.equals(selenium.getTable(\"");
882                     sb.append(param2);
883                     sb.append("\"))");
884                 }
885                 else if (param1.equals("waitForNotText") ||
886                          param1.equals("waitForText")) {
887 
888                     sb.append("RuntimeVariables.replace(\"");
889                     sb.append(param3);
890                     sb.append("\").equals(selenium.getText(\"");
891                     sb.append(param2);
892                     sb.append("\"))");
893                 }
894                 else if (param1.equals("waitForNotValue") ||
895                          param1.equals("waitForValue")) {
896 
897                     sb.append("RuntimeVariables.replace(\"");
898                     sb.append(param3);
899                     sb.append("\").equals(selenium.getValue(\"");
900                     sb.append(param2);
901                     sb.append("\"))");
902                 }
903                 else if (param1.equals("waitForNotVisible") ||
904                          param1.equals("waitForVisible")) {
905 
906                     sb.append("selenium.isVisible");
907                     sb.append("(\"");
908                     sb.append(param2);
909                     sb.append("\")");
910                 }
911                 else if (param1.equals("waitForTextNotPresent") ||
912                          param1.equals("waitForTextPresent")) {
913 
914                     sb.append("selenium.isTextPresent");
915                     sb.append("(\"");
916                     sb.append(param2);
917                     sb.append("\")");
918                 }
919 
920                 sb.append(") {");
921                 sb.append("break;");
922                 sb.append("}");
923                 sb.append("}");
924                 sb.append("catch (Exception e) {");
925                 sb.append("}");
926 
927                 sb.append("Thread.sleep(1000);");
928                 sb.append("}");
929             }
930             else {
931                 System.out.println(param1 + " was not translated");
932             }
933 
934             Boolean takeScreenShot = takeScreenShots.get(x);
935 
936             if (takeScreenShot == null) {
937                 takeScreenShot = Boolean.TRUE;
938             }
939 
940             if (takeScreenShot) {
941                 if (param1.equals("assertChecked") ||
942                     param1.equals("assertConfirmation") ||
943                     param1.equals("assertNotChecked") ||
944                     param1.equals("clickAndWait") ||
945                     param1.equals("clickAtAndWait") ||
946                     param1.equals("keyPressAndWait") ||
947                     param1.equals("selectAndWait") ||
948                     param1.equals("selectWindow") ||
949                     param1.equals("waitForElementNotPresent") ||
950                     param1.equals("waitForNotPartialText") ||
951                     param1.equals("waitForNotSelectedLabel") ||
952                     param1.equals("waitForNotTable") ||
953                     param1.equals("waitForNotText") ||
954                     param1.equals("waitForNotValue") ||
955                     param1.equals("waitForNotVisible") ||
956                     param1.equals("waitForPartialText") ||
957                     param1.equals("waitForSelectedLabel") ||
958                     param1.equals("waitForTable") ||
959                     param1.equals("waitForText") ||
960                     param1.equals("waitForTextNotPresent") ||
961                     param1.equals("waitForTextPresent") ||
962                     param1.equals("waitForValue") ||
963                     param1.equals("waitForVisible")) {
964 
965                     sb.append("selenium.saveScreenShotAndSource();");
966                 }
967                 else if (param1.equals("selectFrame") &&
968                          param2.equals("relative=top")) {
969 
970                     sb.append("selenium.saveScreenShotAndSource();");
971                 }
972                 else if (param1.equals("type") && !param2.equals("//body")) {
973                     sb.append("selenium.saveScreenShotAndSource();");
974                 }
975                 else if (
976                     param1.equals("typeKeys") && !param2.equals("//body")) {
977 
978                     sb.append("selenium.saveScreenShotAndSource();");
979                 }
980                 else if (param1.equals("waitForElementPresent") &&
981                         !param2.equals("_15_editor") &&
982                         !param2.equals(
983                             "_15_structure_el_TextAreaField_content") &&
984                         !param2.equals("_33_editor") &&
985                         !param2.equals("cke_contents_CKEditor1") &&
986                         !param2.equals("FCKeditor1___Frame")) {
987 
988                     sb.append("selenium.saveScreenShotAndSource();");
989                 }
990             }
991         }
992 
993         if (labels.size() > 0) {
994             sb.append("case 100:");
995             sb.append("label = -1;");
996             sb.append("}");
997             sb.append("}");
998         }
999 
1000        sb.append("}");
1001        sb.append("}");
1002
1003        String content = sb.toString();
1004
1005        ServiceBuilder.writeFile(new File(testFileName), content);
1006    }
1007
1008    private static final String[] _FIX_PARAM_OLD_SUBS = new String[] {
1009        "\\\\n", "<br />"
1010    };
1011
1012    private static final String[] _FIX_PARAM_NEW_SUBS = new String[] {
1013        "\\n", "\\n"
1014    };
1015
1016}