core/com.nokia.carbide.cpp.ui.tests/src/com/nokia/carbide/cpp/ui/tests/TestMaskedImageModel.java
author timkelly
Fri, 27 Mar 2009 10:47:09 -0500
changeset 17 71c0485f97c2
parent 2 d760517a8095
permissions -rw-r--r--
new image for CDK
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
cawthron
parents:
diff changeset
     1
/*
cawthron
parents:
diff changeset
     2
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
cawthron
parents:
diff changeset
     3
* All rights reserved.
cawthron
parents:
diff changeset
     4
* This component and the accompanying materials are made available
cawthron
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
cawthron
parents:
diff changeset
     6
* which accompanies this distribution, and is available
cawthron
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
cawthron
parents:
diff changeset
     8
*
cawthron
parents:
diff changeset
     9
* Initial Contributors:
cawthron
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
cawthron
parents:
diff changeset
    11
*
cawthron
parents:
diff changeset
    12
* Contributors:
cawthron
parents:
diff changeset
    13
*
cawthron
parents:
diff changeset
    14
* Description: 
cawthron
parents:
diff changeset
    15
*
cawthron
parents:
diff changeset
    16
*/
cawthron
parents:
diff changeset
    17
cawthron
parents:
diff changeset
    18
package com.nokia.carbide.cpp.ui.tests;
cawthron
parents:
diff changeset
    19
cawthron
parents:
diff changeset
    20
import com.nokia.carbide.cpp.ui.images.*;
cawthron
parents:
diff changeset
    21
cawthron
parents:
diff changeset
    22
import org.eclipse.core.runtime.*;
cawthron
parents:
diff changeset
    23
import org.eclipse.core.runtime.Path;
cawthron
parents:
diff changeset
    24
import org.eclipse.jface.resource.ImageDescriptor;
cawthron
parents:
diff changeset
    25
import org.eclipse.swt.graphics.*;
cawthron
parents:
diff changeset
    26
cawthron
parents:
diff changeset
    27
/**
cawthron
parents:
diff changeset
    28
 * Test basic IMaskedFileImageModel variants and behavior
cawthron
parents:
diff changeset
    29
 *
cawthron
parents:
diff changeset
    30
 */
cawthron
parents:
diff changeset
    31
