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.VerifyListener
 *
 * @see org.eclipse.swt.events.VerifyListener
 */
public class Test_org_eclipse_swt_events_VerifyListener extends SwtTestCase {

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


protected void setUp() {
}

protected void tearDown() {
}

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

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