/*
* Created on 31.07.2006
*
*/
package org.jdesktop.swingx.plaf;
import java.util.logging.Logger;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import junit.framework.TestCase;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/**
* Testing LookAndFeelAddons properties/behaviour that might be effected
* in a sandbox. This here is the test without SecurityManager, the
* subclass actually installs a manager.
*/
@RunWith(JUnit4.class)
public class LookAndFeelAddonsSandboxTest extends TestCase {
@SuppressWarnings("unused")
private static final Logger LOG = Logger.getLogger(LookAndFeelAddonsSandboxTest.class
.getName());
/**
* Issue #1567-swingx: addon lookup doesn't work in security
* restricted contexts.
*
* Here we test that the addon is changed to match a newly
* set LAF (Nimbus),
* assuming that the ui is initially set to system.
*/
@Test
public void testMatchingAddon() throws Exception {
LookAndFeel old = UIManager.getLookAndFeel();
try {
assertTrue("sanity: addon is configured to update on LAF change",
LookAndFeelAddons.isTrackingLookAndFeelChanges());
setLookAndFeel("Nimbus");
LookAndFeelAddons addon = LookAndFeelAddons.getAddon();
assertTrue("addon must match Nimbus, but was: " + addon, addon.matches());
} finally {
UIManager.setLookAndFeel(old);
}
}
/**
* Issue #1567-swingx: addon lookup doesn't work in security
* restricted contexts.
*
* Here we test for systemLAF,
* assuming that the ui is set to system.
*/
@Test
public void testSystemAddon() {
LookAndFeelAddons addon = LookAndFeelAddons.getAddon();
assertTrue("addon must be system addon, but was: " + addon, addon.isSystemAddon());
}
/**
* Sets the default LAF to system.
*
*/
@BeforeClass
public static void install() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Fix issue #1578-swingx: remove dependency on core module.
*
* C&p'd from InteractiveTestCase: accessing that class here
* will break maven builds by introducing a cyclic dependency.
*
* @param nameSnippet
* @throws ClassNotFoundException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws UnsupportedLookAndFeelException
*/
public static void setLookAndFeel(final String nameSnippet)
throws ClassNotFoundException, InstantiationException,
IllegalAccessException, UnsupportedLookAndFeelException {
final String laf = getLookAndFeelClassName(nameSnippet);
if (laf != null) {
UIManager.setLookAndFeel(laf);
return;
}
throw new UnsupportedLookAndFeelException(
"no LAF installed with name snippet " + nameSnippet);
}
public static String getLookAndFeelClassName(final String nameSnippet) {
final UIManager.LookAndFeelInfo[] plafs = UIManager
.getInstalledLookAndFeels();
for (final UIManager.LookAndFeelInfo info : plafs) {
if (info.getName().contains(nameSnippet)) {
return info.getClassName();
}
}
return null;
}
}