/******************************************************************************* * 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 *******************************************************************************/ package com.windowtester.runtime.swt.internal.matcher; import org.eclipse.swt.widgets.Widget; import com.windowtester.runtime.locator.IWidgetMatcher; import com.windowtester.runtime.swt.internal.display.DisplayExec; import com.windowtester.runtime.swt.internal.display.RunnableWithResult; import com.windowtester.runtime.swt.internal.finder.SWTHierarchyHelper; /** * A matcher that checks visibility. * @deprecated */ public class VisibilityMatcher implements IWidgetMatcher { public static final String VISIBILITY_KEY = "test.visibility"; public static final Object VISIBILITY_SET_VALUE = Boolean.TRUE; /** * Used to enable testing --- use only when you want to override the default * behavior for the purposes of testing. */ public static boolean TEST_MODE; public static class TestFriendlyVisibilityMatcher extends VisibilityMatcher { public TestFriendlyVisibilityMatcher(boolean isVisible) { super(isVisible); } /* (non-Javadoc) * @see com.windowtester.runtime.swt.internal.matcher.VisibilityMatcher#matches(org.eclipse.swt.widgets.Widget) */ public boolean matches(Widget w) { if (super.matches(w)) return true; return checkMetadata(w); } private boolean checkMetadata(final Widget widget) { Object data = DisplayExec.sync(new RunnableWithResult() { public Object runWithResult() { return widget.getData(VISIBILITY_KEY); } }); return data == VISIBILITY_SET_VALUE; } } public static Widget setVisibleForTesting(Widget w) { w.setData(VISIBILITY_KEY, VISIBILITY_SET_VALUE); return w; } private final boolean _isVisible; private VisibilityMatcher(boolean isVisible) { _isVisible = isVisible; } public boolean matches(Widget w) { return SWTHierarchyHelper.isVisible(w) == _isVisible; } /* (non-Javadoc) * @see com.windowtester.runtime2.locator.IWidgetMatcher#matches(java.lang.Object) */ public boolean matches(Object widget) { if (widget instanceof Widget) return matches((Widget)widget); return false; } public static IWidgetMatcher create(boolean isVisible) { if (TEST_MODE) return new TestFriendlyVisibilityMatcher(isVisible); return new VisibilityMatcher(isVisible); } public static IWidgetMatcher visibleMatcher() { return create(true); } }