blob: c0f842d78a722d96ab554beb667dbe078fc2ab17 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ua.tests.cheatsheet.composite;
import java.util.Hashtable;
import java.util.Map;
import junit.framework.TestCase;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.ua.tests.cheatsheet.util.MockTaskEditor;
import org.eclipse.ui.XMLMemento;
import org.eclipse.ui.internal.cheatsheets.CheatSheetPlugin;
import org.eclipse.ui.internal.cheatsheets.composite.model.CompositeCheatSheetModel;
import org.eclipse.ui.internal.cheatsheets.composite.model.CompositeCheatSheetSaveHelper;
import org.eclipse.ui.internal.cheatsheets.composite.model.EditableTask;
import org.eclipse.ui.internal.cheatsheets.composite.model.TaskGroup;
import org.eclipse.ui.internal.cheatsheets.state.DefaultStateManager;
import org.eclipse.ui.internal.provisional.cheatsheets.ICompositeCheatSheetTask;
public class TestPersistence extends TestCase {
/**
* Test that data can be saved and restored in Mementos
*/
private static final String MEMENTO_TAG = "Mtag";
private final static String PATH1 = "Path1";
private final static String PATH2 = "Path2";
private final static String KEY = "key";
private final static String DATA1 = "1";
private final static String DATA2 = "2";
private CompositeCheatSheetModel model;
private TaskGroup rootTask;
private EditableTask task1;
private EditableTask task2;
private MockTaskEditor editor1;
private MockTaskEditor editor2;
private CompositeCheatSheetSaveHelper helper;
/**
* Initialize a composite cheatsheet with one root and two leaf tasks.
*/
private void createCompositeCheatSheet() {
model = new CompositeCheatSheetModel("name", "description", "explorerId");
model.setId("org.eclipse.ua.tests.testPersistence");
rootTask = new TaskGroup(model, "root", "name", "kind");
task1 = new EditableTask(model, "task1", "name", "kind");
task2 = new EditableTask(model, "task2", "name", "kind");
helper = new CompositeCheatSheetSaveHelper(new DefaultStateManager());
model.setSaveHelper(helper);
editor1 = new MockTaskEditor();
editor2 = new MockTaskEditor();
task1.setEditor(editor1);
task2.setEditor(editor2);
model.setRootTask(rootTask);
rootTask.addSubtask(task1);
rootTask.addSubtask(task2);
}
/**
* Test that the routines saveMemento() and readMemento() can write
* mementos to different files and keep the contents distinct.
*/
public void testMementoSaveMultipleFiles() {
XMLMemento memento = XMLMemento.createWriteRoot(MEMENTO_TAG);
memento.putString(KEY, DATA1);
CheatSheetPlugin cheatSheetPlugin = CheatSheetPlugin.getPlugin();
IStatus status = cheatSheetPlugin.saveMemento(memento, PATH1);
assertTrue(status.isOK());
memento = XMLMemento.createWriteRoot(MEMENTO_TAG);
memento.putString(KEY, DATA2);
status = cheatSheetPlugin.saveMemento(memento, PATH2);
assertTrue(status.isOK());
memento = cheatSheetPlugin.readMemento(PATH1);
assertEquals(DATA1, memento.getString(KEY));
memento = cheatSheetPlugin.readMemento(PATH2);
assertEquals(DATA2, memento.getString(KEY));
}
public void testSaveTaskState() {
createCompositeCheatSheet();
task1.setState(ICompositeCheatSheetTask.IN_PROGRESS);
task2.setState(ICompositeCheatSheetTask.COMPLETED);
helper.saveCompositeState(model, null);
createCompositeCheatSheet();
model.loadState(new Hashtable<String, String>());
assertEquals(ICompositeCheatSheetTask.IN_PROGRESS, task1.getState());
assertEquals(ICompositeCheatSheetTask.COMPLETED, task2.getState());
}
/**
* Test that each task can save its state in a memento and that state
* can be restored.
*/
public void testSaveTaskMemento() {
final String value1 = "13579";
final String value2 = "AB24";
createCompositeCheatSheet();
// Start tasks with no memento
task1.setState(ICompositeCheatSheetTask.COMPLETED);
task2.setState(ICompositeCheatSheetTask.IN_PROGRESS);
editor1.setInput(task1, null);
editor2.setInput(task2, null);
assertEquals(MockTaskEditor.NO_MEMENTO, editor1.getValue());
assertEquals(MockTaskEditor.NO_MEMENTO, editor2.getValue());
// Set the values to save in the memento
editor1.setValue(value1);
editor2.setValue(value2);
task1.setState(ICompositeCheatSheetTask.COMPLETED);
task2.setState(ICompositeCheatSheetTask.IN_PROGRESS);
helper.saveCompositeState(model, null);
createCompositeCheatSheet();
model.loadState(new Hashtable<String, String>());
editor1.setInput(task1, model.getTaskMemento(task1.getId()));
editor2.setInput(task2, model.getTaskMemento(task2.getId()));
assertEquals(value1, editor1.getValue());
assertEquals(value2, editor2.getValue());
}
/**
* Test that layout data is restored
*/
public void testSaveLayoutData() {
createCompositeCheatSheet();
Map<String, String> values = new Hashtable<String, String>();
values.put("One", "1");
values.put("Two", "2");
helper.saveCompositeState(model, values);
Map<String, String> restoredValues = new Hashtable<String, String>();
createCompositeCheatSheet();
model.loadState(restoredValues);
assertEquals(2, restoredValues.size());
assertEquals("1", values.get("One"));
assertEquals("2", values.get("Two"));
}
}