public void testBlockComment() throws Throwable {

    // Test open page

    openPage();

    setEditor(bot.editorByTitle(TEST_PAGE).toTextEditor());
    setEditorText(getEditor().getText());
    // Test add block comment from Source menu
    SWTBotExt botExt = new SWTBotExt();
    final String commentValue = "<h:commandButton action=\"hello\" value=\"Say Hello!\" />";
    SWTJBTExt.selectTextInSourcePane(botExt, TEST_PAGE, commentValue, 0, commentValue.length(), 0);
    bot.sleep(Timing.time2S());
    bot.menu("Source").menu("Add Block Comment").click(); // $NON-NLS-1$//$NON-NLS-2$
    getEditor().save();
    waitForBlockingJobsAcomplished(VISUAL_UPDATE);
    SWTBotWebBrowser webBrowser = new SWTBotWebBrowser(TEST_PAGE, new SWTBotExt());
    assertVisualEditorContainsManyComments(webBrowser, 1, TEST_PAGE);

    assertTrue(
        "Visual Representation of page doesn't contain comment with value " + commentValue,
        webBrowser.containsCommentWithValue(commentValue));

    // Test remove block comment from Source menu
    SWTJBTExt.selectTextInSourcePane(botExt, TEST_PAGE, commentValue, 0, commentValue.length(), 0);
    getEditor().selectCurrentLine();
    bot.sleep(Timing.time2S());
    bot.menu("Source").menu("Remove Block Comment").click(); // $NON-NLS-1$//$NON-NLS-2$
    getEditor().save();
    waitForBlockingJobsAcomplished(VISUAL_UPDATE);
    assertVisualEditorContainsManyComments(webBrowser, 0, TEST_PAGE);

    // Test add block comment with CTRL+SHIFT+/ hot keys
    SWTJBTExt.selectTextInSourcePane(botExt, TEST_PAGE, commentValue, 0, commentValue.length(), 0);
    pressBlockCommentHotKeys();
    getEditor().save();
    waitForBlockingJobsAcomplished(VISUAL_UPDATE);
    assertVisualEditorContainsManyComments(webBrowser, 1, TEST_PAGE);
    assertTrue(
        "Visual Representation of page doesn't contain comment with value " + commentValue,
        webBrowser.containsCommentWithValue(commentValue));

    // Test remove block comment with CTRL+SHIFT+\ hot keys
    SWTJBTExt.selectTextInSourcePane(botExt, TEST_PAGE, commentValue, 0, commentValue.length(), 0);
    bot.sleep(Timing.time2S());
    getEditor().selectCurrentLine();
    pressUnBlockCommentHotKeys();
    getEditor().save();
    waitForBlockingJobsAcomplished(VISUAL_UPDATE);
    assertVisualEditorContainsManyComments(webBrowser, 0, TEST_PAGE);
  }
 /**
  * Adds External Jar File to Project Build Path. If External Jar File already exists and
  * 'overwriteIfExists' parameter is set to true, it is overwritten
  *
  * @param externalJarLocation
  * @param projectName
  * @return
  */
 public static String addExternalJar(
     final String externalJarLocation, final String projectName, boolean overwriteIfExists) {
   assertTrue(
       "External Jar Location cannot be empty but is " + externalJarLocation,
       externalJarLocation != null && externalJarLocation.length() > 0);
   SWTBotExt bot = new SWTEclipseExt().openPropertiesOfProject(projectName);
   bot.shell(IDELabel.Shell.PROPERTIES_FOR + " " + projectName).activate().bot();
   bot.tree()
       .expandNode(IDELabel.JavaBuildPathPropertiesEditor.JAVA_BUILD_PATH_TREE_ITEM_LABEL)
       .select();
   bot.sleep(Timing.time3S());
   bot.tabItem(IDELabel.JavaBuildPathPropertiesEditor.LIBRARIES_TAB_LABEL).activate();
   final SWTBotButton btn = bot.button(IDELabel.Button.ADD_VARIABLE);
   btn.click();
   bot.sleep(Timing.time2S());
   // workaround because first click is not working when test is run via maven
   try {
     bot.shell(IDELabel.Shell.NEW_VARIABLE_CLASS_PATH_ENTRY).activate();
   } catch (WidgetNotFoundException wnfe) {
     btn.click();
     bot.sleep(Timing.time2S());
     bot.shell(IDELabel.Shell.NEW_VARIABLE_CLASS_PATH_ENTRY).activate();
   }
   String jarFileName = new File(externalJarLocation).getName();
   String variableEntryName = jarFileName.toUpperCase() + "_LOCATION";
   boolean externalJarExists = false;
   for (int i = 0; i < bot.table().rowCount(); i++) {
     if (bot.table().getTableItem(i).getText().split(" - ")[0].equals(variableEntryName)) {
       bot.table().getTableItem(i).select();
       externalJarExists = true;
       break;
     }
   }
   bot.button(IDELabel.Button.CONFIGURE_VARIABLES).click();
   bot.shell(IDELabel.Shell.PREFERENCES_FILTERED).activate();
   if (externalJarExists && overwriteIfExists) {
     bot.button(IDELabel.Button.EDIT).click();
     bot.shell(IDELabel.Shell.EDIT_VARIABLE_ENTRY).activate();
     bot.textWithLabel(IDELabel.NewVariableEntryDialog.PATH_TEXT_LABEL)
         .setText(externalJarLocation);
   } else {
     bot.button(IDELabel.Button.NEW).click();
     bot.shell(IDELabel.Shell.NEW_VARIABLE_ENTRY).activate();
     bot.textWithLabel(IDELabel.NewVariableEntryDialog.NAME_TEXT_LABEL).setText(variableEntryName);
     bot.textWithLabel(IDELabel.NewVariableEntryDialog.PATH_TEXT_LABEL)
         .setText(externalJarLocation);
   }
   bot.clickButton(IDELabel.Button.OK).click();
   String result = TableHelper.getSelectionText(bot.table());
   bot.waitUntil(new ActiveShellTitleMatches(bot, "Preferences \\(Filtered\\)"), Timing.time3S());
   bot.clickButton(IDELabel.Button.OK).click();
   bot.waitUntil(
       new ActiveShellTitleMatches(bot, IDELabel.Shell.NEW_VARIABLE_CLASS_PATH_ENTRY),
       Timing.time3S());
   bot.clickButton(IDELabel.Button.OK).click();
   bot.waitUntil(
       new ActiveShellTitleMatches(bot, IDELabel.Shell.PROPERTIES_FOR + " " + projectName),
       Timing.time3S());
   bot.clickButton(IDELabel.Button.OK).click();
   new SWTUtilExt(bot).waitForNonIgnoredJobs();
   return result;
 }