content: /**
   * 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");
    }
  }
  