/* * Copyright 2006-2012 The Scriptella Project Team. * * 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 scriptella.configuration; import scriptella.AbstractTestCase; import scriptella.spi.DialectIdentifier; import java.util.List; import java.util.regex.Pattern; import static scriptella.configuration.XmlElementTest.asElement; /** * Tests for {@link DialectBasedContentEl} class. * * @author Fyodor Kupolov * @version 1.0 */ public class DialectBasedContentElTest extends AbstractTestCase { /** * Tests handling of mixed dialogs content. */ public void test() { String xml = "<query>" + " \nDef1<!--Comment -->De<!--Comment2-->f2\n" + "<dialect name=\"d1\">D<!--Comment-->1</dialect>" + "<![CDATA[De]]>f3" + "<dialect name=\"d2\"><!--Commend-->D2</dialect>" + "<!--Comment-->\nDef4<!--Comment--> " + "</query>"; XmlElement xmlElement = asElement(xml); DialectBasedContentEl d = new DialectBasedContentEl(xmlElement); List<DialectBasedContentEl.Dialect> dialects = d.getDialects(); assertEquals(5, dialects.size()); DialectBasedContentEl.Dialect dialect = dialects.get(0); assertEquals(" \nDef1Def2\n", asString(dialect.getContentEl())); dialect = dialects.get(1); assertEquals("D1", asString(dialect.getContentEl())); assertTrue(dialect.getName().matcher("d1").matches()); dialect = dialects.get(2); assertEquals("Def3", asString(dialect.getContentEl())); assertNull(dialect.getName()); dialect = dialects.get(3); assertEquals("D2", asString(dialect.getContentEl())); assertTrue(dialect.getName().matcher("d2").matches()); dialect = dialects.get(4); assertEquals("\nDef4 ", asString(dialect.getContentEl())); assertNull(dialect.getName()); //Now check if dialects are searched correctly assertEquals(" \nDef1Def2\nDef3\nDef4 ", asString(d.getContent(null))); assertEquals(" \nDef1Def2\nDef3\nDef4 ", asString(d.getContent(new DialectIdentifier("XDialect", "0.0")))); assertEquals(" \nDef1Def2\nD1Def3\nDef4 ", asString(d.getContent(new DialectIdentifier("d1", "1.0")))); assertEquals(" \nDef1Def2\nDef3D2\nDef4 ", asString(d.getContent(new DialectIdentifier("d2", "1.0")))); } /** * Tests {@link scriptella.configuration.DialectBasedContentEl.Dialect} class. */ public void testDialect() { DialectBasedContentEl.Dialect d = new DialectBasedContentEl.Dialect(); //null dialect should be matched assertTrue(d.matches(null)); assertTrue(d.matches(DialectIdentifier.NULL_DIALECT)); d.setName(Pattern.compile(".*")); assertTrue(d.matches(DialectIdentifier.NULL_DIALECT)); d.setName(Pattern.compile("dl")); assertFalse(d.matches(DialectIdentifier.NULL_DIALECT)); } /** * Tests if substring matching is performed. See CR #5252 for more details. */ public void testSubstringMatching() { DialectBasedContentEl.Dialect d = new DialectBasedContentEl.Dialect(); d.setName(Pattern.compile("tr")); d.setVersion(Pattern.compile("1.0")); //Substring matching is used for names but not versions assertFalse(d.matches(new DialectIdentifier("string", "2.1.0"))); assertTrue(d.matches(new DialectIdentifier("string", "1.0"))); } public void testExclude() { DialectBasedContentEl.Dialect d = new DialectBasedContentEl.Dialect(); d.setName(Pattern.compile("oracle")); d.setExclude(true); //Substring only oracle database of any version should be excluded assertFalse(d.matches(new DialectIdentifier("oracle", "1.0"))); assertFalse(d.matches(new DialectIdentifier("oracle", "2.0"))); assertFalse(d.matches(new DialectIdentifier("oracle", null))); assertTrue(d.matches(new DialectIdentifier("sybase", null))); d.setVersion(Pattern.compile("1.0")); //Substring only oracle 1.0 database of any version should be excluded assertFalse(d.matches(new DialectIdentifier("oracle", "1.0"))); assertTrue(d.matches(new DialectIdentifier("oracle", "2.0"))); assertTrue(d.matches(new DialectIdentifier("sybase", null))); assertTrue(d.matches(new DialectIdentifier("sybase", "1.1"))); } /** * Tests when no content was matched. */ public void testNullDialect() { String xml = "<query><dialect name='ru'>preved</dialect></query>"; XmlElement xmlElement = asElement(xml); DialectBasedContentEl d = new DialectBasedContentEl(xmlElement); List<DialectBasedContentEl.Dialect> dialects = d.getDialects(); assertEquals(1, dialects.size()); DialectBasedContentEl.Dialect dialect = dialects.get(0); assertEquals("preved", asString(dialect.getContentEl())); //Now check if null is returned assertNull(d.getContent(null)); assertNull(d.getContent(new DialectIdentifier("en", null))); //And now check if content is returned for dialect "ru" assertEquals("preved", asString(d.getContent(new DialectIdentifier("ru", null)))); } }