blob: 37b1de6b7388ce3fc6de27db3c70ddd2f41c00d9 [file] [log] [blame]
/**
* Copyright (c) 2008-2011, http://www.snakeyaml.org
*
* 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.yaml.snakeyaml.reader;
import java.util.regex.Matcher;
import junit.framework.TestCase;
public class ReaderStringTest extends TestCase {
public void testCheckPrintable() {
StreamReader reader = new StreamReader("test");
reader.checkPrintable("test");
Matcher matcher = StreamReader.NON_PRINTABLE.matcher("test");
assertFalse(matcher.find());
try {
reader.checkPrintable("test".toCharArray(), 0, 4);
} catch (ReaderException e) {
fail();
}
}
public void testCheckNonPrintable() {
Matcher matcher = StreamReader.NON_PRINTABLE.matcher("test\u0005 fail");
assertTrue(matcher.find());
try {
new StreamReader("test\u0005 fail");
fail("Non printable Unicode characters must not be accepted.");
} catch (ReaderException e) {
assertEquals(
"unacceptable character '' (0x5) special characters are not allowed\nin \"<string>\", position 4",
e.toString());
}
}
/**
* test that regular expression and array check work the same
*/
public void testCheckAll() {
StreamReader streamReader = new StreamReader("");
for (char i = 0; i < 256 * 256 - 1; i++) {
char[] chars = new char[1];
chars[0] = i;
String str = new String(chars);
Matcher matcher = StreamReader.NON_PRINTABLE.matcher(str);
boolean regularExpressionResult = !matcher.find();
boolean charsArrayResult = true;
try {
streamReader.checkPrintable(chars, 0, 1);
} catch (Exception e) {
String error = e.getMessage();
assertTrue(
error,
error.startsWith("unacceptable character")
|| error.equals("special characters are not allowed"));
charsArrayResult = false;
}
assertEquals("Failed for #" + i, regularExpressionResult, charsArrayResult);
}
}
public void testForward() {
StreamReader reader = new StreamReader("test");
while (reader.peek() != '\u0000') {
reader.forward(1);
}
reader = new StreamReader("test");
assertEquals('t', reader.peek());
reader.forward(1);
assertEquals('e', reader.peek());
reader.forward(1);
assertEquals('s', reader.peek());
reader.forward(1);
assertEquals('t', reader.peek());
reader.forward(1);
assertEquals('\u0000', reader.peek());
}
public void testPeekInt() {
StreamReader reader = new StreamReader("test");
assertEquals('t', reader.peek(0));
assertEquals('e', reader.peek(1));
assertEquals('s', reader.peek(2));
assertEquals('t', reader.peek(3));
reader.forward(1);
assertEquals('e', reader.peek(0));
assertEquals('s', reader.peek(1));
assertEquals('t', reader.peek(2));
}
}