// This product is provided under the terms of EPL (Eclipse Public License) // version 1.0. // // The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php package org.dtangler.swingui.mainview.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import org.dtangler.core.configuration.Arguments; import org.dtangler.swingui.windowmanager.MockDialogManager; import org.dtangler.swingui.windowmanager.DialogManager.DialogResult; import org.junit.Before; import org.junit.Test; public class ConfigurationModelTest { private TestableConfigurationModel model; private MockDialogManager dialogManager; private MockFileSelector fileSelector; @Before public void setUp() { Arguments arguments = new Arguments(); arguments.setScope("origscope"); dialogManager = new MockDialogManager(); fileSelector = new MockFileSelector(); model = new TestableConfigurationModel(fileSelector, dialogManager, arguments); } @Test public void testIsDirty() { assertFalse(model.isDirty()); model.getArguments().setScope("anotherscope"); assertTrue(model.isDirty()); } @Test public void testNewConfiguration() { assertTrue(model.newConfiguration()); assertEquals(new Arguments(), model.getArguments()); assertFalse(model.isDirty()); } @Test public void testNewConfigurationAndCancelWhenDirty() { model.getArguments().setScope("myscope"); dialogManager.setNextResult(DialogResult.cancel); assertFalse(model.newConfiguration()); assertTrue(model.isDirty()); assertEquals("myscope", model.getArguments().getScope()); } @Test public void testNewConfigurationAndDontSaveWhenDirty() { model.getArguments().setScope("myscope"); dialogManager.setNextResult(DialogResult.no); assertTrue(model.newConfiguration()); assertFalse(model.isDirty()); assertEquals(new Arguments(), model.getArguments()); } @Test public void testNewConfigurationAndSaveWhenDirty() { model.getArguments().setScope("myscope"); fileSelector.setNextFile(null); dialogManager.setNextResult(DialogResult.yes); assertFalse(model.newConfiguration()); assertTrue(model.isDirty()); assertEquals("myscope", model.getArguments().getScope()); fileSelector.setNextFile("myprops"); dialogManager.setNextResult(DialogResult.yes); assertTrue(model.newConfiguration()); assertFalse(model.isDirty()); assertEquals(new Arguments(), model.getArguments()); assertEquals("myprops", model.getLastSavedFile()); assertEquals("unsaved settings", model.getFileName()); } @Test public void testOpenConfiguration() { Arguments myArgs = new Arguments(); myArgs.setScope("myscope"); fileSelector.setNextFile("myprops"); model.setArgumentsToOpen(myArgs); assertTrue(model.openConfiguration()); assertSame(myArgs, model.getArguments()); assertFalse(model.isDirty()); assertEquals("myprops", model.getLastOpenedFile()); assertEquals("myprops", model.getFileName()); } @Test public void testOpenConfigurationAndCancel() { Arguments myArgs = new Arguments(); myArgs.setScope("myscope"); fileSelector.setNextFile(null); model.setArgumentsToOpen(myArgs); assertFalse(model.openConfiguration()); assertNull(model.getLastOpenedFile()); assertEquals("unsaved settings", model.getFileName()); } @Test public void testOpenConfigurationWhenDirty() { model.getArguments().setScope("myscope"); dialogManager.setNextResult(DialogResult.cancel); assertFalse(model.openConfiguration()); assertTrue(model.isDirty()); assertNull(model.getLastOpenedFile()); } @Test public void testSave() { createModelFromConfigFile("originalprops"); fileSelector.setNextFile("dontUseThisOne"); model.getArguments().setScope("myscope"); assertTrue(model.isDirty()); model.save(); assertFalse(model.isDirty()); assertEquals("originalprops", model.getLastSavedFile()); assertEquals("originalprops", model.getFileName()); } private void createModelFromConfigFile(String fileName) { Arguments arguments = new Arguments(); arguments.setConfigFileName(fileName); model = new TestableConfigurationModel(fileSelector, dialogManager, arguments); } @Test public void testSaveWhenNoFilename() { fileSelector.setNextFile("mypropsfile"); model.save(); assertFalse(model.isDirty()); assertEquals("mypropsfile", model.getLastSavedFile()); assertEquals("mypropsfile", model.getFileName()); } @Test public void testSaveAs() { createModelFromConfigFile("originalprops"); fileSelector.setNextFile("newprops"); model.getArguments().setScope("myscope"); assertTrue(model.isDirty()); model.saveAs(); assertFalse(model.isDirty()); assertEquals("newprops", model.getLastSavedFile()); assertEquals("newprops", model.getFileName()); } @Test public void testCancelOnSave() { fileSelector.setNextFile(null); model.getArguments().setScope("myscope"); assertTrue(model.isDirty()); model.save(); assertTrue(model.isDirty()); assertNull(model.getLastSavedFile()); assertEquals("unsaved settings", model.getFileName()); } }