/******************************************************************************* * Copyright (c) 2008 Ralf Ebert * 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: * Ralf Ebert - initial API and implementation *******************************************************************************/ package com.swtxml.swt.injector; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.InputStream; import java.util.List; import org.easymock.EasyMock; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Display; import org.junit.After; import org.junit.Test; import com.swtxml.adapter.MockAdapter; import com.swtxml.i18n.ILabelTranslator; import com.swtxml.i18n.LabelType; import com.swtxml.resources.IDocumentResource; import com.swtxml.swt.SwtInfo; import com.swtxml.swt.SwtResourceManager; import com.swtxml.swt.sample.SwtWidgetsExamplesWindow; import com.swtxml.swt.types.ColorType; import com.swtxml.swt.types.ImageType; import com.swtxml.swt.types.LayoutDataType; import com.swtxml.swt.types.LayoutType; import com.swtxml.swt.types.PointType; import com.swtxml.swt.types.StyleType; import com.swtxml.util.context.Context; import com.swtxml.util.lang.CollectionUtils; import com.swtxml.util.lang.IFunction; import com.swtxml.util.proposals.Match; import com.swtxml.util.types.IType; public class SwtTypesTest { @After public void clearContext() { Context.clear(); } @Test public void testColor() { Context.addAdapter(new MockAdapter(new SwtResourceManager())); IType<Color> colorType = new ColorType(); Color color = colorType.convert("#010203"); assertEquals(1, color.getRed()); assertEquals(2, color.getGreen()); assertEquals(3, color.getBlue()); color = colorType.convert("#FFabCD"); assertEquals(255, color.getRed()); assertEquals(171, color.getGreen()); assertEquals(205, color.getBlue()); assertSame("colors are cached", color, colorType.convert("#FFabCD")); color = colorType.convert("black"); assertEquals(0, color.getRed()); assertEquals(0, color.getGreen()); assertEquals(0, color.getBlue()); } @Test public void testImage() { InputStream resource = SwtWidgetsExamplesWindow.class.getResourceAsStream("someimage.png"); IDocumentResource resolver = EasyMock.createMock(IDocumentResource.class); EasyMock.expect(resolver.resolve("someimage.png")).andReturn(resource); EasyMock.replay(resolver); Context.addAdapter(new MockAdapter(resolver)); Context.addAdapter(new MockAdapter(new SwtResourceManager())); IType<Image> imageType = new ImageType(); assertEquals(Display.getDefault().getSystemImage(SWT.ICON_WARNING), imageType .convert("ICON_WARNING")); Image image = imageType.convert("someimage.png"); assertEquals(new Rectangle(0, 0, 9, 5), image.getBounds()); assertSame(image, imageType.convert("someimage.png")); } @Test public void testGridLayout() { LayoutType layoutType = new LayoutType(); GridLayout layout = (GridLayout) layoutType .convert("layout:grid;numColumns:2;horizontalSpacing:10;verticalSpacing:11;"); assertEquals(2, layout.numColumns); assertEquals(10, layout.horizontalSpacing); assertEquals(11, layout.verticalSpacing); } @Test public void testRowLayout() { LayoutType layoutType = new LayoutType(); RowLayout layout = (RowLayout) layoutType.convert("layout:row;type:vertical;spacing:5;"); assertEquals(SWT.VERTICAL, layout.type); assertEquals(5, layout.spacing); } @Test public void testLayoutCompletion() { LayoutType layoutType = new LayoutType(); assertEquals("layout:§;", layoutType.getProposals(new Match("la§")).get(0).toString()); assertEquals("layout:§;", layoutType.getProposals(new Match("§")).get(0).toString()); assertEquals("type:§;layout:row;", layoutType.getProposals(new Match("ty§;layout:row;")) .get(0).toString()); assertEquals("layout:row;type:§;", layoutType.getProposals(new Match("layout:row;ty§")) .get(0).toString()); assertEquals("type:vertical;center:§;layout:row;", layoutType.getProposals( new Match("type:vertical;c§;layout:row;")).get(0).toString()); assertEquals("type:vertical;center:§;layout:row;", layoutType.getProposals( new Match("type:vertical;c§layout:row;")).get(0).toString()); assertEquals("layout:row;center:§;", layoutType.getProposals(new Match("layout:row; c§")) .get(0).toString()); assertEquals("layout:row;center:true;§", layoutType.getProposals( new Match("layout:row;center: t§")).get(0).toString()); assertTrue(layoutType.getProposals(new Match("§;layout:row;")).size() > 0); assertEquals("type:VERTICAL;§layout:row;", layoutType.getProposals( new Match("type:v§;layout:row;")).get(0).toString()); assertEquals(2, layoutType.getProposals(new Match("type:§;layout:row;")).size()); List<String> proposals = getProposalsAsSeenByUser(layoutType.getProposals(new Match( "layout:§"))); assertTrue(proposals + " does not contain grid", proposals.contains("grid")); } @Test public void testLayoutCompletionDoesNotContainAlreadySetProperties() { LayoutType layoutType = new LayoutType(); List<Match> proposals = layoutType.getProposals(new Match("type:vertical;layout:row;§")); List<String> proposalTexts = CollectionUtils.collect(proposals, new IFunction<Match, String>() { public String apply(Match m) { return m.getText(); } }); assertTrue(proposalTexts.contains("marginBottom:")); assertFalse(proposalTexts.contains("type:")); } @Test public void testLayoutDataSetter() { Context.addAdapter(new MockAdapter(new GridLayout())); LayoutDataType layoutDataType = new LayoutDataType(); GridData data = (GridData) layoutDataType.convert("widthHint:120"); assertEquals(120, data.widthHint); } @Test public void testLayoutDataContentAssist() { Context.addAdapter(new MockAdapter(new GridLayout())); LayoutDataType type = new LayoutDataType(); assertEquals("widthHint:§;", type.getProposals(new Match("wi§")).get(0).toString()); assertEquals("verticalAlignment:CENTER;§", type.getProposals( new Match("verticalAlignment:c§")).get(0).toString()); } @Test public void testGridLayoutDataAttributesBug() { Context.addAdapter(new MockAdapter(new GridLayout())); LayoutDataType type = new LayoutDataType(); List<String> proposals = getProposalsAsSeenByUser(type.getProposals(new Match("§"))); assertTrue(proposals.contains("verticalSpan:")); for (String p : proposals) { if (p.contains("GRAB_VERTICAL")) { fail("attribute proposal for property name"); } } } private List<String> getProposalsAsSeenByUser(List<Match> proposals) { return CollectionUtils.collect(proposals, new IFunction<Match, String>() { public String apply(Match m) { return m.getText(); } }); } @Test public void testLayoutDataFillLayout() { Context.addAdapter(new MockAdapter(new FillLayout())); LayoutDataType type = new LayoutDataType(); assertEquals(0, type.getProposals(new Match("§")).size()); } @Test public void testLayoutDataWithoutLayoutContentAssist() { LayoutDataType type = new LayoutDataType(); assertEquals(0, type.getProposals(new Match("§")).size()); } @Test public void testPointType() { assertEquals(new Point(12, 141), new PointType().convert("12x141")); } @Test public void testStyleType() { StyleType type = new StyleType(SwtInfo.SWT); assertEquals(new Integer(SWT.BORDER | SWT.COLOR_RED), type.convert("border|color_red")); assertEquals("border|BORDER_DASH§", type.getProposals(new Match("border|border_da§xxxx")) .get(0).toString()); } @Test public void testLabelTypeTest() { ILabelTranslator translator = createMock(ILabelTranslator.class); Context.addAdapter(new MockAdapter(translator)); expect(translator.translate("test")).andReturn("123"); EasyMock.replay(translator); assertEquals("test", new LabelType().convert("test")); assertEquals("123", new LabelType().convert("%test")); } }