package org.openstack.atlas.util.ca.primitives;
import org.openstack.atlas.util.ca.primitives.ByteLineReader;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.openstack.atlas.util.ca.StringUtils.asciiBytes;
public class ByteLineReaderTest {
private byte[] lines;
public ByteLineReaderTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
lines = asciiBytes("\r\nabc\nabc\r\nabc\r\n\nx");
}
@After
public void tearDown() {
}
@Test
public void testBytesAvailable() {
ByteLineReader br = new ByteLineReader(lines);
assertEquals(18, br.bytesAvailable());
br.readLine();
assertEquals(16, br.bytesAvailable());
br.readLine();
assertEquals(12, br.bytesAvailable());
br.readLine();
assertEquals(7, br.bytesAvailable());
br.readLine();
assertEquals(2, br.bytesAvailable());
br.readLine();
assertEquals(1, br.bytesAvailable());
br.readLine();
assertEquals(0, br.bytesAvailable());
}
@Test
public void testReadLineNoChop() {
ByteLineReader br = new ByteLineReader(lines);
byte[] line;
line = br.readLine(false);
assertTrue(bytesMatchString("\n", line));
line = br.readLine(false);
assertTrue(bytesMatchString("abc\n", line));
line = br.readLine(false);
assertTrue(bytesMatchString("abc\n", line));
line = br.readLine(false);
assertTrue(bytesMatchString("abc\n", line));
line = br.readLine(false);
assertTrue(bytesMatchString("\n", line));
line = br.readLine(false);
assertTrue(bytesMatchString("x", line));
}
@Test
public void testReadLineWithChop() {
ByteLineReader br = new ByteLineReader(lines);
byte[] line;
line = br.readLine(true);
assertTrue(bytesMatchString("", line));
line = br.readLine(true);
assertTrue(bytesMatchString("abc", line));
line = br.readLine(true);
assertTrue(bytesMatchString("abc", line));
line = br.readLine(true);
assertTrue(bytesMatchString("abc", line));
line = br.readLine(true);
assertTrue(bytesMatchString("", line));
line = br.readLine(true);
assertTrue(bytesMatchString("x", line));
}
@Test
public void testCopyBytes() {
System.out.println("copyBytes");
byte[] a = asciiBytes("Test");
byte[] exp = asciiBytes("Test");
byte[] r = ByteLineReader.copyBytes(a);
assertArrayEquals(exp, a);
}
@Test
public void testCmpBytes() {
System.out.println("cmpBytes");
byte[] a = asciiBytes("ABCDEFG");
byte[] b = asciiBytes("ABCDEFG");
assertTrue(ByteLineReader.cmpBytes(a, b));
a = asciiBytes("NotEqual");
assertFalse(ByteLineReader.cmpBytes(a, b));
}
@Test
public void testAppendLF(){
byte[] line1 = asciiBytes("ABC");
byte[] line2 = asciiBytes("12345");
byte[] line1exp = asciiBytes("ABC\n");
byte[] line2exp = asciiBytes("12345\n");
byte[] line1result = ByteLineReader.appendLF(line1);
byte[] line2result = ByteLineReader.appendLF(line2);
assertTrue(ByteLineReader.cmpBytes(line1exp,line1result));
assertTrue(ByteLineReader.cmpBytes(line2exp,line2result));
assertFalse(ByteLineReader.cmpBytes(line1result,line2result));
}
@Test
public void testChop(){
byte[] line1 = asciiBytes("ABCDEF\n");
byte[] line2 = asciiBytes("ABCDEF");
byte[] line3 = asciiBytes("test \n");
byte[] line4 = asciiBytes("test ");
assertTrue(bytesMatchString("ABCDEF", ByteLineReader.chopLine(line1)));
assertTrue(bytesMatchString("ABCDEF", ByteLineReader.chopLine(line2)));
assertTrue(bytesMatchString("test ", ByteLineReader.chopLine(line3)));
assertTrue(bytesMatchString("test ", ByteLineReader.chopLine(line4)));
}
@Test
public void testTrime(){
byte[] line1 = asciiBytes(" trim this ");
byte[] line2 = asciiBytes(" ");
byte[] line3 = asciiBytes(" \u001eRecord Seperator\u001f ");
assertTrue(bytesMatchString("trim this",ByteLineReader.trim(line1)));
assertTrue(bytesMatchString("",ByteLineReader.trim(line2)));
assertTrue(bytesMatchString("Record Seperator",ByteLineReader.trim(line3)));
assertTrue(bytesMatchString("test",ByteLineReader.trim(asciiBytes(" test"))));
assertTrue(bytesMatchString("test",ByteLineReader.trim(asciiBytes(" test "))));
assertTrue(bytesMatchString("test",ByteLineReader.trim(asciiBytes("test "))));
assertTrue(bytesMatchString("",ByteLineReader.trim(asciiBytes(" "))));
assertTrue(bytesMatchString("",ByteLineReader.trim(asciiBytes(""))));
assertFalse(bytesMatchString("FAIL",ByteLineReader.trim(asciiBytes("PFFT"))));
}
public boolean bytesMatchString(String expectedStr, byte[] b) {
return ByteLineReader.cmpBytes(asciiBytes(expectedStr), b);
}
}