001: //The contents of this file are subject to the Mozilla Public License Version 1.1
002: //(the "License"); you may not use this file except in compliance with the
003: //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
004: //
005: //Software distributed under the License is distributed on an "AS IS" basis,
006: //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
007: //for the specific language governing rights and
008: //limitations under the License.
009: //
010: //The Original Code is "The Columba Project"
011: //
012: //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
013: //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
014: //
015: //All Rights Reserved.
016: package org.columba.core.io;
017:
018: import java.io.ByteArrayInputStream;
019: import java.io.InputStream;
020: import java.util.Random;
021:
022: import junit.framework.TestCase;
023:
024: public class CloneInputStreamTest extends TestCase {
025: byte[] test;
026:
027: public void testCloneSingle() throws Exception {
028: InputStream master = new ByteArrayInputStream(test);
029: CloneStreamMaster model = new CloneStreamMaster(master);
030: CloneInputStream clone1 = model.getClone();
031: CloneInputStream clone2 = model.getClone();
032:
033: byte[] result1 = new byte[20000];
034: byte[] result2 = new byte[20000];
035:
036: for (int i = 0; i < 20000; i++) {
037: if ((i % 2) == 0) {
038: result1[i] = (byte) clone1.read();
039: result2[i] = (byte) clone2.read();
040: } else {
041: result2[i] = (byte) clone2.read();
042: result1[i] = (byte) clone1.read();
043: }
044: }
045:
046: for (int i = 0; i < 20000; i++) {
047: assertTrue(result1[i] == test[i]);
048: assertTrue(result2[i] == test[i]);
049: }
050: }
051:
052: public void testEOFSingle() throws Exception {
053: InputStream master = new ByteArrayInputStream(test);
054: CloneStreamMaster model = new CloneStreamMaster(master);
055: CloneInputStream clone1 = model.getClone();
056:
057: int lastRead = clone1.read();
058: int pos = 1;
059:
060: while (lastRead != -1) {
061: lastRead = clone1.read();
062: pos++;
063: }
064:
065: assertTrue(pos == 20001);
066: }
067:
068: public void testCloneMulti() throws Exception {
069: InputStream master = new ByteArrayInputStream(test);
070: CloneStreamMaster model = new CloneStreamMaster(master);
071: CloneInputStream clone1 = model.getClone();
072: CloneInputStream clone2 = model.getClone();
073:
074: byte[] result1 = new byte[20000];
075: byte[] result2 = new byte[20000];
076:
077: for (int i = 0; i < (20000 / 50); i++) {
078: if ((i % 2) == 0) {
079: clone1.read(result1, i * 50, 50);
080: clone2.read(result2, i * 50, 50);
081: } else {
082: clone2.read(result2, i * 50, 50);
083: clone1.read(result1, i * 50, 50);
084: }
085: }
086:
087: for (int i = 0; i < 20000; i++) {
088: assertTrue(result1[i] == test[i]);
089: assertTrue(result2[i] == test[i]);
090: }
091: }
092:
093: public void testEOFMulti1() throws Exception {
094: InputStream master = new ByteArrayInputStream(test);
095: CloneStreamMaster model = new CloneStreamMaster(master);
096: CloneInputStream clone1 = model.getClone();
097:
098: byte[] buffer = new byte[50];
099:
100: int lastRead = clone1.read(buffer);
101: int pos = lastRead;
102:
103: while (lastRead != -1) {
104: lastRead = clone1.read(buffer);
105: pos += lastRead;
106: }
107:
108: assertTrue(pos == 19999);
109: }
110:
111: public void testEOFMulti2() throws Exception {
112: InputStream master = new ByteArrayInputStream(test);
113: CloneStreamMaster model = new CloneStreamMaster(master);
114: CloneInputStream clone1 = model.getClone();
115:
116: byte[] buffer = new byte[30];
117:
118: int lastRead = clone1.read(buffer);
119: int pos = lastRead;
120:
121: while (lastRead == 30) {
122: lastRead = clone1.read(buffer);
123: pos += lastRead;
124: }
125:
126: assertTrue(pos == 20000);
127: }
128:
129: /* (non-Javadoc)
130: * @see junit.framework.TestCase#setUp()
131: */
132: protected void setUp() throws Exception {
133: super .setUp();
134:
135: Random random = new Random();
136: test = new byte[20000];
137: random.nextBytes(test);
138: }
139: }
|