Package com.google.eclipse.javascript.jstestdriver.ui.view

Source Code of com.google.eclipse.javascript.jstestdriver.ui.view.TestCaseOpener

/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* 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.eclipse.javascript.jstestdriver.ui.view;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.ITextEditor;

import com.google.eclipse.javascript.jstestdriver.core.model.LoadedSourceFileLibrary;
import com.google.eclipse.javascript.jstestdriver.ui.Activator;
import com.google.jstestdriver.TestResult;


/**
* Handles searching of files for testcase.
*
* @author m.jurcovicova
*/
public class TestCaseOpener {

  private static final String SELECTED_TEST_WAS_NOT_FOUND = "Selected test was not found.";
  private static final String CAN_NOT_OPEN = "Can not open the test.";

  private static final Logger logger = Logger.getLogger(TestCaseOpener.class.getName());

  private final LoadedSourceFileLibrary library;
  private final TestCaseFinder finder = new TestCaseFinder();

  public TestCaseOpener(LoadedSourceFileLibrary library) {
    this.library = library;
  }

  public void openTestSource(IProject testedProject, TestResult testResult,
      IWorkbenchPage workbenchPage) {
    IFile[] loadedFiles = library.getLoadedFiles(testedProject);
    TestCaseFinder.TestCaseFinderResult result =
        finder.find(loadedFiles, testResult.getTestCaseName(), testResult.getTestName());
    if (!result.hasMatch()) {
      showTestNotFoundMessage();
      return;
    }

    openInEditor(result, workbenchPage);
  }

  private void openInEditor(TestCaseFinder.TestCaseFinderResult result, IWorkbenchPage workbenchPage) {
    try {
      IEditorPart editor = getAndOpenEditor(result.getFile(), workbenchPage);
      if (editor instanceof ITextEditor) {
        ITextEditor textEditor = (ITextEditor) editor;
        textEditor.selectAndReveal(result.getMatchOffset(), result.getMatchLength());
      }

    } catch (PartInitException e) {
      logger.log(Level.SEVERE, "Could not open editor for: " + result.getFile(), e);
    }
  }

  private void showTestNotFoundMessage() {
    Status status =
        new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, SELECTED_TEST_WAS_NOT_FOUND, null);
    ErrorDialog.openError(Display.getCurrent().getActiveShell(), "JS Test Driver", CAN_NOT_OPEN,
        status);
  }

  private String getFileEditorId(IFile file) throws PartInitException {
    String editorId = null;
    IEditorDescriptor desc;
    desc = IDE.getEditorDescriptor(file);
    if (desc == null || !desc.isInternal()) {
      editorId = "org.eclipse.ui.DefaultTextEditor";
    } else {
      editorId = desc.getId();
    }
    return editorId;
  }

  private IEditorPart getAndOpenEditor(IFile file, IWorkbenchPage page) throws PartInitException {
    IEditorInput input = new FileEditorInput(file);
    IEditorPart editor = page.findEditor(input);
    if (editor != null) {
      page.bringToTop(editor);
      page.activate(editor);
      return editor;
    }

    String editorId = getFileEditorId(file);
    editor = page.openEditor(input, editorId, true);
    return editor;
  }
}
TOP

Related Classes of com.google.eclipse.javascript.jstestdriver.ui.view.TestCaseOpener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.