// Path: src/main/java/me/geso/jtt/JTT.java
// public class JTT {
// 	private final TemplateLoader loader;
// 	private final Syntax syntax;
// 	private Map<String, Function> functions;
// 	private JTTMessageListener warningListener;
// 	private final Escaper escaper;
// 
// 	public JTT(TemplateLoader loader, Syntax syntax,
// 			Map<String, Function> functions, JTTMessageListener warningListener, Escaper escaper) {
// 		if (syntax == null) {
// 			throw new IllegalArgumentException("syntax");
// 		}
// 		this.loader = loader;
// 		this.syntax = syntax;
// 		this.functions = functions;
// 		this.warningListener = warningListener;
// 		this.escaper = escaper;
// 	}
// 
// 	public String renderFile(String file, Map<String, Object> vars) throws JTTError {
// 		Irep irep = loader.compile(file, this.syntax);
// 		String result = this.newVM(irep, vars).run();
// 		return result;
// 	}
// 
// 	public String renderString(String src, Map<String, Object> vars)
// 			throws JTTError {
// 		if (vars == null) {
// 			vars = new HashMap<>();
// 		}
// 		Source source = Source.fromString(src);
// 		Syntax syntax = new TTSyntax("[%", "%]");
// 		List<Token> tokens = syntax.tokenize(source, src);
// 		Node ast = syntax.parse(source, tokens);
// 		Irep irep = syntax.compile(source, ast);
// 		String result = this.newVM(irep, vars).run();
// 		return result;
// 	}
// 
// 	private VM newVM(Irep irep, Map<String, Object> vars) {
// 		return new VM(syntax, loader, functions, warningListener, escaper, irep, vars);
// 	}
// }
// 
// Path: src/main/java/me/geso/jtt/JTTBuilder.java
// public class JTTBuilder {
// 	private List<Path> includePaths = new ArrayList<>();
// 	private JTTMessageListener warningListener;
// 	private final Map<String, Function> functions = new HashMap<String,Function>();
// 	private TemplateCache templateCache = new NullTemplateCache();
// 	private Syntax syntax = new TTSyntax();
// 	private Escaper escaper = new HTMLEscaper();
// 	
// 	public JTTBuilder() {
// 	}
// 
// 	/**
// 	 * Build JTT class instance.
// 	 * 
// 	 * @return Created instance.
// 	 */
// 	public JTT build() {
// 		TemplateLoader loader = new TemplateLoader(getIncludePaths(), this.templateCache);
// 		JTT jtt = new JTT(loader, this.syntax, functions, warningListener, escaper);
// 		return jtt;
// 	}
// 
// 	public List<Path> getIncludePaths() {
// 		return includePaths;
// 	}
// 
// 	public JTTBuilder addIncludePath(Path path) {
// 		if (this.includePaths == null) {
// 			this.includePaths = new ArrayList<>();
// 		}
// 		this.includePaths.add(path);
// 		return this;
// 	}
// 
// 	public JTTBuilder setIncludePaths(List<Path> includePaths) {
// 		this.includePaths = includePaths;
// 		return this;
// 	}
// 
// 	public JTTBuilder setWarningListener(JTTMessageListener warningListener) {
// 		this.warningListener = warningListener;
// 		return this;
// 	}
// 	
// 	public JTTBuilder addFunction(String name, Function function) {
// 		this.functions.put(name, function);
// 		return this;
// 	}
// 
// 	public JTTBuilder setTemplateCache(TemplateCache templateCache) {
// 		this.templateCache = templateCache;
// 		return this;
// 	}
// 	
// 	public JTTBuilder setEscaper(Escaper escaper) {
// 		this.escaper = escaper;
// 		return this;
// 	}
// 
// 	public JTTBuilder setSyntax(Syntax syntax) {
// 		if (syntax == null) {
// 			throw new Error("Syntax must not be null");
// 		}
// 		this.syntax = syntax;
// 		return this;
// 	}
// }


import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.*;
import java.io.File;
import java.util.HashMap;
import me.geso.jtt.JTT;
import me.geso.jtt.JTTBuilder;
import org.junit.Test;
package me.geso.jtt.exception;





public class VMErrorTest {

