13c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller/* 23c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * Copyright (C) 2014 Square, Inc. 33c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * 43c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * Licensed under the Apache License, Version 2.0 (the "License"); 53c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * you may not use this file except in compliance with the License. 63c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * You may obtain a copy of the License at 73c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * 83c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * http://www.apache.org/licenses/LICENSE-2.0 93c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * 103c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * Unless required by applicable law or agreed to in writing, software 113c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * distributed under the License is distributed on an "AS IS" BASIS, 123c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * See the License for the specific language governing permissions and 143c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * limitations under the License. 153c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller */ 163c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerpackage okio; 173c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 183c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport java.io.EOFException; 193c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport java.io.IOException; 203c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport org.junit.Test; 213c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 223c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport static org.junit.Assert.assertEquals; 233c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport static org.junit.Assert.assertTrue; 243c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport static org.junit.Assert.fail; 253c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 263c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerpublic abstract class ReadUtf8LineTest { 273c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller protected abstract BufferedSource newSource(String s); 283c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 293c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller @Test public void readLines() throws IOException { 303c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller BufferedSource source = newSource("abc\ndef\n"); 31c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("abc", source.readUtf8LineStrict()); 32c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("def", source.readUtf8LineStrict()); 333c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller try { 34c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller source.readUtf8LineStrict(); 353c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller fail(); 363c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } catch (EOFException expected) { 373c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 383c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 393c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 403c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller @Test public void emptyLines() throws IOException { 413c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller BufferedSource source = newSource("\n\n\n"); 42c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("", source.readUtf8LineStrict()); 43c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("", source.readUtf8LineStrict()); 44c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("", source.readUtf8LineStrict()); 453c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller assertTrue(source.exhausted()); 463c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 473c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 483c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller @Test public void crDroppedPrecedingLf() throws IOException { 493c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller BufferedSource source = newSource("abc\r\ndef\r\nghi\rjkl\r\n"); 50c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("abc", source.readUtf8LineStrict()); 51c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("def", source.readUtf8LineStrict()); 52c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("ghi\rjkl", source.readUtf8LineStrict()); 533c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 543c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 553c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller @Test public void bufferedReaderCompatible() throws IOException { 563c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller BufferedSource source = newSource("abc\ndef"); 57c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("abc", source.readUtf8Line()); 58c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("def", source.readUtf8Line()); 59c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals(null, source.readUtf8Line()); 603c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 613c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 623c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller @Test public void bufferedReaderCompatibleWithTrailingNewline() throws IOException { 633c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller BufferedSource source = newSource("abc\ndef\n"); 64c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("abc", source.readUtf8Line()); 65c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals("def", source.readUtf8Line()); 66c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals(null, source.readUtf8Line()); 673c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 683c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller} 69