/** * 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)); } }