Package com.cadrlife.jhaml

Source Code of com.cadrlife.jhaml.AttributeHashTest

package com.cadrlife.jhaml;

import static org.junit.Assert.*;

import java.io.StringReader;
import java.util.List;
import java.util.Map;

import org.junit.Test;

import com.cadrlife.jhaml.internal.AttributeValue;
import com.cadrlife.jhaml.internal.JHamlParser;
import com.cadrlife.jhaml.internal.Line;

public class AttributeHashTest {
 
  @Test
  public void string() {
    String input = "{:a => \"Hello World\"}";
    assertAttributeValue(input,"a","Hello World");
  }
 
  @Test
  public void emptyString() {
    String input = "{:a => \"\"}";
    assertAttributeValue(input,"a","");
  }
 
  @Test
  public void unJavaLikeSingleQuotedString() {
    String input = "{:a => 'Hello'}";
    assertAttributeValue(input,"a","Hello");
  }
 
  @Test
  public void character() {
    String input = "{:a => 'H'}";
    assertAttributeValue(input,"a","H");
  }
 
  @Test
  public void stringEscaping() {
    String input = "{:a => \"\\\"Hello\\\" World\"}";
    assertAttributeValue(input,"a","\"Hello\" World");
  }
 
  @Test
  public void integer() {
    String input = "{:a => 42}";
    assertAttributeValue(input,"a","42");
  }
 
  @Test
  public void octalInteger() {
    String input = "{:a => 042}";
    assertAttributeValue(input,"a","34");
  }
 
  @Test
  public void hexInteger() {
    String input = "{:a => 0x42}";
    assertAttributeValue(input,"a","66");
  }
 
  @Test
  public void hexLong() {
    String input = "{:a => 0x42l}";
    assertAttributeValue(input,"a","66");
  }
 
  @Test
  public void floatingPoint() {
    String input = "{:a => 42.01, :b => 42.02f, :c => 42.03d}";
    assertAttributeValue(input,"a","42.01");
    assertAttributeValue(input,"b","42.02");
    assertAttributeValue(input,"c","42.03");
  }
 
  @Test
  public void numbersAsAttributeNames() {
    String input = "{1 => 42}";
    assertAttributeValue(input,"1","42");
  }
 
  @Test
  public void stringsAsAttributeNames() {
    String input = "{\"1\" => 42 }";
    assertAttributeValue(input,"1","42");
  }
 
  @Test
  public void bracesWithinValues() {
    // Broken in Haml 2.09 -- Ray
    assertAttributeValue("{\"1\" => \"}{\"}","1","}{");
    assertAttributeValue("{\"1\" => '{'}", "1", "{");
  }
 
  @Test
  public void javaExpressionsAsValues() {
    String input = "{:a => 1+2 , :b => foo(bar(baz.boo))}";
    assertAttributeValue(input, "a", "<%= 1+2 %>");
    assertAttributeValue(input, "b", "<%= foo(bar(baz.boo)) %>");
  }
 
  @Test
  public void javaExpressionsWithCommasAsValues() {
    String input = "{:a => Arrays.asList(1,2,3), :b => 1+2}";
    assertAttributeValue(input, "a", "<%= Arrays.asList(1,2,3) %>");
    assertAttributeValue(input, "b", "<%= 1+2 %>");
  }
 
  @Test
  public void javaExpressionWithAnonymousClassAsValue() {
    // Non. Trivial.
    String anon = "new Runnable() {\n@Override\npublic void run() {\n throw new RuntimeException();}\n}";
    String input = "{:a => 1+2 , :b => " + anon + ", :c => 3}";
    assertAttributeValue(input, "a", "<%= 1+2 %>");
    assertAttributeValue(input, "b", "<%= " + anon + " %>");
    assertAttributeValue(input, "c", "3");
  }
 
  @Test
  public void html5DataAttributes() {
    String input = "{:data => {:author_id => 123, :foo => 'bar', :biz => 'baz'}}";
    assertAttributeValue(input, "data-author_id", "123");
    assertAttributeValue(input, "data-foo", "bar");
    assertAttributeValue(input, "data-biz", "baz");
  }
 
  @Test
  public void html5DataAttributes_withJavaExpressions() {
    assertAttributeValue("{:data => {:one_plus_one => 1+1}}", "data-one_plus_one", "<%= 1+1 %>");
  }
 
  @Test
  public void html5DataAttributes_multipleDefs_useTheMoreExplicitAttribute() {
    String input1 = "{:data => {:foo => 'first'}, 'data-foo' => 'second'}";
    assertAttributeValue(input1, "data-foo", "second");
    String input2 = "{'data-foo' => 'first', :data => {:foo => 'second'}}";
    assertAttributeValue(input2, "data-foo", "first");
  }
 
  @Test
  public void doNotEscapeJavaExpressionValues() {
    String input = "%p{:a => foo(\"'<>&\")}";
    assertEquals("<p a='<%= foo(\"'<>&\") %>'></p>",new JHaml().parse(input));
  }
 
  @Test
  public void nullValues() {
    String input = "%p{:a => null}";
    assertEquals("<p></p>", new JHaml().parse(input));
  }
 
  @Test
  public void booleanAttributes() {
    assertEquals("<p bar baz='true' foo='bar'></p>", renderWithFormat("html4", "%p{:foo => 'bar', :bar => true, :baz => 'true'}"));
    assertEquals("<p bar='bar' baz='true' foo='bar'></p>", renderWithFormat("xhtml", "%p{:foo => 'bar', :bar => true, :baz => 'true'}"));
    assertEquals("<p baz='false' foo='bar'></p>", renderWithFormat("html4", "%p{:foo => 'bar', :bar => false, :baz => 'false'}"));
    assertEquals("<p baz='false' foo='bar'></p>", renderWithFormat("xhtml", "%p{:foo => 'bar', :bar => false, :baz => 'false'}"));
  }
 
  private String renderWithFormat(String format, String haml) {
    JHamlConfig config = new JHamlConfig();
    config.format = format;
    return new JHaml(config).parse(haml);
  }

  private void assertAttributeValue(String input, String attr, String value) {
    Map<String, AttributeValue> attrs = readAttrs(input);
    assertTrue("attribute " + attr + " not present", attrs.containsKey(attr));
    assertEquals(value, attrs.get(attr).value);
  }

  private Map<String, AttributeValue> readAttrs(String input) {
    String haml = "%p" + input + "\n";
    List<Line> lines = new JHamlParser(new StringReader(haml)).jHamlSource();
    return lines.get(0).attrMap;
  }
}
TOP

Related Classes of com.cadrlife.jhaml.AttributeHashTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.