/******************************************************************************* * Copyright (c) 2004, 2014 BREDEX GmbH. * 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: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.rc.swing.tester; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.fail; import java.awt.Canvas; import java.awt.Color; import java.awt.Component; import java.awt.Label; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JToggleButton; import org.eclipse.jubula.rc.common.adaptable.AdapterFactoryRegistry; import org.eclipse.jubula.rc.common.adaptable.IAdapterFactory; import org.eclipse.jubula.rc.common.adaptable.ITextRendererAdapter; import org.eclipse.jubula.rc.common.exception.StepExecutionException; import org.eclipse.jubula.rc.swing.tester.util.TesterUtil; import org.eclipse.jubula.tools.internal.messagehandling.MessageIDs; import org.junit.After; import org.junit.Test; @SuppressWarnings("serial") public class TestTesterUtil { private static class CanvasWithPublicGetText extends Canvas { public String getText() { return "CanvasWithPublicGetText"; } } private static class CanvasWithOverriddenGetText extends CanvasWithPublicGetText { public String getText() { return "CanvasWithOverriddenGetText"; } } private static class CanvasWithInvalidGetText extends Canvas { @SuppressWarnings("unused") public Color getText() { return Color.BLACK; } } private static class CanvasWithPrivateGetText extends Canvas { private String getText() { return "CanvasWithPrivateGetText"; } } private static class CanvasWithNullGetText extends Canvas { @SuppressWarnings("unused") public String getText() { return null; } } private static class CanvasWithExceptionGetText extends Canvas { @SuppressWarnings("unused") public String getText() { throw new RuntimeException(); } } private final String m_renderedText = "RenderedText"; private IAdapterFactory m_registeredAdapterFactory = null; private void assertRenderedTextEquals( String expectedText, Component renderer) { assertEquals( expectedText, TesterUtil.getRenderedText(renderer)); } private void assertRendererNotSupported(Component renderer) { try { TesterUtil.getRenderedText(renderer); fail(); } catch (StepExecutionException e) { assertEquals(e.getErrorId(), MessageIDs.E_EVENT_SUPPORT); } } @After public void deregisterAdapterFactory() { if (m_registeredAdapterFactory != null) { AdapterFactoryRegistry.getInstance() .signOffFactory(m_registeredAdapterFactory); } } @Test public void testRenderedNotSupported() { assertRendererNotSupported(new Canvas()); } @Test public void testLabelRenderer() { assertRenderedTextEquals( m_renderedText, new Label(m_renderedText)); } @Test public void testToggleButtonRenderer() { JToggleButton toggleButton = new JToggleButton("Button text", false); assertRenderedTextEquals( Boolean.FALSE.toString(), toggleButton); toggleButton.setSelected(true); assertRenderedTextEquals( Boolean.TRUE.toString(), toggleButton); } @Test public void testButtonRenderer() { assertRenderedTextEquals( m_renderedText, new JButton(m_renderedText)); } @Test public void testTextComponentRenderer() { assertRenderedTextEquals( m_renderedText, new JTextField(m_renderedText)); } @Test public void testNullRenderer() { assertRenderedTextEquals( "", new JLabel() { @Override public String getText() { return null; } }); } @SuppressWarnings("rawtypes") @Test public void testAdaptedRenderer() { final String canvasText = "CanvasRenderedText"; m_registeredAdapterFactory = new IAdapterFactory() { public Class[] getSupportedClasses() { return new Class[] {Canvas.class}; } public Object getAdapter(Class targetAdapterClass, Object objectToAdapt) { if (objectToAdapt instanceof Canvas) { return new ITextRendererAdapter() { public String getText() { return canvasText; } }; } return null; } }; AdapterFactoryRegistry.getInstance() .registerFactory(m_registeredAdapterFactory); assertRenderedTextEquals(canvasText, new Canvas()); } @Test @SuppressWarnings("rawtypes") public void testNullAdaptedRenderer() { m_registeredAdapterFactory = new IAdapterFactory() { public Class[] getSupportedClasses() { return new Class[] {Canvas.class}; } public Object getAdapter(Class targetAdapterClass, Object objectToAdapt) { if (objectToAdapt instanceof Canvas) { return new ITextRendererAdapter() { public String getText() { return null; } }; } return null; } }; AdapterFactoryRegistry.getInstance() .registerFactory(m_registeredAdapterFactory); assertRenderedTextEquals("", new Canvas()); } @Test public void testPublicGetText() { CanvasWithPublicGetText c = new CanvasWithPublicGetText(); assertRenderedTextEquals(c.getText(), c); } @Test public void testPrivateGetText() { CanvasWithPrivateGetText c = new CanvasWithPrivateGetText(); assertRenderedTextEquals(c.getText(), c); } @Test public void testOverriddenGetText() { CanvasWithOverriddenGetText c = new CanvasWithOverriddenGetText(); assertRenderedTextEquals(c.getText(), c); } @Test public void testNullGetText() { CanvasWithNullGetText c = new CanvasWithNullGetText(); assertRenderedTextEquals("", c); } @Test public void testInvalidGetText() { CanvasWithInvalidGetText c = new CanvasWithInvalidGetText(); assertRendererNotSupported(c); } @Test public void testGetTextExceptionHandling() { CanvasWithExceptionGetText c = new CanvasWithExceptionGetText(); try { TesterUtil.getRenderedText(c); fail(); } catch (StepExecutionException e) { // An error occurring while getting the text does not mean that the // renderer is not supported. assertFalse(e.getMessage(), MessageIDs.E_EVENT_SUPPORT.equals(e.getErrorId())); } } }