Files
gzz-mirror/Modules/test/TestUndo.java
2026-09-14 20:19:29 -04:00

211 lines
4.4 KiB
Java

/*
TestUndo.java
*
* Copyright (c) 2000, Ted Nelson and Tuomas Lukka
*
* You may use and distribute under the terms of either the GNU Lesser
* General Public License, either version 2 of the license or,
* at your choice, any later version. Alternatively, you may use and
* distribute under the terms of the XPL.
*
* See the LICENSE.lgpl and LICENSE.xpl files for the specific terms of
* the licenses.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the README
* file for more details.
*
*/
/*
* Written by Tuomas Lukka
*/
package org.gzigzag;
import java.io.*;
public class TestUndo {
String rcsid = "$Id: TestUndo.java,v 1.8 2000/11/30 08:44:33 ajk Exp $";
public static final boolean dbg = true;
final static void p(String s) { if(dbg) System.out.println(s); }
/*
static void printdim(ZZDimension d, int max) {
for(int i=1; i<=max; i++) {
p(i+"\t+"+ d.s(""+i, 1, null)+
"\t-"+ d.s(""+i, -1, null));
}
p("");
}
static String ct2str(Object o) {
if(o instanceof String)
return "'"+o+"'";
else if(o instanceof Span)
return "SPAN: "+o;
else if(o == null)
return "null";
throw new Error("Invalid content "+o);
}
static void printct(ContentStore st, int max) {
for(int i=1; i<=max; i++) {
p(i+"\t"+ct2str(st.get(""+i)));
}
p("");
}
public static void main(String[] argv) {
{
ZZCacheDimension d = new ZZCacheDimension();
UndoList ul = new UndoList(42);
d.setUndoList(ul);
ZZDimStorer pstor = new ZZDimStorer() {
public void storeConnect(String a, String b) {
p("Storeconn: "+a+" "+b);
}
public void storeDisconnect(String a, int dir) {
p("Storedisc: "+a+" "+dir);
}
};
ContentStorer cstor = new ContentStorer() {
public void putContent(String id, Object ct) {
p("StoreCont: "+id+" "+ct2str(ct)+"");
}
};
d.connect("1", "2");
d.connect("3", "4");
ul.stamp();
printdim(d, 4);
ul.undo();
p("undo:");
printdim(d, 4);
ul.redo();
p("redo:");
printdim(d, 4);
p(" Next, more difficult test.");
d.disconnect("1", 1);
d.connect("1", "3");
ul.stamp();
printdim(d, 4);
ul.undo();
p("undo:");
printdim(d, 4);
ul.undo();
p("undo:");
printdim(d, 4);
ul.redo();
p("redo:");
printdim(d, 4);
ul.redo();
p("redo:");
printdim(d, 4);
p("Next, whether commit does the right ops...");
d.startCommit();
ul.commit();
d.endCommit(pstor);
p("Commit finished");
p("More edits");
d.disconnect("3", 1);
d.connect("2", "4");
printdim(d, 4);
p("Commit ops...");
d.startCommit();
ul.commit();
d.endCommit(pstor);
p("Commit finished");
p("Next, we'll test the simple file format.");
SimpleDimFile f = new SimpleDimFile();
ByteArrayOutputStream bo = new ByteArrayOutputStream();
f.startWrite(new DataOutputStream(bo));
f.storeConnect("Foo", "Bar");
f.storeConnect("1", "2");
f.storeDisconnect("a", 1);
f.storeDisconnect("b", -1);
f.storeDisconnect("3", 1);
f.endWrite();
byte[] bytes = bo.toByteArray();
bo.reset();
p("Wrote ops. Now read.");
// f.read(new DataInputStream(new ByteArrayInputStream(bytes)), pstor);
p("Finally, test the content storage as well");
ZZCacheContentStore ccs = new ZZCacheContentStore();
ccs.setUndoList(ul);
ul.stamp();
ccs.put("1", "foo");
ccs.put("2", "bar");
ccs.put("3", Span.parse("1.5:1.8"));
ul.stamp();
ccs.put("2", "txt");
ul.stamp();
printct(ccs, 4);
ul.undo();
p("Undo: ");
printct(ccs, 4);
ul.undo();
p("Undo: ");
printct(ccs, 4);
ul.redo();
p("Redo: ");
printct(ccs, 4);
ul.redo();
p("Redo: ");
printct(ccs, 4);
SimpleContentFile cf = new SimpleContentFile();
cf.startWrite(new DataOutputStream(bo));
cf.putContent("A", "FOO");
cf.putContent("B", "bar");
cf.putContent("C", Span.parse("1.5:1.8"));
cf.endWrite();
bytes = bo.toByteArray();
bo.reset();
p("Wrote txts; read:");
// cf.read(new DataInputStream(new ByteArrayInputStream(bytes)), cstor);
}
}
*/
}