package org.eclipse.swt.tests.junit;

/*
 * (c) Copyright IBM Corp. 2000, 2001.
 * All Rights Reserved
 */

import org.eclipse.swt.graphics.*;
import junit.framework.*;
import junit.textui.*;

/**
 * Automated Test Suite for class org.eclipse.swt.graphics.ImageLoaderListener
 *
 * @see org.eclipse.swt.graphics.ImageLoaderListener
 */
public class Test_org_eclipse_swt_graphics_ImageLoaderListener extends SwtTestCase {

public Test_org_eclipse_swt_graphics_ImageLoaderListener(String name) {
	super(name);
}


protected void setUp() {
}

protected void tearDown() {
}

public void test_imageDataLoadedLorg_eclipse_swt_graphics_ImageLoaderEvent() {
	warnUnimpl("Test test_imageDataLoadedLorg_eclipse_swt_graphics_ImageLoaderEvent not written");
}

public static java.util.Vector methodNames() {
	java.util.Vector methodNames = new java.util.Vector();
	methodNames.addElement("test_imageDataLoadedLorg_eclipse_swt_graphics_ImageLoaderEvent");
	return methodNames;
}
protected void runTest() throws Throwable {
	if (getName().equals("test_imageDataLoadedLorg_eclipse_swt_graphics_ImageLoaderEvent")) test_imageDataLoadedLorg_eclipse_swt_graphics_ImageLoaderEvent();
}
}
