/*******************************************************************************
* Copyright (c) 2002, 2015 Innoopract Informationssysteme GmbH and others.
* 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.swt.widgets;
import static org.eclipse.rap.rwt.testfixture.internal.SerializationTestUtil.serializeAndDeserialize;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.internal.lifecycle.WidgetLCA;
import org.eclipse.rap.rwt.testfixture.TestContext;
import org.eclipse.rap.rwt.testfixture.internal.Fixture;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.internal.widgets.MarkupValidator;
import org.eclipse.swt.internal.widgets.labelkit.LabelLCA;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
public class Label_Test {
@Rule
public TestContext context = new TestContext();
private Display display;
private Shell shell;
private Label label;
@Before
public void setUp() {
display = new Display();
shell = new Shell( display , SWT.NONE );
label = new Label( shell, SWT.NONE );
}
@Test
public void testInitialValues() {
assertEquals( "", label.getText() );
assertEquals( SWT.LEFT, label.getAlignment() );
}
@Test
public void testText() {
label.setText( "abc" );
assertEquals( "abc", label.getText() );
}
@Test( expected = IllegalArgumentException.class )
public void testText_failsWithNull() {
label.setText( null );
}
@Test
public void testStyle() {
assertTrue( ( label.getStyle() & SWT.SEPARATOR ) == 0 );
assertTrue( ( label.getStyle() & SWT.LEFT ) != 0 );
label = new Label( shell, SWT.SEPARATOR | SWT.VERTICAL | SWT.HORIZONTAL );
assertTrue( ( label.getStyle() & SWT.SEPARATOR ) != 0 );
assertTrue( ( label.getStyle() & SWT.VERTICAL ) != 0 );
assertFalse( ( label.getStyle() & SWT.HORIZONTAL ) != 0 );
label = new Label( shell, SWT.SEPARATOR | SWT.SHADOW_IN | SWT.SHADOW_OUT );
assertTrue( ( label.getStyle() & SWT.SEPARATOR ) != 0 );
assertTrue( ( label.getStyle() & SWT.VERTICAL ) != 0 );
assertTrue( ( label.getStyle() & SWT.SHADOW_OUT ) != 0 );
assertFalse( ( label.getStyle() & SWT.SHADOW_IN ) != 0 );
}
@Test
public void testAlignment() {
label.setAlignment( SWT.LEFT );
assertEquals( SWT.LEFT, label.getAlignment() );
label.setAlignment( SWT.RIGHT );
assertEquals( SWT.RIGHT, label.getAlignment() );
label.setAlignment( SWT.CENTER );
assertEquals( SWT.CENTER, label.getAlignment() );
label = new Label( shell, SWT.SEPARATOR );
assertEquals( 0, label.getAlignment() );
label.setAlignment( SWT.RIGHT );
assertEquals( 0, label.getAlignment() );
label = new Label( shell, SWT.NONE );
assertEquals( SWT.LEFT, label.getAlignment() );
label = new Label( shell, SWT.LEFT );
assertEquals( SWT.LEFT, label.getAlignment() );
label = new Label( shell, SWT.RIGHT );
assertEquals( SWT.RIGHT, label.getAlignment() );
label = new Label( shell, SWT.CENTER );
assertEquals( SWT.CENTER, label.getAlignment() );
}
@Test
public void testSeparatorLabel() throws IOException {
Label label = new Label( shell, SWT.SEPARATOR );
label.setText( "bla" );
assertEquals( "", label.getText() );
label.setImage( createImage() );
assertNull( label.getImage() );
}
@Test
public void testImageAndText() throws IOException {
label.setText( "bla" );
Image image = createImage();
label.setImage( image );
assertSame( image, label.getImage() );
assertEquals( "", label.getText() );
label.setText( "xyz" );
assertEquals( "xyz", label.getText() );
assertNull( label.getImage() );
}
@Test
public void testSize() {
Label labelWrap = new Label( shell, SWT.WRAP );
Label labelNoWrap = new Label( shell, SWT.NONE );
String wrapText = "Text that wraps. Text that wraps. Text that wraps. ";
labelWrap.setText( wrapText );
labelNoWrap.setText( wrapText );
Point extentPlain = labelNoWrap.computeSize( SWT.DEFAULT, SWT.DEFAULT );
assertTrue( extentPlain.x > 100 );
Point extentNoWrap = labelNoWrap.computeSize( 100, SWT.DEFAULT );
assertEquals( extentPlain.y, extentNoWrap.y );
Point extentWrap = labelWrap.computeSize( 100, SWT.DEFAULT );
assertTrue( extentWrap.y > extentNoWrap.y );
// ensure that label with empty text has zero width but has a height
labelNoWrap.setText( "" );
extentNoWrap = labelNoWrap.computeSize( SWT.DEFAULT, SWT.DEFAULT );
assertEquals( 0, extentNoWrap.x );
assertTrue( extentNoWrap.y > 0 );
labelWrap.setText( "" );
extentWrap = labelWrap.computeSize( SWT.DEFAULT, SWT.DEFAULT );
assertEquals( 0, extentWrap.x );
assertTrue( extentWrap.y > 0 );
}
@Test
public void testComputeSize() throws IOException {
Point expected = new Point( 0, 14 );
assertEquals( expected, label.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
label.setText( "label text" );
expected = new Point( 67, 20 );
assertEquals( expected, label.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
Image image = createImage();
label.setImage( image );
expected = new Point( image.getBounds().width, image.getBounds().height );
assertEquals( expected, label.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
label = new Label( shell, SWT.BORDER );
label.setImage( image );
expected = new Point( 102, 52 );
assertEquals( expected, label.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
label = new Label( shell, SWT.SEPARATOR | SWT.HORIZONTAL );
expected = new Point( Widget.DEFAULT_WIDTH, 2 );
assertEquals( expected, label.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
label = new Label( shell, SWT.SEPARATOR | SWT.VERTICAL );
expected = new Point( 2, Widget.DEFAULT_HEIGHT );
assertEquals( expected, label.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
expected = new Point( 100, 100 );
assertEquals( expected, label.computeSize( 100, 100 ) );
}
@Test
public void testComputeSizeWithMarkupEnabled() {
label.setText( "foo bar" );
Point textExtent = label.computeSize( SWT.DEFAULT, SWT.DEFAULT );
label.setData( RWT.MARKUP_ENABLED, Boolean.TRUE );
label.setText( "<span>foo</span>" );
Point markupExtent = label.computeSize( SWT.DEFAULT, SWT.DEFAULT );
assertTrue( markupExtent.x < textExtent.x );
assertEquals( markupExtent.y, textExtent.y );
}
@Test
public void testIsSerializable() throws Exception {
String text = "labelText";
label.setText( text );
Label deserializedLabel = serializeAndDeserialize( label );
assertEquals( text, deserializedLabel.getText() );
}
@Test
public void testMarkupTextWithoutMarkupEnabled() {
label.setData( RWT.MARKUP_ENABLED, Boolean.FALSE );
try {
label.setText( "invalid xhtml: <<&>>" );
} catch( IllegalArgumentException notExpected ) {
fail();
}
}
@Test
public void testMarkupTextWithMarkupEnabled() {
label.setData( RWT.MARKUP_ENABLED, Boolean.TRUE );
try {
label.setText( "invalid xhtml: <<&>>" );
fail();
} catch( IllegalArgumentException expected ) {
}
}
@Test
public void testMarkupTextWithMarkupEnabled_ValidationDisabled() {
label.setData( RWT.MARKUP_ENABLED, Boolean.TRUE );
label.setData( MarkupValidator.MARKUP_VALIDATION_DISABLED, Boolean.TRUE );
try {
label.setText( "invalid xhtml: <<&>>" );
} catch( IllegalArgumentException notExpected ) {
fail();
}
}
@Test
public void testDisableMarkupIsIgnored() {
label.setData( RWT.MARKUP_ENABLED, Boolean.TRUE );
label.setData( RWT.MARKUP_ENABLED, Boolean.FALSE );
assertEquals( Boolean.TRUE, label.getData( RWT.MARKUP_ENABLED ) );
}
@Test
public void testSetData() {
label.setData( "foo", "bar" );
assertEquals( "bar", label.getData( "foo" ) );
}
@Test
public void testGetAdapter_LCA() {
assertTrue( label.getAdapter( WidgetLCA.class ) instanceof LabelLCA );
assertSame( label.getAdapter( WidgetLCA.class ), label.getAdapter( WidgetLCA.class ) );
}
private Image createImage() throws IOException {
InputStream stream = Fixture.class.getClassLoader().getResourceAsStream( Fixture.IMAGE_100x50 );
Image result = new Image( display, stream );
stream.close();
return result;
}
}