package com.tecspy.protocol;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

import junit.framework.TestCase;

/**
 * 
 * @author Michael Erskine
 *
 */public class EtxMessageByteSinkTest extends TestCase {

	public EtxMessageByteSinkTest(String name) {
		super(name);
	}

	protected void setUp() throws Exception {
		super.setUp();
	}

	/**
	 * A simple EtxMessageByteSink that has 'z' as etx and writes its messages
	 * to a List.
	 */
	public class Testerw extends EtxMessageByteSink {
		public List<String> results = new LinkedList<String>();

		public Testerw() {
			super();
			etx = (byte) 'z';
			maxmsg = 1000;
			msg = new StringBuilder(1000);
		}

		@Override
		protected void handleMsg() {
			results.add("msg(" + msg.length() + "): '" + msg.toString() + "'");
		}

		@Override
		public void processEof() {
			results.add("EOF");
		}

		@Override
		public void processException(IOException e) {
			results.add("IOException: " + e.getMessage());
		}

	}

	public final void test1() {

	}

	public final void testEtxMessageByteSink() {
		// create simple implementation and feed it test byte streams
		// expect certain things to have occurred
		Testerw sink = new Testerw();
		String t1 = "message1zmessage2zmessage3z";
		byte[] bytes = t1.getBytes();

		List<String> expected = new LinkedList<String>();
		expected.add("msg(8): 'message1'");
		expected.add("msg(8): 'message2'");
		expected.add("msg(8): 'message3'");

		sink.processBytes(bytes, bytes.length);

		EtxMessageByteSink.log.debug("expected: " + expected.toString());
		EtxMessageByteSink.log.debug("actual:   " + sink.results.toString());

		if (!sink.results.equals(expected)) {
			EtxMessageByteSink.log.error("expected: " + expected.toString());
			EtxMessageByteSink.log
					.error("actual:   " + sink.results.toString());
			fail("result doesn't match expected");
		}

	}

}
