2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.stmt;
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
12 import static org.junit.jupiter.api.Assertions.assertTrue;
14 import java.util.Optional;
15 import java.util.regex.Pattern;
16 import org.junit.jupiter.api.Test;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
20 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
22 class Bug6180Test extends AbstractYangTest {
25 final var schemaContext = assertEffectiveModel("/bugs/bug6180/string-test.yang");
26 assertEquals(1, schemaContext.getModules().size());
27 final var module = schemaContext.getModules().iterator().next();
28 assertEquals(Optional.of(" 1. this text contains \"string enclosed in double quotes\" and"
29 + " special characters: \\,\n,\t 2. this text contains \"string enclosed in double quotes\""
30 + " and special characters: \\,\n,\n, 3. this text contains \"string enclosed in"
31 + " double quotes\" and special characters: \\,\n,\t "), module.getDescription());
35 void doubleQuotesTest() {
36 verifyDoubleQuotesExpression(assertEffectiveModel("/bugs/bug6180/double-quotes.yang"));
40 void doubleQuotesSinbleInsideTest() {
41 verifySingleQuotesExpression(assertEffectiveModel("/bugs/bug6180/double-quotes-single-inside.yang"));
45 void singleQuotesTest() {
46 verifyDoubleQuotesExpression(assertEffectiveModel("/bugs/bug6180/single-quotes.yang"));
49 private static void verifyDoubleQuotesExpression(final EffectiveModelContext schemaContext) {
50 final var bar = assertInstanceOf(ContainerSchemaNode.class,
51 schemaContext.getDataChildByName(QName.create("foo", "2016-07-11", "bar")));
52 assertEquals("/foo != \"bar\"", bar.getWhenCondition().orElseThrow().toString());
54 final var typeDefinitions = schemaContext.getTypeDefinitions();
55 assertEquals(1, typeDefinitions.size());
56 final var patternConstraints = assertInstanceOf(StringTypeDefinition.class, typeDefinitions.iterator().next())
57 .getPatternConstraints();
58 assertEquals(1, patternConstraints.size());
59 final var pattern = patternConstraints.iterator().next();
60 assertEquals("^(?:\".*\")$", pattern.getJavaPatternString());
61 assertTrue(Pattern.compile(pattern.getJavaPatternString()).matcher("\"enclosed string in quotes\"").matches());
64 private static void verifySingleQuotesExpression(final EffectiveModelContext schemaContext) {
65 final var bar = assertInstanceOf(ContainerSchemaNode.class,
66 schemaContext.getDataChildByName(QName.create("foo", "2016-07-11", "bar")));
67 assertEquals("/foo != 'bar'", bar.getWhenCondition().orElseThrow().toString());
69 final var typeDefinitions = schemaContext.getTypeDefinitions();
70 assertEquals(1, typeDefinitions.size());
71 final var patternConstraints = assertInstanceOf(StringTypeDefinition.class, typeDefinitions.iterator().next())
72 .getPatternConstraints();
73 assertEquals(1, patternConstraints.size());
74 final var pattern = patternConstraints.iterator().next();
75 assertEquals("^(?:'.*')$", pattern.getJavaPatternString());
76 assertTrue(Pattern.compile(pattern.getJavaPatternString()).matcher("'enclosed string in quotes'").matches());