diff test/sematest/TestEditor.java @ 298:cf9328e66d25

*** empty log message ***
author kono
date Tue, 30 Sep 2008 22:42:33 +0900
parents 9c553308b918
children d13dad30fd24
line wrap: on
line diff
--- a/test/sematest/TestEditor.java	Tue Sep 30 19:16:06 2008 +0900
+++ b/test/sematest/TestEditor.java	Tue Sep 30 22:42:33 2008 +0900
@@ -33,6 +33,12 @@
 	boolean running = true;
 	long timeout = 1;
 	private String name;
+	private REPCommand nop = new REPCommand(REP.REPCMD_NOP,0,0,0,0,"");
+	private boolean inputLock=false;
+	public boolean detached=false;
+	public boolean master=false;
+	private int syncCounter;
+	private boolean hasInputLock=true;
 
 	static private String[] text1d = {
 		"aaa", "bbb", "ccc", "ddd", "eee",
@@ -45,14 +51,15 @@
 		this.name = name;
 		cmds = new LinkedList<REPCommand>();
 		if (master) {
+			this.master=true;
 			text = new Text(text1d);
-			cmds.add(new REPCommand(REP.SMCMD_PUT,0,0,seq++,0,name+"-file"));
+			cmds.add(new REPCommand(REP.SMCMD_PUT,0,0,0,0,name+"-file"));
 			cmds.add(new REPCommand(REP.REPCMD_INSERT,0,0,0,0,"m0"));
 			cmds.add(new REPCommand(REP.REPCMD_DELETE,0,0,0,0,"m0"));
 			cmds.add(new REPCommand(REP.SMCMD_QUIT,0,0,0,0,""));
 		} else {
 			text = new Text(new String[0]);
-			cmds.add(new REPCommand(REP.SMCMD_JOIN,0,0,seq++,0,name));
+			cmds.add(new REPCommand(REP.SMCMD_JOIN,0,0,0,0,name));
 			cmds.add(new REPCommand(REP.REPCMD_INSERT,0,0,0,0,"c0"));
 			cmds.add(new REPCommand(REP.REPCMD_DELETE,0,0,0,0,"c0"));
 			//cmds.add(new REPCommand(REP.SMCMD_QUIT,0,0,0,0,""));
@@ -86,7 +93,25 @@
 		REPSelector<REPCommand> selector = REPSelector.create();
 		channel.register(selector, SelectionKey.OP_READ);
 		while(running) {
-			if (selector.select(timeout)<=0) {
+			if (inputLock) {
+				// No user input during merge mode (optional)
+				if (selector.select(0)>0) {
+					handle(channel.read());
+				}
+				continue;
+			} else if (selector.select(timeout)<=0) {
+				if (syncCounter>0) {
+					if (syncCounter>text.size()) {
+						syncCounter=0;
+					} else {
+						int i=syncCounter-1;
+						REPCommand del = new REPCommand(REP.REPCMD_DELETE,sid,eid,0,i, text.get(i));
+						REPCommand ins = new REPCommand(REP.REPCMD_INSERT,sid,eid,0,i, text.get(i));
+						sendCommand(del);
+						sendCommand(ins);
+						syncCounter++;
+					}
+				}
 				userInput();
 			} else {
 				handle(channel.read());
@@ -135,20 +160,27 @@
 		case REPCMD_INSERT	:
 			text.insert(cmd.lineno, cmd.string);
 			sendCommand(cmd);
+			sendCommand(nop);
 			break;
 		case REPCMD_INSERT_ACK	:
+			assert(false);
 			break;
 		case REPCMD_DELETE	:
 			String del = text.delete(cmd.lineno);
 			cmd.setString(del);
 			sendCommand(cmd);
+			sendCommand(nop);
 			break;
 		 case REPCMD_DELETE_ACK	:
+				assert(false);
 			 break;
 		 case REPCMD_CLOSE	:
 		 case REPCMD_CLOSE_2	:
+				assert(false);
 			 break;
 		 case REPCMD_NOP		:
+			 sendCommand(cmd);
+			 sendCommand(nop);
 			 break;
 		 case SMCMD_JOIN_ACK	:
 			 sid = cmd.sid;
@@ -159,16 +191,33 @@
 			 eid = cmd.eid;
 			 break;
 		 case SMCMD_QUIT		:
+			 sendCommand(cmd);
+			 cmds.clear();
+			 break;
 		 case SMCMD_QUIT_ACK	:
+			 assert(false);
 			 break;
 		 case SMCMD_START_MERGE :
+			 // lock user input during merge (optional)
+			 inputLock = hasInputLock;
+			 cmd.cmd = REP.SMCMD_START_MERGE_ACK;
+			 sendCommand(cmd);
+			 break;
 		 case SMCMD_START_MERGE_ACK :
+			 assert(false);
 			 break;
 		 case SMCMD_END_MERGE :
+			 inputLock = false;
 			 break;
 		 case SMCMD_QUIT_2 :
+			 sendCommand(cmd);
 			 running = false;
 			 break;
+		 case SMCMD_SYNC:
+			 // start contents sync with newly joined editor
+			 cmd.cmd = REP.SMCMD_SYNC_ACK; sendCommand(cmd);
+			 syncCounter = 1;
+			 break;
 		 default:
 			 assert(false);
 		 	 break;