+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.yangtools.yang.stmt.retest;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+
+public class Bug4079Test {
+
+ @Test
+ public void testValidPatternFix() {
+ String fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsArrows})*+");
+ assertEquals("(\\p{InArrows})*+", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsDingbats})++");
+ assertEquals("(\\p{InDingbats})++", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsSpecials})?+");
+ assertEquals("(\\p{InSpecials})?+", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsBatak}){4}+");
+ assertEquals("(\\p{IsBatak}){4}+", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsLatin}){4,6}+");
+ assertEquals("(\\p{IsLatin}){4,6}+", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsTibetan}){4,}+");
+ assertEquals("(\\p{IsTibetan}){4,}+", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsAlphabetic}){4}?");
+ assertEquals("(\\p{IsAlphabetic}){4}?", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsLowercase}){4,6}?");
+ assertEquals("(\\p{IsLowercase}){4,6}?", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsUppercase}){4,}?");
+ assertEquals("(\\p{IsUppercase}){4,}?", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsBasicLatin}|\\p{IsLatin-1Supplement})*");
+ assertEquals("(\\p{InBasicLatin}|\\p{InLatin-1Supplement})*", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{InBasicLatin}|\\p{InLatin-1Supplement})+");
+ assertEquals("(\\p{InBasicLatin}|\\p{InLatin-1Supplement})+", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsBasicLatin}|\\p{InLatin-1Supplement})?");
+ assertEquals("(\\p{InBasicLatin}|\\p{InLatin-1Supplement})?", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{InBasicLatin}|\\p{IsLatin-1Supplement}){4}");
+ assertEquals("(\\p{InBasicLatin}|\\p{InLatin-1Supplement}){4}", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsLatin}|\\p{IsArmenian}){2,4}");
+ assertEquals("(\\p{IsLatin}|\\p{IsArmenian}){2,4}", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsLatin}|\\p{IsBasicLatin}){2,}");
+ assertEquals("(\\p{IsLatin}|\\p{InBasicLatin}){2,}", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsBasicLatin}|\\p{IsLatin})*?");
+ assertEquals("(\\p{InBasicLatin}|\\p{IsLatin})*?", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern(
+ "(\\p{IsBasicLatin}|\\p{IsLatin-1Supplement}|\\p{IsArrows})+?");
+ assertEquals("(\\p{InBasicLatin}|\\p{InLatin-1Supplement}|\\p{InArrows})+?", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern(
+ "(\\p{InBasicLatin}|\\p{IsLatin-1Supplement}|\\p{IsLatin})??");
+ assertEquals("(\\p{InBasicLatin}|\\p{InLatin-1Supplement}|\\p{IsLatin})??", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\\\\\p{IsBasicLatin})*+");
+ assertEquals("(\\\\\\p{InBasicLatin})*+", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\\\\\\\\\p{IsBasicLatin})*+");
+ assertEquals("(\\\\\\\\\\p{InBasicLatin})*+", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+
+ fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\\\\\\\\\\\\\p{IsBasicLatin})*+");
+ assertEquals("(\\\\\\\\\\\\\\p{InBasicLatin})*+", fixedUnicodeScriptPattern);
+ assertNotNull(Pattern.compile(fixedUnicodeScriptPattern));
+ }
+
+ @Test(expected = PatternSyntaxException.class)
+ public void testInvalidPattern() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ String fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\\\p{IsBasicLatin})*+");
+ assertEquals("(\\\\p{IsBasicLatin})*+", fixedUnicodeScriptPattern);
+ // should throw exception
+ Pattern.compile(fixedUnicodeScriptPattern);
+ }
+
+ @Test(expected = PatternSyntaxException.class)
+ public void testInvalidPattern2() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ String fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\p{IsSpecials}|\\\\\\\\p{IsBasicLatin})*+");
+ assertEquals("(\\p{InSpecials}|\\\\\\\\p{IsBasicLatin})*+", fixedUnicodeScriptPattern);
+ // should throw exception
+ Pattern.compile(fixedUnicodeScriptPattern);
+ }
+
+ @Test(expected = PatternSyntaxException.class)
+ public void testInvalidPattern3() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ String fixedUnicodeScriptPattern = Utils.fixUnicodeScriptPattern("(\\\\\\\\\\\\p{IsBasicLatin}|\\p{IsTags})*+");
+ assertEquals("(\\\\\\\\\\\\p{IsBasicLatin}|\\p{IsTags})*+", fixedUnicodeScriptPattern);
+ // should throw exception
+ Pattern.compile(fixedUnicodeScriptPattern);
+ }
+}