// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.actions;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.swing.JPanel;
import org.junit.Rule;
import org.junit.Test;
import org.openstreetmap.josm.actions.ExpertToggleAction.ExpertModeChangeListener;
import org.openstreetmap.josm.testutils.JOSMTestRules;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* Test {@link ExpertToggleAction}
* @author Michael Zangl
* @since 11224
*/
public class ExpertToggleActionTest {
/**
* We need prefs to store expert mode state.
*/
@Rule
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public JOSMTestRules test = new JOSMTestRules().preferences().platform();
/**
* Test {@link ExpertToggleAction#addVisibilitySwitcher(java.awt.Component)}
* and {@link ExpertToggleAction#removeVisibilitySwitcher(java.awt.Component)}
*/
@Test
public void testVisibilitySwitcher() {
ExpertToggleAction.getInstance().setExpert(false);
JPanel c = new JPanel();
ExpertToggleAction.addVisibilitySwitcher(c);
assertFalse(c.isVisible());
ExpertToggleAction.getInstance().setExpert(true);
assertTrue(c.isVisible());
ExpertToggleAction.removeVisibilitySwitcher(c);
ExpertToggleAction.getInstance().setExpert(false);
assertTrue(c.isVisible());
// null should not be a problem
ExpertToggleAction.addVisibilitySwitcher(null);
ExpertToggleAction.removeVisibilitySwitcher(null);
}
/**
* Test {@link ExpertToggleAction#addExpertModeChangeListener(ExpertModeChangeListener)}
* and {@link ExpertToggleAction#removeExpertModeChangeListener(ExpertModeChangeListener)}
*/
@Test
public void testExpertModeListener() {
AtomicBoolean value = new AtomicBoolean(false);
ExpertToggleAction.getInstance().setExpert(true);
ExpertModeChangeListener listener = value::set;
ExpertToggleAction.addExpertModeChangeListener(listener);
assertFalse(value.get());
ExpertToggleAction.getInstance().setExpert(false);
ExpertToggleAction.getInstance().setExpert(true);
assertTrue(value.get());
ExpertToggleAction.getInstance().setExpert(false);
assertFalse(value.get());
ExpertToggleAction.removeExpertModeChangeListener(listener);
ExpertToggleAction.getInstance().setExpert(true);
assertFalse(value.get());
ExpertToggleAction.addExpertModeChangeListener(listener, true);
assertTrue(value.get());
// null should not be a problem
ExpertToggleAction.addExpertModeChangeListener(null);
ExpertToggleAction.removeExpertModeChangeListener(null);
}
}