package org.eclipse.swt.tests.junit;

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

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

/**
 * Automated Test Suite for class org.eclipse.swt.events.ArmListener
 *
 * @see org.eclipse.swt.events.ArmListener
 */
public class Test_org_eclipse_swt_events_ArmListener extends SwtTestCase {

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


protected void setUp() {
}

protected void tearDown() {
}

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

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