/*******************************************************************************
* Copyright (c) 2008, 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.rap.rwt.internal.theme;
import static org.eclipse.rap.rwt.internal.service.ContextProvider.getApplicationContext;
import static org.eclipse.rap.rwt.internal.theme.ThemeTestUtil.RESOURCE_LOADER;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
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.service.ApplicationContext;
import org.eclipse.rap.rwt.testfixture.TestContext;
import org.eclipse.rap.rwt.testfixture.internal.Fixture;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
public class CssImage_Test {
@Rule
public TestContext context = new TestContext();
private ApplicationContext applicationContext;
@Before
public void setUp() {
applicationContext = getApplicationContext();
}
@Test( expected = NullPointerException.class )
public void testValueOf_nullArgument() {
CssImage.valueOf( null, RESOURCE_LOADER );
}
@Test( expected = NullPointerException.class )
public void testValueOf_nullLoader() {
CssImage.valueOf( "", null );
}
@Test( expected = IllegalArgumentException.class )
public void testValueOf_emptyString() {
CssImage.valueOf( "", RESOURCE_LOADER );
}
@Test( expected = IllegalArgumentException.class )
public void testValueOf_notExistingCursorFile() {
CssImage.valueOf( "not-existing.png", RESOURCE_LOADER );
}
@Test( expected = NullPointerException.class )
public void testCreateGradient_nullColors() {
CssImage.createGradient( null, new float[] {}, true );
}
@Test( expected = NullPointerException.class )
public void testCreateGradient_nullPercents() {
CssImage.createGradient( new String[] {}, null, true );
}
@Test
public void testNone() {
assertSame( CssImage.NONE, CssImage.valueOf( "none", null ) );
assertSame( CssImage.NONE, CssImage.valueOf( "none", RESOURCE_LOADER ) );
assertTrue( CssImage.NONE.none );
assertNull( CssImage.NONE.path );
assertNull( CssImage.NONE.loader );
assertNull( CssImage.NONE.gradientColors );
assertNull( CssImage.NONE.gradientPercents );
assertTrue( CssImage.NONE.vertical );
assertEquals( new Size( 0, 0), CssImage.NONE.getSize() );
}
@Test
public void testCreateImage() {
CssImage qxImage = CssImage.valueOf( Fixture.IMAGE_50x100, RESOURCE_LOADER );
assertFalse( qxImage.none );
assertEquals( Fixture.IMAGE_50x100, qxImage.path );
assertSame( RESOURCE_LOADER, qxImage.loader );
assertNull( qxImage.gradientColors );
assertNull( qxImage.gradientPercents );
assertTrue( qxImage.vertical );
assertEquals( new Size( 50, 100), qxImage.getSize() );
assertFalse( qxImage.isGradient() );
}
@Test
public void testCreateVerticalGradient() {
String[] gradientColors = new String[] { "#FF0000", "#00FF00", "#0000FF" };
float[] gradientPercents = new float[] { 0f, 50f, 100f };
CssImage qxImage = CssImage.createGradient( gradientColors, gradientPercents, true );
assertSame( gradientColors, qxImage.gradientColors );
assertSame( gradientPercents, qxImage.gradientPercents );
assertTrue( qxImage.vertical );
assertTrue( qxImage.none );
assertNull( qxImage.path );
assertNull( qxImage.loader );
assertEquals( new Size( 0, 0 ), qxImage.getSize() );
assertTrue( qxImage.isGradient() );
}
@Test
public void testCreateHorizontalGradient() {
String[] gradientColors = new String[] { "#FF0000", "#00FF00", "#0000FF" };
float[] gradientPercents = new float[] { 0f, 50f, 100f };
CssImage qxImage = CssImage.createGradient( gradientColors, gradientPercents, false );
assertSame( gradientColors, qxImage.gradientColors );
assertSame( gradientPercents, qxImage.gradientPercents );
assertFalse( qxImage.vertical );
assertTrue( qxImage.none );
assertNull( qxImage.path );
assertNull( qxImage.loader );
assertEquals( new Size( 0, 0 ), qxImage.getSize() );
assertTrue( qxImage.isGradient() );
}
@Test
public void testDefaultString() {
assertEquals( "none", CssImage.NONE.toDefaultString() );
assertEquals( "", CssImage.valueOf( Fixture.IMAGE_50x100, RESOURCE_LOADER ).toDefaultString() );
}
@Test
public void testHashCode() {
assertEquals( -1526341861, CssImage.NONE.hashCode() );
CssImage qxImage1 = CssImage.valueOf( Fixture.IMAGE_50x100, RESOURCE_LOADER );
CssImage qxImage2 = CssImage.valueOf( Fixture.IMAGE_50x100, RESOURCE_LOADER );
assertEquals( qxImage1, qxImage2 );
assertEquals( qxImage1.hashCode(), qxImage2.hashCode() );
String[] gradientColors = new String[] { "#FF0000", "#00FF00", "#0000FF" };
float[] gradientPercents = new float[] { 0f, 50f, 100f };
CssImage gradient1 = CssImage.createGradient( gradientColors, gradientPercents, true );
CssImage gradient2 = CssImage.createGradient( gradientColors, gradientPercents, true );
assertEquals( gradient1, gradient2 );
assertEquals( gradient1.hashCode(), gradient2.hashCode() );
}
@Test
public void testHashCode_GradientWithMoreColors() {
String[] gradientColors1
= new String[] { "#FFFFFF", "#00AA00", "#00AA00", "#00AA00", "#FFFFFF" };
float[] gradientPercents1 = new float[] { 0f, 48f, 52f, 56f, 100f };
String[] gradientColors2
= new String[] { "#FFFFFF", "#AA0000", "#AA0000", "#AA0000", "#FFFFFF" };
float[] gradientPercents2 = new float[] { 0f, 48f, 52f, 56f, 100f };
CssImage gradient1 = CssImage.createGradient( gradientColors1, gradientPercents1, true );
CssImage gradient2 = CssImage.createGradient( gradientColors2, gradientPercents2, true );
assertFalse( gradient1.hashCode() == gradient2.hashCode() );
}
@Test
public void testIsGradientFalseForNone() {
CssImage nonImage = CssImage.NONE;
assertFalse( nonImage.isGradient() );
}
@Test
public void testGetResourceName() {
CssImage image = CssImage.NONE;
assertNull( image.getResourcePath( applicationContext ) );
image = CssImage.valueOf( Fixture.IMAGE_50x100, RESOURCE_LOADER );
assertEquals( "themes/images/ba873d77.png", image.getResourcePath( applicationContext ) );
}
@Test
public void testCreateSWTImageFromNone() throws IOException {
CssImage image = CssImage.NONE;
try {
CssImage.createSwtImage( image );
fail();
} catch( IllegalArgumentException e ) {
// expected
}
}
@Test
public void testCreateSWTImageFromGradient() throws IOException {
String[] gradientColors = new String[] { "#FF0000", "#00FF00", "#0000FF" };
float[] gradientPercents = new float[] { 0f, 50f, 100f };
CssImage gradient = CssImage.createGradient( gradientColors, gradientPercents, true );
try {
CssImage.createSwtImage( gradient );
fail();
} catch( IllegalArgumentException e ) {
// expected
}
}
@Test
public void testCreateSWTImage() throws IOException {
Display display = new Display();
CssImage image = CssImage.valueOf( Fixture.IMAGE_50x100, RESOURCE_LOADER );
Image swtImage = CssImage.createSwtImage( image );
assertNotNull( swtImage );
assertSame( display, swtImage.getDevice() );
}
@Test
public void testGetResourcePath() {
CssImage image = CssImage.valueOf( Fixture.IMAGE_50x100, RESOURCE_LOADER );
assertTrue( image.getResourcePath( applicationContext ).startsWith( "themes/images/" ) );
}
@Test
public void testResourcePathsDiffer() {
CssImage image1 = CssImage.valueOf( Fixture.IMAGE_50x100, RESOURCE_LOADER );
CssImage image2 = CssImage.valueOf( Fixture.IMAGE_100x50, RESOURCE_LOADER );
String path1 = image1.getResourcePath( applicationContext );
String path2 = image2.getResourcePath( applicationContext );
assertFalse( path1.equals( path2 ) );
}
@Test
public void testGetResourcePathWithNone() {
assertNull( CssImage.NONE.getResourcePath( applicationContext ) );
}
@Test
public void testGetResourcePathWithGradient() {
assertNull( createGradient().getResourcePath( applicationContext ) );
}
@Test
public void testGetResourceAsStream() throws IOException {
CssImage image = CssImage.valueOf( Fixture.IMAGE_50x100, RESOURCE_LOADER );
InputStream inputStream = image.getResourceAsStream();
assertTrue( inputStream.available() > 0 );
inputStream.close();
}
@Test
public void testGetResourceAsStreamWithNone() throws IOException {
assertNull( CssImage.NONE.getResourceAsStream() );
}
@Test
public void testGetResourceAsStreamWithGradient() throws IOException {
assertNull( createGradient().getResourceAsStream() );
}
private static CssImage createGradient() {
String[] gradientColors = new String[] { "#FF0000", "#0000FF" };
float[] gradientPercents = new float[] { 0f, 100f };
return CssImage.createGradient( gradientColors, gradientPercents, false );
}
}