diff options
author | Dani Megert | 2007-11-22 17:09:49 +0000 |
---|---|---|
committer | Dani Megert | 2007-11-22 17:09:49 +0000 |
commit | 02b764e72a73297ae6985d266109327449e5e8ce (patch) | |
tree | 1baf5dfa8a1aecde780a4e3548d31aba5205787d /org.eclipse.jface.text.tests/src | |
parent | fd4c49dfe53676488d6956f72b7bf7123d61ecc8 (diff) | |
download | eclipse.platform.text-02b764e72a73297ae6985d266109327449e5e8ce.tar.gz eclipse.platform.text-02b764e72a73297ae6985d266109327449e5e8ce.tar.xz eclipse.platform.text-02b764e72a73297ae6985d266109327449e5e8ce.zip |
Fixed bug 209921: [implementation] UndoableTextChange.canUndo() returns wrong result
Diffstat (limited to 'org.eclipse.jface.text.tests/src')
-rw-r--r-- | org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerUndoManagerTest.java | 104 |
1 files changed, 99 insertions, 5 deletions
diff --git a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerUndoManagerTest.java b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerUndoManagerTest.java index 2017a8e3333..398a859b75f 100644 --- a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerUndoManagerTest.java +++ b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerUndoManagerTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006 IBM Corporation and others. + * Copyright (c) 2006, 2007 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 @@ -10,12 +10,28 @@ *******************************************************************************/ package org.eclipse.jface.text.tests; -import org.eclipse.jface.text.IUndoManager; -import org.eclipse.jface.text.TextViewerUndoManager; - import junit.framework.Test; import junit.framework.TestSuite; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.commands.operations.IUndoableOperation; +import org.eclipse.core.commands.operations.OperationHistoryFactory; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; + +import org.eclipse.text.undo.DocumentUndoEvent; +import org.eclipse.text.undo.DocumentUndoManager; +import org.eclipse.text.undo.IDocumentUndoListener; + +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IUndoManager; +import org.eclipse.jface.text.TextViewerUndoManager; + /** * Tests for TextViewerUndoManager. * @@ -31,7 +47,7 @@ public class TextViewerUndoManagerTest extends AbstractUndoManagerTest { * @see TestCase#TestCase(String) */ public TextViewerUndoManagerTest(final String name) { - super(name); + super(name); } /* @@ -41,4 +57,82 @@ public class TextViewerUndoManagerTest extends AbstractUndoManagerTest { protected IUndoManager createUndoManager(int maxUndoLevel) { return new TextViewerUndoManager(maxUndoLevel); } + + //--- DocumentUndoManager only --- + + public void internalTestTransferNonTextOp(final boolean isUndoable) throws Exception { + IUndoableOperation operation= new AbstractOperation("") { + + public boolean canUndo() { + return isUndoable; + } + + public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { + return Status.OK_STATUS; + } + + public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { + return Status.OK_STATUS; + } + + public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { + return Status.OK_STATUS; + } + }; + + DocumentUndoManager tempUndoManager= new DocumentUndoManager(new Document()); + + tempUndoManager.connect(new Object()); + operation.addContext(tempUndoManager.getUndoContext()); + OperationHistoryFactory.getOperationHistory().add(operation); + + assertEquals(isUndoable, tempUndoManager.undoable()); + + final DocumentUndoManager undoManager= new DocumentUndoManager(new Document()); + + undoManager.addDocumentUndoListener(new IDocumentUndoListener() { + + public void documentUndoNotification(DocumentUndoEvent event) { + fail(); + } + }); + + undoManager.connect(new Object()); + undoManager.transferUndoHistory(tempUndoManager); + + assertEquals(isUndoable, undoManager.undoable()); + undoManager.undo(); + assertEquals(false, undoManager.undoable()); + } + + public void testTransferNonUndoableNonTextOp() throws Exception { + internalTestTransferNonTextOp(false); + } + + public void testTransferUndoableNonTextOp() throws Exception { + internalTestTransferNonTextOp(true); + } + + public void testCanUndo() throws Exception { + IDocument doc= new Document(); + final DocumentUndoManager undoManager= new DocumentUndoManager(doc); + undoManager.connect(new Object()); + + undoManager.addDocumentUndoListener(new IDocumentUndoListener() { + + public void documentUndoNotification(DocumentUndoEvent event) { + if (event.getEventType() == DocumentUndoEvent.ABOUT_TO_UNDO) + assertEquals(true, undoManager.undoable()); + else if (event.getEventType() == DocumentUndoEvent.UNDONE) + assertEquals(false, undoManager.undoable()); + } + }); + + doc.set("foo"); + + assertEquals(true, undoManager.undoable()); + undoManager.undo(); + assertEquals(false, undoManager.undoable()); + } + } |