package uk.org.squirm3.swing.action; import java.awt.event.ActionEvent; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Properties; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.KeyStroke; import org.junit.Test; import org.springframework.context.MessageSource; import org.springframework.context.support.ConversionServiceFactoryBean; import org.springframework.context.support.StaticMessageSource; import org.springframework.core.convert.ConversionService; import uk.org.squirm3.springframework.converter.StringToIconConverter; import uk.org.squirm3.springframework.converter.StringToKeyStrokeConverter; import com.google.common.collect.Sets; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; public class ActionConfigurerIntegrationTest { private static final String IDENTIFIER = "myid"; private final Properties properties = new Properties(); private final MessageSource messageSource = createMessageSource(); private final ConversionService conversionService = createConversionService(); private final ActionConfigurer actionConfigurer = ActionConfigurerFactory .createDefaultConfigurer(properties, messageSource, conversionService); @Test public void testActionSetting() { final Action action = new TestAction(); actionConfigurer.configure(action, IDENTIFIER); new JButton(action); } @Test public void shouldBeSupportedByAction() { final Action action = mock(Action.class); actionConfigurer.configure(action, IDENTIFIER); verifyActionSetting(action); } private StaticMessageSource createMessageSource() { final StaticMessageSource messageSource = new StaticMessageSource(); messageSource.addMessages(getMessages(), Locale.getDefault()); return messageSource; } @SuppressWarnings("unchecked") private ConversionService createConversionService() { final ConversionServiceFactoryBean conversionServiceFactoryBean = new ConversionServiceFactoryBean(); conversionServiceFactoryBean.setConverters(Sets.newHashSet( new StringToIconConverter(), new StringToKeyStrokeConverter())); conversionServiceFactoryBean.afterPropertiesSet(); final ConversionService conversionService = conversionServiceFactoryBean .getObject(); return conversionService; } private void verifyActionSetting(final Action action) { verify(action).putValue(eq(Action.ACCELERATOR_KEY), any(KeyStroke.class)); verify(action).putValue(Action.ACTION_COMMAND_KEY, "wecan"); verify(action).putValue(Action.DISPLAYED_MNEMONIC_INDEX_KEY, 42); verify(action).putValue(eq(Action.LARGE_ICON_KEY), any(Icon.class)); verify(action).putValue(Action.LONG_DESCRIPTION, "long description"); verify(action).putValue(Action.MNEMONIC_KEY, 51); verify(action).putValue(Action.NAME, "name"); verify(action).putValue(Action.SELECTED_KEY, true); verify(action).putValue(Action.SHORT_DESCRIPTION, "short description"); verify(action).putValue(eq(Action.SMALL_ICON), any(Icon.class)); verifyZeroInteractions(action); } private static Map<String, String> getMessages() { final Map<String, String> map = new HashMap<String, String>(); map.put("myid.action.accelerator", "alt shift X"); map.put("myid.action.command", "wecan"); map.put("myid.action.mnemoindex", "42"); map.put("myid.action.largeicon", "/graphics/reset.png"); map.put("myid.action.longtext", "long description"); map.put("myid.action.mnemonic", "51"); map.put("myid.action.name", "name"); map.put("myid.action.selected", "true"); map.put("myid.action.shorttext", "short description"); map.put("myid.action.smallicon", "/graphics/about.png"); return map; } private final class TestAction extends AbstractAction { private static final long serialVersionUID = 1L; @Override public void actionPerformed(final ActionEvent e) { // nothing } } }