blob: 3e58c027aa2282fb51dc171232af2d2b185be9eb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 groovy.io
import groovy.test.GroovyTestCase
import java.nio.CharBuffer
class LineColumnReaderTest extends GroovyTestCase {
String text = '''L'invitation au voyage
Mon enfant, ma soeur,
Songe à la douceur
D'aller là-bas vivre ensemble !
Aimer à loisir,
Aimer et mourir
Au pays qui te ressemble !
Les soleils mouillés
De ces ciels brouillés
Pour mon esprit ont les charmes
Si mystérieux
De tes traîtres yeux,
Brillant à travers leurs larmes.
Là, tout n'est qu'ordre et beauté,
Luxe, calme et volupté.
Des meubles luisants,
Polis par les ans,
Décoreraient notre chambre ;
Les plus rares fleurs
Mêlant leurs odeurs
Aux vagues senteurs de l'ambre,
Les riches plafonds,
Les miroirs profonds,
La splendeur orientale,
Tout y parlerait
À l'âme en secret
Sa douce langue natale.
Là, tout n'est qu'ordre et beauté,
Luxe, calme et volupté.
Vois sur ces canaux
Dormir ces vaisseaux
Dont l'humeur est vagabonde ;
C'est pour assouvir
Ton moindre désir
Qu'ils viennent du bout du monde.
- Les soleils couchants
Revêtent les champs,
Les canaux, la ville entière,
D'hyacinthe et d'or ;
Le monde s'endort
Dans une chaude lumière.
Là, tout n'est qu'ordre et beauté,
Luxe, calme et volupté.'''
def reader = new LineColumnReader(new StringReader(text))
void testReadLine() {
reader.withReader { LineColumnReader r ->
assert r.readLine() == "L'invitation au voyage"
assert r.line == 1 && r.column == 23
assert r.readLine() == ""
assert r.line == 2 && r.column == 1
assert r.readLine() == "Mon enfant, ma soeur,"
assert r.line == 3 && r.column == 22
}
}
void testReadLineWholeFile() {
reader.withReader { LineColumnReader r ->
int linesRead = 0
String line = ""
for(;;) {
if (line == null) break
line = r.readLine()
if (line != null) linesRead++
}
assert linesRead == 49
}
}
void testSkip() {
reader.withReader { LineColumnReader r ->
r.skip(13)
assert r.readLine() == "au voyage"
}
}
void testWindowsNewLine() {
def reader = new LineColumnReader(new StringReader("12345\r\nABCDEF\r1234"))
reader.withReader { LineColumnReader r ->
assert r.readLine() == "12345"
assert r.line == 1 && r.column == 6
assert r.readLine() == "ABCDEF"
assert r.line == 2 && r.column == 7
assert r.readLine() == "1234"
assert r.line == 3 && r.column == 5
}
}
void testReadCharBuffer() {
shouldFail(UnsupportedOperationException) {
reader.withReader { LineColumnReader r ->
def buffer = CharBuffer.allocate(13)
r.read(buffer)
}
}
}
}