package org.infinispan.scripting; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import java.util.Arrays; import org.infinispan.commons.CacheException; import org.infinispan.scripting.impl.DataType; import org.infinispan.scripting.impl.ScriptMetadata; import org.infinispan.scripting.impl.ScriptMetadataParser; import org.testng.annotations.Test; @Test(groups="functional", testName="scripting.ScriptMetadataTest") public class ScriptMetadataTest { public void testDoubleSlashComment() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.js", "// name=test"); assertEquals("test", metadata.name()); } public void testDefaultScriptExtension() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test", "// name=test"); assertEquals("test", metadata.name()); } public void testDefaultScriptExtension1() { ScriptMetadata metadata = ScriptMetadataParser.parse("test.", "/* name=exampleName */"); assertEquals("test.", metadata.name()); } public void testHashComment() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.js", "# name=test"); assertEquals("test", metadata.name()); } public void testDoublSemicolonComment() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.js", ";; name=test"); assertEquals("test", metadata.name()); } public void testMultiplePairs() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.scala", "// name=test,language=scala"); assertEquals("test", metadata.name()); assertEquals("scala", metadata.language().get()); } public void testDoubleQuotedValues() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.scala", "// name=\"te,st\",language=scala"); assertEquals("te,st", metadata.name()); assertEquals("scala", metadata.language().get()); } public void testSingleQuotedValues() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.scala", "// name='te,st',language=scala"); assertEquals("te,st", metadata.name()); assertEquals("scala", metadata.language().get()); } public void testSingleQuatedValuesWithProvidedExtension() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test", "// name='te,st',language=scala,extension=scala"); assertEquals("te,st", metadata.name()); assertEquals("scala", metadata.language().get()); assertEquals("scala", metadata.extension()); } public void testDataTypeUtf8() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test", "// name='test',language=javascript,datatype='text/plain; charset=utf-8'"); assertEquals("test", metadata.name()); assertEquals("javascript", metadata.language().get()); assertEquals("js", metadata.extension()); assertEquals(DataType.UTF8, metadata.dataType()); } public void testDataTypeOther() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test", "// name='test',language=javascript,datatype='text/plain; charset=us-ascii'"); assertEquals("test", metadata.name()); assertEquals("javascript", metadata.language().get()); assertEquals("js", metadata.extension()); assertEquals(DataType.DEFAULT, metadata.dataType()); } public void testArrayValues() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.scala", "// name=test,language=javascript,parameters=[a,b,c]"); assertEquals("test", metadata.name()); assertEquals("javascript", metadata.language().get()); assertTrue(metadata.parameters().containsAll(Arrays.asList("a", "b", "c"))); } public void testMultiLine() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.scala", "// name=test\n// language=scala"); assertEquals("test", metadata.name()); assertEquals("scala", metadata.language().get()); } @Test(expectedExceptions=IllegalArgumentException.class, expectedExceptionsMessageRegExp=".*Script parameters must be declared using.*") public void testBrokenParameters() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.scala", "// name=test,language=javascript,parameters=\"a,b,c\""); assertEquals("test", metadata.name()); assertEquals("javascript", metadata.language()); assertTrue(metadata.parameters().containsAll(Arrays.asList("a", "b", "c"))); } @Test(expectedExceptions=CacheException.class, expectedExceptionsMessageRegExp=".*Unknown script mode:.*") public void testUnknownScriptProperty() throws Exception { ScriptMetadata metadata = ScriptMetadataParser.parse("test.scala", "// name=test,language=javascript,parameters=[a,b,c],unknown=example"); assertEquals("test", metadata.name()); assertEquals("javascript", metadata.language()); assertTrue(metadata.parameters().containsAll(Arrays.asList("a", "b", "c"))); } }