blob: b357ee0f0e96e908a39b91c32b47a249153794ca [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.tests.propertysheet;
import java.util.ArrayList;
import java.util.Random;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.tests.SelectionProviderView;
import org.eclipse.ui.tests.harness.util.UITestCase;
import org.eclipse.ui.views.properties.ColorPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.TextPropertyDescriptor;
/**
* The class implements a test for the workbench's default
* property sheet page. It does this by firing a sequence of
* selection events. The property sheet view receives these events
* and displays the properties for the selected objects.
* We are able to test the property sheet code which displays
* properties and handles the transition to another set of
* properties.
*/
public class PropertySheetAuto extends UITestCase {
/**
* This car serves as a simple porperty source.
* The only interesting behavior it has is that if
* one of its properties has a "null" value then
* it does not include that property in its list
* of property descriptors.
*/
private class Car implements IPropertySource {
private int modelYear = 0;
private RGB color = null;
private String manufacturer = null;
private String model = null;
private double engineSize = 0.0;
// property ids
private final static String prefix = "org.eclipse.ui.tests.standardcomponents.propertysheetauto.";
private final static String MODEL_YEAR = prefix + "modelyear";
private final static String COLOR = prefix + "color";
private final static String MANUFACTURER = prefix + "manufacturer";
private final static String MODEL = prefix + "model";
private final static String ENGINE_SIZE = prefix + "enginesize";
private IPropertyDescriptor[] descriptors;
public Car(int carModelYear, RGB carColor, String carManufacturer,
String carModel, double carEngineSize) {
modelYear = carModelYear;
color = carColor;
manufacturer = carManufacturer;
model = carModel;
engineSize = carEngineSize;
createDescriptors();
}
/**
* Creates the property descriptors.
* If one of the properties has a "null" value then
* that property is not included in the list of
* property descriptors.
*/
private void createDescriptors() {
ArrayList list = new ArrayList(5);
if (modelYear != 0)
list.add(new TextPropertyDescriptor(MODEL_YEAR, "model year"));
if (color != null)
list.add(new ColorPropertyDescriptor(COLOR, "color"));
if (manufacturer != null)
list.add(new TextPropertyDescriptor(MANUFACTURER, "make"));
if (model != null)
list.add(new TextPropertyDescriptor(MODEL, "model"));
if (engineSize != 0.0)
list.add(new TextPropertyDescriptor(ENGINE_SIZE, "engine"));
descriptors = (IPropertyDescriptor[]) list
.toArray(new IPropertyDescriptor[list.size()]);
}
public Object getEditableValue() {
return this;
}
public IPropertyDescriptor[] getPropertyDescriptors() {
return descriptors;
}
public Object getPropertyValue(Object id) {
if (id.equals(MODEL_YEAR))
return Integer.toString(modelYear);
if (id.equals(COLOR))
return color;
if (id.equals(MANUFACTURER))
return manufacturer;
if (id.equals(MODEL))
return model;
if (id.equals(ENGINE_SIZE))
return Double.toString(engineSize);
return null;
}
public boolean isPropertySet(Object id) {
return false;
}
public void resetPropertyValue(Object id) {
return;
}
public void setPropertyValue(Object id, Object value) {
if (id.equals(MODEL_YEAR))
modelYear = new Integer((String) value).intValue();
if (id.equals(COLOR))
color = (RGB) value;
if (id.equals(MANUFACTURER))
manufacturer = (String) value;
if (id.equals(MODEL))
model = (String) value;
if (id.equals(ENGINE_SIZE))
engineSize = new Double((String) value).doubleValue();
}
public String toString() {
StringBuffer s = new StringBuffer();
s.append("<");
if (modelYear != 0) {
s.append(modelYear);
s.append(" ");
}
if (color != null) {
s.append(color);
s.append(" ");
}
if (manufacturer != null) {
s.append(manufacturer);
s.append(" ");
}
if (model != null) {
s.append(model);
s.append(" ");
}
if (engineSize != 0.0) {
s.append(engineSize);
s.append(" ");
}
s.append(">");
return s.toString();
}
}
private IWorkbenchPage activePage;
private IWorkbenchWindow workbenchWindow;
private SelectionProviderView selectionProviderView;
private Car[] cars;
private Random random = new Random();
private static final int NUMBER_OF_CARS = 10;
private static final int NUMBER_OF_SELECTIONS = 100;
private static final String[] makers = new String[] { "Ford", "GM",
"Chrysler", "BMW", "Toyota", "Nissan", "Honda", "Volvo" };
private static final String[] models = new String[] { "Thunderbird",
"Deville", "Viper", "320i", "Camry", "Ultima", "Prelude", "V70" };
public PropertySheetAuto(String name) {
super(name);
}
/**
* Creates a array of car objects
*/
private void createCars() {
cars = new Car[NUMBER_OF_CARS];
for (int i = 0; i < cars.length; i++) {
cars[i] = createCar();
}
}
/**
* Creates a car initialized with random values
*/
private Car createCar() {
int modelYear = 0;
RGB color = null;
String manufacturer = null;
String model = null;
double engineSize = 0.0;
// only set 25% of the properties
int FACTOR = 4;
if (random.nextInt(FACTOR) < FACTOR - 1)
modelYear = 1990 + random.nextInt(15);
if (random.nextInt(FACTOR) < FACTOR - 1)
color = new RGB(random.nextInt(256), random.nextInt(256), random
.nextInt(256));
if (random.nextInt(FACTOR) < FACTOR - 1)
manufacturer = makers[random.nextInt(makers.length)];
if (random.nextInt(FACTOR) < FACTOR - 1)
model = models[random.nextInt(models.length)];
if (random.nextInt(FACTOR) < FACTOR - 1)
engineSize = random.nextDouble() * 6;
return new Car(modelYear, color, manufacturer, model, engineSize);
}
protected void doSetUp() throws Exception {
super.doSetUp();
workbenchWindow = openTestWindow();
activePage = workbenchWindow.getActivePage();
}
protected IWorkbenchPart createTestPart(IWorkbenchPage page)
throws Throwable {
IViewPart view = page.showView("org.eclipse.ui.views.PropertySheet");
selectionProviderView = (SelectionProviderView) page
.showView(SelectionProviderView.ID);
return view;
}
/**
* Supply selection events with a random car selection
*/
public void testInput() throws Throwable {
createTestPart(activePage);
createCars();
for (int i = 0; i < NUMBER_OF_SELECTIONS; i++) {
// create the selection
int numberToSelect = random.nextInt(NUMBER_OF_CARS - 2);
ArrayList selection = new ArrayList(numberToSelect);
while (selection.size() < numberToSelect) {
int j = random.nextInt(NUMBER_OF_CARS);
if (!selection.contains(cars[j]))
selection.add(cars[j]);
}
StructuredSelection structuredSelection = new StructuredSelection(
selection);
// fire the selection
selectionProviderView.setSelection(structuredSelection);
while (Display.getCurrent().readAndDispatch())
;
}
}
}