/**************************************************************************
OmegaT - Computer Assisted Translation (CAT) tool
with fuzzy matching, translation memory, keyword search,
glossaries, and translation leveraging into updated projects.
Copyright (C) 2008 Alex Buloichik
Home page: http://www.omegat.org/
Support center: http://groups.yahoo.com/group/OmegaT/
This file is part of OmegaT.
OmegaT is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OmegaT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
package org.omegat.gui.main;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import org.junit.Test;
import org.omegat.core.TestCore;
/**
* @author Alex Buloichik
*/
public class MainWindowMenuTest extends TestCore {
/**
* Check MainWindow for all menu items action handlers exist.
*
* @throws Exception
*/
@Test
public void testMenuActions() throws Exception {
int count = 0;
Map<String, Method> existsMethods = new HashMap<String, Method>();
for (Method m : MainWindowMenuHandler.class.getDeclaredMethods()) {
if (Modifier.isPublic(m.getModifiers()) && !Modifier.isStatic(m.getModifiers())) {
Class<?>[] params = m.getParameterTypes();
if (params.length == 0) {
existsMethods.put(m.getName(), m);
}
// Include menu items that take a modifier key.
if (params.length == 1 && params[0] == Integer.TYPE) {
existsMethods.put(m.getName(), m);
}
}
}
for (Field f : MainWindowMenu.class.getDeclaredFields()) {
if (JMenuItem.class.isAssignableFrom(f.getType()) && f.getType() != JMenu.class) {
count++;
String actionMethodName = f.getName() + "ActionPerformed";
Method m;
try {
m = MainWindowMenuHandler.class.getMethod(actionMethodName);
} catch (NoSuchMethodException ignore) {
// See if the method accepts a modifier key argument.
m = MainWindowMenuHandler.class.getMethod(actionMethodName, Integer.TYPE);
}
assertNotNull("Action method not defined for " + f.getName(), m);
assertNotNull(existsMethods.remove(actionMethodName));
}
}
assertTrue("menu items not found", count > 30);
assertTrue("There is action handlers in MainWindow which doesn't used in menu: " + existsMethods.keySet(),
existsMethods.isEmpty());
}
}