public class TestMaskedImageModel extends BaseTest {
cawthron
parents:
diff changeset
    32
cawthron
parents:
diff changeset
    33
	private IImageLoader fileImageLoader;
cawthron
parents:
diff changeset
    34
	private IPath projectPath;
cawthron
parents:
diff changeset
    35
	private IPath imageDirPath;
cawthron
parents:
diff changeset
    36
cawthron
parents:
diff changeset
    37
	/* (non-Javadoc)
cawthron
parents:
diff changeset
    38
	 * @see junit.framework.TestCase#setUp()
cawthron
parents:
diff changeset
    39
	 */
cawthron
parents:
diff changeset
    40
	protected void setUp() throws Exception {
cawthron
parents:
diff changeset
    41
		super.setUp();
cawthron
parents:
diff changeset
    42
cawthron
parents:
diff changeset
    43
		fileImageLoader = ImageModelFactory.createImageLoader(false);
cawthron
parents:
diff changeset
    44
		projectPath = getProjectPath();
cawthron
parents:
diff changeset
    45
		imageDirPath = projectPath.append("data/images");
cawthron
parents:
diff changeset
    46
	}
cawthron
parents:
diff changeset
    47
	
cawthron
parents:
diff changeset
    48
	/* (non-Javadoc)
cawthron
parents:
diff changeset
    49
	 * @see junit.framework.TestCase#tearDown()
cawthron
parents:
diff changeset
    50
	 */
cawthron
parents:
diff changeset
    51
	@Override
cawthron
parents:
diff changeset
    52
	protected void tearDown() throws Exception {
cawthron
parents:
diff changeset
    53
		fileImageLoader.dispose();
cawthron
parents:
diff changeset
    54
		super.tearDown();
cawthron
parents:
diff changeset
    55
	}
cawthron
parents:
diff changeset
    56
cawthron
parents:
diff changeset
    57
	public void testWithMask() throws CoreException {
cawthron
parents:
diff changeset
    58
		IImageContainerModel container = ImageModelFactory.createNullImageContainerModel(
cawthron
parents:
diff changeset
    59
				imageDirPath, fileImageLoader);
cawthron
parents:
diff changeset
    60
		
cawthron
parents:
diff changeset
    61
		IMaskedFileImageModel model = ImageModelFactory.createMaskedFileImageModel(
cawthron
parents:
diff changeset
    62
				container,
cawthron
parents:
diff changeset
    63
				new Path("list_icon.bmp"), new Path("list_icon_mask.bmp"),
cawthron
parents:
diff changeset
    64
				IMaskedFileImageModel.MaskCompositionMethod.TILING);
cawthron
parents:
diff changeset
    65
		assertNotNull(model);
cawthron
parents:
diff changeset
    66
		assertEquals(IMaskedFileImageModel.MaskCompositionMethod.TILING, model.getMaskCompositionMethod());
cawthron
parents:
diff changeset
    67
		
cawthron
parents:
diff changeset
    68
		ImageDescriptor descriptor;
cawthron
parents:
diff changeset
    69
		descriptor = model.getImageDescriptor(null);
cawthron
parents:
diff changeset
    70
		assertNotNull(descriptor);
cawthron
parents:
diff changeset
    71
		ImageDescriptor descriptor2 = model.getImageDescriptor(null);
cawthron
parents:
diff changeset
    72
		
cawthron
parents:
diff changeset
    73
		// check caching
cawthron
parents:
diff changeset
    74
		ImageData data = descriptor.getImageData();
cawthron
parents:
diff changeset
    75
		assertNotNull(data);
cawthron
parents:
diff changeset
    76
		ImageData data2 = descriptor2.getImageData();
cawthron
parents:
diff changeset
    77
		assertNotNull(data2);
cawthron
parents:
diff changeset
    78
		assertSame(data, data2);
cawthron
parents:
diff changeset
    79
		
cawthron
parents:
diff changeset
    80
		// make sure the expected pixels are transparent in the expected way
cawthron
parents:
diff changeset
    81
		checkImage(data, 42, 29,
cawthron
parents:
diff changeset
    82
				new Pixel[] {
cawthron
parents:
diff changeset
    83
				new Pixel(0, 0, transparent),
cawthron
parents:
diff changeset
    84
				new Pixel(15, 14, new RGB(255, 255, 102))
cawthron
parents:
diff changeset
    85
				});
cawthron
parents:
diff changeset
    86
		
cawthron
parents:
diff changeset
    87
		// check no caching
cawthron
parents:
diff changeset
    88
		descriptor = model.getImageDescriptor(new Point(42*2, 29*2));
cawthron
parents:
diff changeset
    89
		assertNotNull(descriptor);
cawthron
parents:
diff changeset
    90
		data = descriptor.getImageData();
cawthron
parents:
diff changeset
    91
		descriptor2 = model.getImageDescriptor(new Point(42*2, 29*2));
cawthron
parents:
diff changeset
    92
		data2 = descriptor2.getImageData();
cawthron
parents:
diff changeset
    93
		assertNotSame(data, data2);
cawthron
parents:
diff changeset
    94
		
cawthron
parents:
diff changeset
    95
		checkImage(data, 42*2, 29*2,
cawthron
parents:
diff changeset
    96
				new Pixel[] {
cawthron
parents:
diff changeset
    97
				new Pixel(0, 0, transparent),
cawthron
parents:
diff changeset
    98
				new Pixel(15*2, 14*2, new RGB(255, 255, 102))
cawthron
parents:
diff changeset
    99
				});
cawthron
parents:
diff changeset
   100
		
cawthron
parents:
diff changeset
   101
	}
cawthron
parents:
diff changeset
   102
cawthron
parents:
diff changeset
   103
	public void testNoMask() throws CoreException {
cawthron
parents:
diff changeset
   104
		IImageContainerModel container = ImageModelFactory.createNullImageContainerModel(imageDirPath, fileImageLoader);
cawthron
parents:
diff changeset
   105
		
cawthron
parents:
diff changeset
   106
		IMaskedFileImageModel model = ImageModelFactory.createMaskedFileImageModel(
cawthron
parents:
diff changeset
   107
				container,
cawthron
parents:
diff changeset
   108
				new Path("list_icon.bmp"), null,
cawthron
parents:
diff changeset
   109
				IMaskedFileImageModel.MaskCompositionMethod.TILING);
cawthron
parents:
diff changeset
   110
		assertNotNull(model);
cawthron
parents:
diff changeset
   111
		assertEquals(IMaskedFileImageModel.MaskCompositionMethod.TILING, model.getMaskCompositionMethod());
cawthron
parents:
diff changeset
   112
		
cawthron
parents:
diff changeset
   113
		ImageDescriptor descriptor;
cawthron
parents:
diff changeset
   114
		descriptor = model.getImageDescriptor(null);
cawthron
parents:
diff changeset
   115
		assertNotNull(descriptor);
cawthron
parents:
diff changeset
   116
		ImageDescriptor descriptor2 = model.getImageDescriptor(null);
cawthron
parents:
diff changeset
   117
		
cawthron
parents:
diff changeset
   118
		// check caching
cawthron
parents:
diff changeset
   119
		ImageData data = descriptor.getImageData();
cawthron
parents:
diff changeset
   120
		assertNotNull(data);
cawthron
parents:
diff changeset
   121
		ImageData data2 = descriptor2.getImageData();
cawthron
parents:
diff changeset
   122
		assertNotNull(data2);
cawthron
parents:
diff changeset
   123
		assertSame(data, data2);
cawthron
parents:
diff changeset
   124
		
cawthron
parents:
diff changeset
   125
		// make sure the expected pixels are not transparent
cawthron
parents:
diff changeset
   126
		checkImage(data, 42, 29,
cawthron
parents:
diff changeset
   127
				new Pixel[] {
cawthron
parents:
diff changeset
   128
				new Pixel(0, 0, new RGB(221, 0, 221)),
cawthron
parents:
diff changeset
   129
				new Pixel(15, 14, new RGB(255, 255, 102))
cawthron
parents:
diff changeset
   130
				});
cawthron
parents:
diff changeset
   131
cawthron
parents:
diff changeset
   132
		// check no caching
cawthron
parents:
diff changeset
   133
		descriptor = model.getImageDescriptor(new Point(42*2, 29*2));
cawthron
parents:
diff changeset
   134
		assertNotNull(descriptor);
cawthron
parents:
diff changeset
   135
		data = descriptor.getImageData();
cawthron
parents:
diff changeset
   136
		descriptor2 = model.getImageDescriptor(new Point(42*2, 29*2));
cawthron
parents:
diff changeset
   137
		data2 = descriptor2.getImageData();
cawthron
parents:
diff changeset
   138
		assertNotSame(data, data2);
cawthron
parents:
diff changeset
   139
		
cawthron
parents:
diff changeset
   140
		checkImage(data, 42*2, 29*2,
cawthron
parents:
diff changeset
   141
				new Pixel[] {
cawthron
parents:
diff changeset
   142
				new Pixel(0, 0, new RGB(221, 0, 221)),
cawthron
parents:
diff changeset
   143
				new Pixel(15*2, 14*2, new RGB(255, 255, 102))
cawthron
parents:
diff changeset
   144
				});
cawthron
parents:
diff changeset
   145
		
cawthron
parents:
diff changeset
   146
	}
cawthron
parents:
diff changeset
   147
	
cawthron
parents:
diff changeset
   148
	public void testTiledMask1() throws CoreException {
cawthron
parents:
diff changeset
   149
		IImageContainerModel container = ImageModelFactory.createNullImageContainerModel(imageDirPath, fileImageLoader);
cawthron
parents:
diff changeset
   150
		
cawthron
parents:
diff changeset
   151
		IMaskedFileImageModel model = ImageModelFactory.createMaskedFileImageModel(
cawthron
parents:
diff changeset
   152
				container,
cawthron
parents:
diff changeset
   153
				new Path("list_icon.bmp"), new Path("mark_icon_mask.bmp"),
cawthron
parents:
diff changeset
   154
				IMaskedFileImageModel.MaskCompositionMethod.TILING);
cawthron
parents:
diff changeset
   155
		assertNotNull(model);
cawthron
parents:
diff changeset
   156
		assertEquals(IMaskedFileImageModel.MaskCompositionMethod.TILING, model.getMaskCompositionMethod());
cawthron
parents:
diff changeset
   157
		
cawthron
parents:
diff changeset
   158
		ImageDescriptor descriptor;
cawthron
parents:
diff changeset
   159
		descriptor = model.getImageDescriptor(null);
cawthron
parents:
diff changeset
   160
		assertNotNull(descriptor);
cawthron
parents:
diff changeset
   161
		ImageDescriptor descriptor2 = model.getImageDescriptor(null);
cawthron
parents:
diff changeset
   162
		
cawthron
parents:
diff changeset
   163
		// check caching
cawthron
parents:
diff changeset
   164
		ImageData data = descriptor.getImageData();
cawthron
parents:
diff changeset
   165
		assertNotNull(data);
cawthron
parents:
diff changeset
   166
		ImageData data2 = descriptor2.getImageData();
cawthron
parents:
diff changeset
   167
		assertNotNull(data2);
cawthron
parents:
diff changeset
   168
		assertSame(data, data2);
cawthron
parents:
diff changeset
   169
cawthron
parents:
diff changeset
   170
		// check transparency... the checkmark is tiled 1.5 times horizontally, about,
cawthron
parents:
diff changeset
   171
		// and slightly more than once vertically
cawthron
parents:
diff changeset
   172
		checkImage(data, 42, 29,
cawthron
parents:
diff changeset
   173
				new Pixel[] {
cawthron
parents:
diff changeset
   174
				new Pixel(0, 0, transparent),
cawthron
parents:
diff changeset
   175
				new Pixel(8, 8, transparent),
cawthron
parents:
diff changeset
   176
				new Pixel(19, 10, new RGB(221, 0, 221)),
cawthron
parents:
diff changeset
   177
				new Pixel(15, 14, new RGB(255, 255, 102)),
cawthron
parents:
diff changeset
   178
				new Pixel(31, 14, new RGB(255, 204, 0)),
cawthron
parents:
diff changeset
   179
				new Pixel(29, 23, transparent),
cawthron
parents:
diff changeset
   180
				new Pixel(41, 28, transparent),
cawthron
parents:
diff changeset
   181
				});
cawthron
parents:
diff changeset
   182
cawthron
parents:
diff changeset
   183
		// scaled
cawthron
parents:
diff changeset
   184
		descriptor = model.getImageDescriptor(new Point(42*2, 29*2));
cawthron
parents:
diff changeset
   185
		assertNotNull(descriptor);
cawthron
parents:
diff changeset
   186
		
cawthron
parents:
diff changeset
   187
		data = descriptor.getImageData();
cawthron
parents:
diff changeset
   188
		assertNotNull(data);
cawthron
parents:
diff changeset
   189
		
cawthron
parents:
diff changeset
   190
		// check transparency... both the image and mask should be scaled
cawthron
parents:
diff changeset
   191
		checkImage(data, 42*2, 29*2,
cawthron
parents:
diff changeset
   192
				new Pixel[] {
cawthron
parents:
diff changeset
   193
				new Pixel(0, 0, transparent),
cawthron
parents:
diff changeset
   194
				new Pixel(8*2, 8*2, transparent),
cawthron
parents:
diff changeset
   195
				new Pixel(19*2, 10*2, new RGB(221, 0, 221)),
cawthron
parents:
diff changeset
   196
				new Pixel(15*2, 14*2, new RGB(255, 255, 102)),
cawthron
parents:
diff changeset
   197
				new Pixel(31*2, 14*2, new RGB(255, 204, 0)),
cawthron
parents:
diff changeset
   198
				new Pixel(29*2, 23*2, transparent),
cawthron
parents:
diff changeset
   199
				new Pixel(41*2, 28*2, transparent),
cawthron
parents:
diff changeset
   200
				});
cawthron
parents:
diff changeset
   201
cawthron
parents:
diff changeset
   202
	}
cawthron
parents:
diff changeset
   203
cawthron
parents:
diff changeset
   204
	public void testTiledMask2() throws CoreException {
cawthron
parents:
diff changeset
   205
		IImageContainerModel container = ImageModelFactory.createNullImageContainerModel(imageDirPath, fileImageLoader);
cawthron
parents:
diff changeset
   206
		
cawthron
parents:
diff changeset
   207
		IMaskedFileImageModel model = ImageModelFactory.createMaskedFileImageModel(
cawthron
parents:
diff changeset
   208
				container,
cawthron
parents:
diff changeset
   209
				new Path("four_dots.bmp"), new Path("mark_icon_mask.bmp"),
cawthron
parents:
diff changeset
   210
				IMaskedFileImageModel.MaskCompositionMethod.TILING);
cawthron
parents:
diff changeset
   211
		assertNotNull(model);
cawthron
parents:
diff changeset
   212
		assertEquals(IMaskedFileImageModel.MaskCompositionMethod.TILING, model.getMaskCompositionMethod());
cawthron
parents:
diff changeset
   213
		
cawthron
parents:
diff changeset
   214
		ImageDescriptor descriptor;
cawthron
parents:
diff changeset
   215
		descriptor = model.getImageDescriptor(null);
cawthron
parents:
diff changeset
   216
		assertNotNull(descriptor);
cawthron
parents:
diff changeset
   217
		ImageDescriptor descriptor2 = model.getImageDescriptor(null);
cawthron
parents:
diff changeset
   218
		
cawthron
parents:
diff changeset
   219
		// check caching
cawthron
parents:
diff changeset
   220
		ImageData data = descriptor.getImageData();
cawthron
parents:
diff changeset
   221
		assertNotNull(data);
cawthron
parents:
diff changeset
   222
		ImageData data2 = descriptor2.getImageData();
cawthron
parents:
diff changeset
   223
		assertNotNull(data2);
cawthron
parents:
diff changeset
   224
		assertSame(data, data2);
cawthron
parents:
diff changeset
   225
cawthron
parents:
diff changeset
   226
		// check transparency... the checkmark is much larger so the whole thing
cawthron
parents:
diff changeset
   227
		// becomes invisible
cawthron
parents:
diff changeset
   228
		checkImage(data, 2, 2,
cawthron
parents:
diff changeset
   229
				new Pixel[] {
cawthron
parents:
diff changeset
   230
				new Pixel(0, 0, transparent),
cawthron
parents:
diff changeset
   231
				new Pixel(1, 1, transparent),
cawthron
parents:
diff changeset
   232
				new Pixel(1, 0, transparent),
cawthron
parents:
diff changeset
   233
				new Pixel(0, 1, transparent),
cawthron
parents:
diff changeset
   234
				});
cawthron
parents:
diff changeset
   235
		
cawthron
parents:
diff changeset
   236
		// scaled
cawthron
parents:
diff changeset
   237
		descriptor = model.getImageDescriptor(new Point(2*24, 2*24));
cawthron
parents:
diff changeset
   238
		assertNotNull(descriptor);
cawthron
parents:
diff changeset
   239
		
cawthron
parents:
diff changeset
   240
		data = descriptor.getImageData();
cawthron
parents:
diff changeset
   241
		assertNotNull(data);
cawthron
parents:
diff changeset
   242
		
cawthron
parents:
diff changeset
   243
		// check transparency... both the image and mask should be scaled, and 
cawthron
parents:
diff changeset
   244
		// the result is still fully invisible
cawthron
parents:
diff changeset
   245
		checkImage(data, 2*24, 2*24,
cawthron
parents:
diff changeset
   246
				new Pixel[] {
cawthron
parents:
diff changeset
   247
				new Pixel(0, 0, transparent),
cawthron
parents:
diff changeset
   248
				new Pixel(23, 23, transparent),
cawthron
parents:
diff changeset
   249
				new Pixel(23, 0, transparent),
cawthron
parents:
diff changeset
   250
				new Pixel(0, 23, transparent),
cawthron
parents:
diff changeset
   251
				new Pixel(12, 12, transparent),
cawthron
parents:
diff changeset
   252
				});
cawthron
parents:
diff changeset
   253
	}
cawthron
parents:
diff changeset
   254
	
cawthron
parents:
diff changeset
   255
	public void testScaledMask1() throws CoreException {
cawthron
parents:
diff changeset
   256
		IImageContainerModel container = ImageModelFactory.createNullImageContainerModel(imageDirPath, fileImageLoader);
cawthron
parents:
diff changeset
   257
		
cawthron
parents:
diff changeset
   258
		IMaskedFileImageModel model = ImageModelFactory.createMaskedFileImageModel(
cawthron
parents:
diff changeset
   259
				container,
cawthron
parents:
diff changeset
   260
				new Path("four_dots.bmp"), new Path("mark_icon_mask.bmp"),
cawthron
parents:
diff changeset
   261
				IMaskedFileImageModel.MaskCompositionMethod.SCALING);
cawthron
parents:
diff changeset
   262
		assertNotNull(model);
cawthron
parents:
diff changeset
   263
		assertEquals(IMaskedFileImageModel.MaskCompositionMethod.SCALING, model.getMaskCompositionMethod());
cawthron
parents:
diff changeset
   264
		
cawthron
parents:
diff changeset
   265
		ImageDescriptor descriptor;
cawthron
parents:
diff changeset
   266
		descriptor = model.getImageDescriptor(new Point(26, 26));
cawthron
parents:
diff changeset
   267
		assertNotNull(descriptor);
cawthron
parents:
diff changeset
   268
		
cawthron
parents:
diff changeset
   269
		ImageData data = descriptor.getImageData();
cawthron
parents:
diff changeset
   270
		assertNotNull(data);
cawthron
parents:
diff changeset
   271
cawthron
parents:
diff changeset
   272
		// check transparency... the checkmark is much larger, but scaled up to fit
cawthron
parents:
diff changeset
   273
		checkImage(data, 26, 26,
cawthron
parents:
diff changeset
   274
				new Pixel[] {
cawthron
parents:
diff changeset
   275
				new Pixel(0, 0, transparent),
cawthron
parents:
diff changeset
   276
				new Pixel(25, 25, transparent),
cawthron
parents:
diff changeset
   277
				new Pixel(18, 11, new RGB(0, 255, 0)), //upper-right
cawthron
parents:
diff changeset
   278
				new Pixel(6, 18, new RGB(0, 0, 255)), //lower-left
cawthron
parents:
diff changeset
   279
				new Pixel(14, 16, new RGB(255, 255, 0)), //lower-right
cawthron
parents:
diff changeset
   280
				});
cawthron
parents:
diff changeset
   281
		
cawthron
parents:
diff changeset
   282
	}
cawthron
parents:
diff changeset
   283
cawthron
parents:
diff changeset
   284
}