/*******************************************************************************
 * Copyright (c) 2000, 2003 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.swt.tests.junit;

import junit.framework.*;
import junit.textui.*;

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

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

public static void main(String[] args) {
	TestRunner.run(suite());
}

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

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


public static Test suite() {
	TestSuite suite = new TestSuite();
	java.util.Vector<String> methodNames = methodNames();
	java.util.Enumeration<String> e = methodNames.elements();
	while (e.hasMoreElements()) {
		suite.addTest(new Test_org_eclipse_swt_events_MenuListener(e.nextElement()));
	}
	return suite;
}

public static java.util.Vector<String> methodNames() {
	java.util.Vector<String> methodNames = new java.util.Vector<String>();
	methodNames.addElement("test_menuHiddenLorg_eclipse_swt_events_MenuEvent");
	methodNames.addElement("test_menuShownLorg_eclipse_swt_events_MenuEvent");
	return methodNames;
}
@Override
protected void runTest() throws Throwable {
	if (getName().equals("test_menuHiddenLorg_eclipse_swt_events_MenuEvent")) test_menuHiddenLorg_eclipse_swt_events_MenuEvent();
	else if (getName().equals("test_menuShownLorg_eclipse_swt_events_MenuEvent")) test_menuShownLorg_eclipse_swt_events_MenuEvent();
}
}
