--- /dev/null
+package org.tizen.dynamicanalyzer.handlers;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.junit.Assert.assertThat;
+import static org.powermock.api.mockito.PowerMockito.spy;
+import static org.powermock.api.mockito.PowerMockito.verifyPrivate;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.tizen.dynamicanalyzer.common.Global;
+import org.tizen.dynamicanalyzer.common.UIMode;
+
+@RunWith(PowerMockRunner.class)
+public class UIActionHolderTest {
+
+ /**
+ * Test createUIAction() private method is invoked when getUIAction() is
+ * called.
+ */
+ @Test
+ @PrepareForTest({ UIActionHolder.class })
+ public void getUIAction_createUIActionInstance() throws Exception {
+ spy(UIActionHolder.class);
+ // Invoke getUIAction and check that createUIAction was called once
+ UIActionHolder.getUIAction();
+ verifyPrivate(UIActionHolder.class).invoke("createUIAction");
+ }
+
+ /**
+ * Test createUIAction() private method is invoked when getUIAction() is
+ * called for the first time only.
+ */
+ @Test
+ @PrepareForTest({ UIActionHolder.class })
+ public void getUIAction_createSingleUIActionInstance()
+ throws Exception {
+ // Invoke getUIAction and check that createUIAction was called once
+ getUIAction_createUIActionInstance();
+ // Invoke getUIAction again
+ UIActionHolder.getUIAction();
+ // Check that createUIAction was still invoked exactly one time
+ verifyPrivate(UIActionHolder.class).invoke("createUIAction");
+ }
+
+ /**
+ * Test that getUIAction() returns {@link GUIAction} instance when GUI mode
+ * is set as current UI mode in {@link Global}
+ */
+ @Test
+ @PrepareForTest({ UIActionHolder.class })
+ public void getUIAction_inGUIMode_retGUIAction() {
+ Global.setCurrentUIMode(UIMode.GUI);
+ UIAction curUIAction = UIActionHolder.getUIAction();
+ assertThat(curUIAction, instanceOf(GUIAction.class));
+ }
+
+ /**
+ * Test that getUIAction() returns {@link CLIAction} instance when CLI mode
+ * is set as current UI mode in {@link Global}
+ */
+ @Test
+ @PrepareForTest({ UIActionHolder.class })
+ public void getUIAction_inCLIMode_retCLIAction() {
+ Global.setCurrentUIMode(UIMode.CLI);
+ UIAction curUIAction = UIActionHolder.getUIAction();
+ assertThat(curUIAction, instanceOf(CLIAction.class));
+ }
+
+ /**
+ * Test that getUIAction() returns {@link GUIAction} instance when UI mode
+ * is not set explicitly.
+ */
+ @Test
+ @PrepareForTest({ UIActionHolder.class })
+ public void getUIAction_inDefaultUIMode_retGUIAction() {
+ UIAction curUIAction = UIActionHolder.getUIAction();
+ assertThat(curUIAction, instanceOf(GUIAction.class));
+ }
+
+}