ceki 2005/02/15 08:58:04
Added: tests/src/java/org/apache/log4j/lbel CountingReaderTest.java
CountingReader.java
Log:
A Reader that counts colums and lines.
Revision Changes Path
1.1
logging-log4j/tests/src/java/org/apache/log4j/lbel/CountingReaderTest.java
Index: CountingReaderTest.java
===================================================================
/*
* Copyright 1999,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.log4j.lbel;
import java.io.IOException;
import java.io.StringReader;
import junit.framework.TestCase;
/**
*
* @author <a href="http://www.qos.ch/log4j/">Ceki Gülcü</a>
*/
public class CountingReaderTest extends TestCase {
public CountingReaderTest(String arg0) {
super(arg0);
}
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testOneLiner() throws IOException {
StringReader sr = new StringReader("abc");
CountingReader cr = new CountingReader(sr);
int c;
c = cr.read();
assertEquals('a', c);
assertEquals(0, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
c = cr.read();
assertEquals('b', c);
assertEquals(0, cr.getLineNumber());
assertEquals(2, cr.getColumnNumber());
c = cr.read();
assertEquals('c', c);
assertEquals(0, cr.getLineNumber());
assertEquals(3, cr.getColumnNumber());
c = cr.read();
assertEquals(-1, c);
assertEquals(0, cr.getLineNumber());
assertEquals(3, cr.getColumnNumber());
}
public void testTwoLinerR() throws IOException {
StringReader sr = new StringReader("a\rA");
CountingReader cr = new CountingReader(sr);
int c;
c = cr.read();
assertEquals('a', c);
assertEquals(0, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
c = cr.read();
assertEquals('\r', c);
assertEquals(1, cr.getLineNumber());
assertEquals(0, cr.getColumnNumber());
c = cr.read();
assertEquals('A', c);
assertEquals(1, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
c = cr.read();
assertEquals(-1, c);
assertEquals(1, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
}
public void testTwoLinerN() throws IOException {
StringReader sr = new StringReader("a\nA");
CountingReader cr = new CountingReader(sr);
int c;
c = cr.read();
assertEquals('a', c);
assertEquals(0, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
c = cr.read();
assertEquals('\n', c);
assertEquals(1, cr.getLineNumber());
assertEquals(0, cr.getColumnNumber());
c = cr.read();
assertEquals('A', c);
assertEquals(1, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
c = cr.read();
assertEquals(-1, c);
assertEquals(1, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
}
public void testTwoLinerRN() throws IOException {
StringReader sr = new StringReader("a\r\nA");
CountingReader cr = new CountingReader(sr);
int c;
c = cr.read();
assertEquals('a', c);
assertEquals(0, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
c = cr.read();
assertEquals('\r', c);
assertEquals(1, cr.getLineNumber());
assertEquals(0, cr.getColumnNumber());
c = cr.read();
assertEquals('\n', c);
assertEquals(1, cr.getLineNumber());
assertEquals(0, cr.getColumnNumber());
c = cr.read();
assertEquals('A', c);
assertEquals(1, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
c = cr.read();
assertEquals(-1, c);
assertEquals(1, cr.getLineNumber());
assertEquals(1, cr.getColumnNumber());
}
}
1.1
logging-log4j/tests/src/java/org/apache/log4j/lbel/CountingReader.java
Index: CountingReader.java
===================================================================
/*
* Created on Feb 2, 2005
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package org.apache.log4j.lbel;
import java.io.IOException;
import java.io.Reader;
/**
* Decorate a reader by counting lines and colums.
*
* @author <a href="http://www.qos.ch/log4j/">Ceki Gülcü</a>
*/
public class CountingReader extends Reader {
private final Reader reader;
private int lineNumber = 0;
private int columnNumber = 0;
private boolean lastCharacterWasR = false;
CountingReader(Reader reader) {
this.reader = reader;
}
public int read() throws IOException {
int r = reader.read();
if(r != -1) {
switch(r) {
case '\r':
lastCharacterWasR = true;
lineNumber++;
columnNumber = 0;
break;
case '\n':
if(!lastCharacterWasR) {
lineNumber++;
columnNumber = 0;
}
lastCharacterWasR = false;
break;
default: lastCharacterWasR = false;
columnNumber++;
}
}
return r;
}
public int read(char[] arg0, int arg1, int arg2) throws IOException {
throw new UnsupportedOperationException("char[] reading not supported.");
}
public void close() throws IOException {
reader.close();
}
public int getColumnNumber() {
return columnNumber;
}
public int getLineNumber() {
return lineNumber;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]