com.google.dart.tools.tests.swtbot.model.EditorBotWindow.java Source code

Java tutorial

Introduction

Here is the source code for com.google.dart.tools.tests.swtbot.model.EditorBotWindow.java

Source

/*
 * Copyright 2014 Dart project authors.
 * 
 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.dart.tools.tests.swtbot.model;

import com.google.dart.tools.tests.swtbot.matchers.EditorWithTitle;
import com.google.dart.tools.ui.internal.projects.ProjectMessages;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.eclipse.finder.waits.Conditions;
import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
import org.eclipse.swtbot.swt.finder.results.VoidResult;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;

@SuppressWarnings("restriction")
public class EditorBotWindow extends AbstractBotView {

    // Project types -- need to keep in sync with New Project wizard (NewApplicationCreationPage)
    private enum Project {
        WEB_APP, CMDLINE_APP, PKG_TEMPLATE, POLYMER_APP, CHROME_APP
    }

    public EditorBotWindow(SWTWorkbenchBot bot) {
        super(bot);
    }

    /**
     * Create a new chrome app with the given name.
     * 
     * @param string the project name
     */
    public void createChromeProject(String string) {
        createProject(string, Project.CHROME_APP, "manifest.json");
    }

    /**
     * Create a new command-line app with the given name.
     * 
     * @param string the project name
     */
    public void createCommandLineProject(String string) {
        createProject(string, Project.CMDLINE_APP, string + ".dart");
    }

    /**
     * Create a new package template with the given name.
     * 
     * @param string the project name
     */
    public void createPackageTemplateProject(String string) {
        // TODO Test this.
        createProject(string, Project.PKG_TEMPLATE, string + ".dart");
    }

    /**
     * Create a new polymer app with the given name.
     * 
     * @param string the project name
     */
    public void createPolymerProject(String string) {
        // TODO Test this.
        createProject(string, Project.POLYMER_APP, string + ".html");
    }

    /**
     * Create a new web app with the given name.
     * 
     * @param string the project name
     */
    public void createWebProject(String string) {
        createProject(string, Project.WEB_APP, string + ".dart");
    }

    /**
     * Return a TextBotEditor for the editor with the given <code>title</code>.
     * 
     * @param title the editor title
     * @return the SWTBot model of the editor
     */
    public TextBotEditor editorNamed(String title) {
        waitForAnalysis();
        return new TextBotEditor(bot, title);
    }

    /**
     * Return a FilesBotView for the Files view.
     * 
     * @return the SWTBot model of the Files view
     */
    public FilesBotView filesView() {
        waitForAnalysis();
        menu("Tools").menu("Files").click();
        waitForAnalysis();
        return new FilesBotView(bot);
    }

    /**
     * Return a SWTBotMenu with the given <code>title</code>
     * 
     * @param title the menu title
     * @return the SWTBotMenu that models the menu
     */
    public SWTBotMenu menu(final String title) {
        final SWTBotMenu[] menu = new SWTBotMenu[1];
        UIThreadRunnable.syncExec(new VoidResult() {
            @Override
            public void run() {
                menu[0] = bot.menu(title);
            }
        });
        return menu[0];
    }

    /**
     * Return the WelcomePageEditor for the Welcome page.
     * 
     * @return the SWTBot model for the Welcome page
     */
    public WelcomePageEditor openWelcomePage() {
        waitForAnalysis();
        menu("Tools").menu("Welcome Page").click();
        waitForAnalysis();
        return new WelcomePageEditor(bot);
    }

    /**
     * Return the OutlineBotView for the Outline view.
     * 
     * @return the SWTBot model for the Outline view
     */
    public OutlineBotView outlineView() {
        waitForAnalysis();
        menu("Tools").menu("Outline").click();
        waitForAnalysis();
        return new OutlineBotView(bot);
    }

    /**
     * Return the ProblemsBotView for the Problems view.
     * 
     * @return the SWTBot model for the Problems view
     */
    public ProblemsBotView problemsView() {
        waitForAnalysis();
        menu("Tools").menu("Problems").click();
        waitForAnalysis();
        return new ProblemsBotView(bot);
    }

    /**
     * Return a SearchBotView for the Search view.
     * 
     * @return the SWTBot model of the Search view
     */
    public SearchBotView searchView() {
        waitForAnalysis();
        return new SearchBotView(bot);
    }

    @Override
    protected String viewName() {
        return "Dart Editor";
    }

    private void createProject(String string, Project type, String editorName) {
        waitForAnalysis();
        menu("File").menu("New Project...").click();
        SWTBotText textField = bot.textWithTooltip(ProjectMessages.NewApplicationWizardPage_project_name_tooltip);
        textField.setText("sample");
        SWTBotTable types = bot.tableInGroup("Sample content");
        types.select(type.ordinal());
        bot.button(IDialogConstants.FINISH_LABEL).click();
        bot.waitUntilWidgetAppears(Conditions.waitForEditor(new EditorWithTitle(editorName)));
        filesView().waitForToolsOutput();
        bot.editorByTitle(editorName).setFocus();
    }
}