	@Test
	public void test() {
		boolean seenError = false;

		JTT jtt = new JTTBuilder().addIncludePath(
				new File("src/test/resources/").toPath()).build();
		try {
			jtt.renderFile("runtime-error.tt", new HashMap<>());
		} catch (VMError e) {
			seenError = true;
			assertThat(e.toString(), containsString("[% null < 3 %]"));
		}
// Path: src/main/java/me/geso/jtt/JTT.java
// public class JTT {
// 	private final TemplateLoader loader;
// 	private final Syntax syntax;
// 	private Map<String, Function> functions;
// 	private JTTMessageListener warningListener;
// 	private final Escaper escaper;
// 
// 	public JTT(TemplateLoader loader, Syntax syntax,
// 			Map<String, Function> functions, JTTMessageListener warningListener, Escaper escaper) {
// 		if (syntax == null) {
// 			throw new IllegalArgumentException("syntax");
// 		}
// 		this.loader = loader;
// 		this.syntax = syntax;
// 		this.functions = functions;
// 		this.warningListener = warningListener;
// 		this.escaper = escaper;
// 	}
// 
// 	public String renderFile(String file, Map<String, Object> vars) throws JTTError {
// 		Irep irep = loader.compile(file, this.syntax);
// 		String result = this.newVM(irep, vars).run();
// 		return result;
// 	}
// 
// 	public String renderString(String src, Map<String, Object> vars)
// 			throws JTTError {
// 		if (vars == null) {
// 			vars = new HashMap<>();
// 		}
// 		Source source = Source.fromString(src);
// 		Syntax syntax = new TTSyntax("[%", "%]");
// 		List<Token> tokens = syntax.tokenize(source, src);
// 		Node ast = syntax.parse(source, tokens);
// 		Irep irep = syntax.compile(source, ast);
// 		String result = this.newVM(irep, vars).run();
// 		return result;
// 	}
// 
// 	private VM newVM(Irep irep, Map<String, Object> vars) {
// 		return new VM(syntax, loader, functions, warningListener, escaper, irep, vars);
// 	}
// }
// 
// Path: src/main/java/me/geso/jtt/JTTBuilder.java
// public class JTTBuilder {
// 	private List<Path> includePaths = new ArrayList<>();
// 	private JTTMessageListener warningListener;
// 	private final Map<String, Function> functions = new HashMap<String,Function>();
// 	private TemplateCache templateCache = new NullTemplateCache();
// 	private Syntax syntax = new TTSyntax();
// 	private Escaper escaper = new HTMLEscaper();
// 	
// 	public JTTBuilder() {
// 	}
// 
// 	/**
// 	 * Build JTT class instance.
// 	 * 
// 	 * @return Created instance.
// 	 */
// 	public JTT build() {
// 		TemplateLoader loader = new TemplateLoader(getIncludePaths(), this.templateCache);
// 		JTT jtt = new JTT(loader, this.syntax, functions, warningListener, escaper);
// 		return jtt;
// 	}
// 
// 	public List<Path> getIncludePaths() {
// 		return includePaths;
// 	}
// 
// 	public JTTBuilder addIncludePath(Path path) {
// 		if (this.includePaths == null) {
// 			this.includePaths = new ArrayList<>();
// 		}
// 		this.includePaths.add(path);
// 		return this;
// 	}
// 
// 	public JTTBuilder setIncludePaths(List<Path> includePaths) {
// 		this.includePaths = includePaths;
// 		return this;
// 	}
// 
// 	public JTTBuilder setWarningListener(JTTMessageListener warningListener) {
// 		this.warningListener = warningListener;
// 		return this;
// 	}
// 	
// 	public JTTBuilder addFunction(String name, Function function) {
// 		this.functions.put(name, function);
// 		return this;
// 	}
// 
// 	public JTTBuilder setTemplateCache(TemplateCache templateCache) {
// 		this.templateCache = templateCache;
// 		return this;
// 	}
// 	
// 	public JTTBuilder setEscaper(Escaper escaper) {
// 		this.escaper = escaper;
// 		return this;
// 	}
// 
// 	public JTTBuilder setSyntax(Syntax syntax) {
// 		if (syntax == null) {
// 			throw new Error("Syntax must not be null");
// 		}
// 		this.syntax = syntax;
// 		return this;
// 	}
// }


// Path: src/test/java/me/geso/jtt/exception/VMErrorTest.java
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.*;
import java.io.File;
import java.util.HashMap;
import me.geso.jtt.JTT;
import me.geso.jtt.JTTBuilder;
import org.junit.Test;

package me.geso.jtt.exception;





public class VMErrorTest {

	@Test
	public void test() {
		boolean seenError = false;

		JTT jtt = new JTTBuilder().addIncludePath(
				new File("src/test/resources/").toPath()).build();
		try {
			jtt.renderFile("runtime-error.tt", new HashMap<>());
		} catch (VMError e) {
			seenError = true;
			assertThat(e.toString(), containsString("[% null < 3 %]"));
		}
		assertTrue(seenError);