package org.limewire.ui;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicReference;
import javax.swing.SwingUtilities;
import junit.framework.Test;
import org.limewire.gnutella.tests.LimeTestUtils;
import org.limewire.inject.GuiceUtils;
import org.limewire.inspection.InspectionException;
import org.limewire.inspection.InspectionRequirement;
import org.limewire.inspection.InspectionTool;
import org.limewire.inspection.Inspector;
import org.limewire.ui.swing.AllLimeWireModules__DO_NOT_USE;
import org.limewire.util.BaseTestCase;
import org.limewire.util.OSUtils;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class AnnotationsCheckTest extends BaseTestCase {
public AnnotationsCheckTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(AnnotationsCheckTest.class);
}
public void testAnnotations() throws Exception {
final List<File> buildFolders = LimeTestUtils.getBuildFolders(getClass());
final Map<String, String> results = new ConcurrentHashMap<String, String>();
final AtomicReference<Injector> injectorRef = new AtomicReference<Injector>();
// This is explicitly using the DoNotUse module because that's what the build uses.
// (do it in the Swing thread to account for UI injectables that need the Swing thread)
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
Injector injector = Guice.createInjector(new AllLimeWireModules__DO_NOT_USE());
GuiceUtils.loadEagerSingletons(injector);
injectorRef.set(injector);
for(File path : buildFolders) {
results.putAll(InspectionTool.generateMappings(path, injectorRef.get(), new String[0]));
}
}
});
assertFalse(results.isEmpty());
assertGreaterThan(100, results.size()); // make sure we got some good # of inspections
// and run through them all and make sure they work!
Inspector inspector = injectorRef.get().getInstance(Inspector.class);
for(String key : results.keySet()) {
try {
inspector.inspect(results.get(key), true);
} catch(InspectionException ie) {
boolean validFailure = false;
if(OSUtils.isLinux()) {
validFailure = ie.getRequirements().size() > 0 && !ie.getRequirements().contains(InspectionRequirement.OS_LINUX);
} else if(OSUtils.isMacOSX()) {
validFailure = ie.getRequirements().size() > 0 && !ie.getRequirements().contains(InspectionRequirement.OS_OSX);
} else if(OSUtils.isWindows()) {
validFailure = ie.getRequirements().size() > 0 && !ie.getRequirements().contains(InspectionRequirement.OS_WINDOWS);
}
if(!validFailure) {
fail("failed on key: " + key + ", value: " + results.get(key), ie);
}
}
}
}
}