package org.trimou.engine.interpolation;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.util.Iterator;
import org.junit.Test;
import org.trimou.Hammer;
import org.trimou.engine.MustacheEngine;
import org.trimou.engine.MustacheEngineBuilder;
/**
*
* @author Martin Kouba
*/
public class BracketDotKeySplitterTest {
@Test
public void testSplit() {
BracketDotKeySplitter splitter = new BracketDotKeySplitter();
assertIterator(splitter.split("a..bar:.c"), "a", "bar:", "c");
assertIterator(splitter.split(". "), " ");
assertIterator(splitter.split("."), ".");
assertIterator(splitter.split("foo"), "foo");
assertIterator(splitter.split("foo[\"bar\"]"), "foo", "bar");
assertIterator(splitter.split("foo[\"a.b.c\"]"), "foo", "a.b.c");
assertIterator(splitter.split("foo[\"bar\"].baz"), "foo", "bar", "baz");
assertIterator(splitter.split("a[\"b\"].c.d[\"e\"][\"f\"]"), "a", "b",
"c", "d", "e", "f");
assertIterator(splitter.split("foo['bar']"), "foo", "bar");
assertIterator(splitter.split("foo['bar dot'][\"qux\"].me"), "foo", "bar dot", "qux", "me");
}
@Test
public void testInterpolation() {
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.setKeySplitter(new BracketDotKeySplitter()).build();
assertEquals("10", engine.compileMustache("bracket_dot_key_splitter_01",
"{{this[\"age\"]}}").render(new Hammer()));
assertEquals("foo", engine
.compileMustache("bracket_dot_key_splitter_02", "{{this[0]}}")
.render(new String[] { "foo" }));
}
private void assertIterator(Iterator<String> iterator, Object... elements) {
int idx = 0;
while (iterator.hasNext()) {
assertEquals(elements[idx], iterator.next());
idx++;
}
if (idx != elements.length) {
fail("Incorrect number of elements");
}
}
}