/** * Copyright wro4j@2011 */ package ro.isdc.wro.extensions.processor.support.linter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Arrays; import org.apache.commons.lang3.ArrayUtils; import org.junit.Test; import ro.isdc.wro.WroRuntimeException; /** * @author Alex Objelean */ public class TestOptionsBuilder { private final OptionsBuilder optionsBuilder = new OptionsBuilder(); @Test public void shouldBuildOptions() throws Exception { assertEquals("{}", optionsBuilder.build("")); } @Test public void shouldBuildOptionsFromNullArray() throws Exception { final String[] options = null; assertEquals("{}", optionsBuilder.build(options)); } @Test public void shouldBuildOptionsFromNullCSV() { assertEquals("{}", optionsBuilder.buildFromCsv(null)); } @Test public void shouldBuildOptionsFromCSV() { final String actual = optionsBuilder.buildFromCsv("a=1,b=2"); assertEquals("{\"a\": 1,\"b\": 2}", actual); } @Test public void testOptionWithNoValue() throws Exception { assertEquals("{\"devel\": true}", optionsBuilder.build("devel")); } @Test public void testOptionWithValue() throws Exception { assertEquals("{\"maxerr\": 100}", optionsBuilder.build("maxerr=100")); } @Test public void predefOption() throws Exception { assertEquals("{\"predef\": ['YUI']}", optionsBuilder.build("predef=['YUI']")); } @Test public void predefOptionWithQuotes() throws Exception { assertEquals("{\"predef\": \"['YUI']\"}", optionsBuilder.build("predef=\"['YUI']\"")); } @Test public void predefOptionWithManyOptions() throws Exception { assertEquals("{\"predef\": ['YUI','window','document','OnlineOpinion','xui']}", optionsBuilder.build("predef=['YUI','window','document','OnlineOpinion','xui']")); } @Test public void testOptionWithValueAndSpaces() throws Exception { assertEquals("{\"maxerr\": 100}", optionsBuilder.build("maxerr = 100")); } @Test(expected = IllegalArgumentException.class) public void testOptionWithEmptyValue() throws Exception { assertEquals("{\"maxerr\": 100}", optionsBuilder.build("maxerr=")); } @Test public void splitingNullOptionProduceEmptyArray() { assertTrue(Arrays.equals(ArrayUtils.EMPTY_STRING_ARRAY, optionsBuilder.splitOptions(null))); } @Test public void splitingEmptyOption() { assertTrue(Arrays.equals(new String[] { "" }, optionsBuilder.splitOptions(""))); } @Test public void splitingOneOption() { assertTrue(Arrays.equals(new String[] { "o1" }, optionsBuilder.splitOptions("o1"))); } @Test public void splitingTwoOptions() { assertTrue(Arrays.equals(new String[] { "o1", "o2" }, optionsBuilder.splitOptions("o1,o2"))); } @Test public void splitingComplexOption() { final String option = "predef=['YUI','window','document','OnlineOpinion','xui']"; final String[] result = optionsBuilder.splitOptions(option); assertEquals(1, result.length); assertTrue(Arrays.equals(new String[] { option }, result)); } @Test public void splitingComplexOptions() { final String option = "option1,option2,option3=['YUI','window','document','xui'],option4,option5=['YUI','xui'],option6"; final String[] result = optionsBuilder.splitOptions(option); assertEquals(6, result.length); assertEquals( Arrays.toString(new String[] { "option1", "option2", "option3=['YUI','window','document','xui']", "option4", "option5=['YUI','xui']", "option6" }), Arrays.toString(result)); } @Test public void splitOptionsWithHiphen() { final String option = "ids,adjoining-classes,box-model,box-sizing,compatible-vendor-prefixes,display-property-grouping,duplicate-background-images,duplicate-properties,empty-rules,errors,fallback-colors,floats,font-faces,font-sizes,gradients,import,important,known-properties,outline-none,overqualified-elements,qualified-headings,regex-selectors,rules-count,shorthand,text-indent,unique-headings,universal-selector,unqualified-attributes"; final String[] result = optionsBuilder.splitOptions(option); assertEquals(28, result.length); } @Test(expected = WroRuntimeException.class) public void cannotBuildCSVWheInvalidOptionsFormatProvided() { optionsBuilder.buildFromCsv("var:unused"); } }