package com.windowtester.test.eclipse.locator; import static com.windowtester.test.eclipse.helpers.JavaProjectHelper.createJavaClass; import static com.windowtester.test.eclipse.helpers.JavaProjectHelper.createJavaProject; import static com.windowtester.test.eclipse.helpers.WorkBenchHelper.openView; import static com.windowtester.test.eclipse.helpers.WorkBenchHelper.View.BASIC_PROBLEMS; import com.windowtester.runtime.IUIContext; import com.windowtester.runtime.WaitTimedOutException; import com.windowtester.runtime.WidgetSearchException; import com.windowtester.runtime.locator.IWidgetLocator; import com.windowtester.runtime.swt.condition.eclipse.ActiveEditorCondition; import com.windowtester.runtime.swt.locator.MenuItemLocator; import com.windowtester.runtime.swt.locator.TreeItemLocator; import com.windowtester.runtime.swt.locator.eclipse.ViewLocator; import com.windowtester.test.eclipse.BaseTest; import com.windowtester.test.eclipse.EclipseUtil; /******************************************************************************* * Copyright (c) 2012 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Google, Inc. - initial API and implementation *******************************************************************************/ public class ProblemViewTreeItemLocatorTest extends BaseTest { public void testClickItemInProblemView() throws Exception { IUIContext ui = getUI(); createJavaProject(ui, getProjectName()); createJavaClass(ui, getSrcFolder(), "MyClass"); ui.wait(ActiveEditorCondition.forName("MyClass.java")); ui.enterText("bang"); ui.click(new MenuItemLocator("File/Save")); openView(ui, BASIC_PROBLEMS); verifyProblemReported(); } private void verifyProblemReported() throws WidgetSearchException { TreeItemLocator itemLocator = new TreeItemLocator("Errors (.*)/Syntax error on token \"bang\", delete this token", new ViewLocator("org.eclipse.ui.views.ProblemView")); //the rub here is that in Eclipse 34+ the dynamic tree is not populated (expanded) so the path is not visible to an assertion //in that case, we do a verification by selection if (eclipseVersionIsLessThan34()) verifyVisibility(itemLocator); else verifyBySelection(itemLocator); } private boolean eclipseVersionIsLessThan34() { return EclipseUtil.getMajor() <= 3 && EclipseUtil.getMinor() < 4; } private void verifyVisibility(TreeItemLocator itemLocator) throws WaitTimedOutException { getUI().assertThat(itemLocator.isVisible()); } private IWidgetLocator verifyBySelection(TreeItemLocator itemLocator) throws WidgetSearchException { return getUI().click(itemLocator); } private String getSrcFolder() { return getProjectName() + "/src"; } private String getProjectName() { return getClass().getName(); } }