// Path: src/main/java/me/geso/jtt/exception/JTTError.java
// public class JTTError extends Error {
// 	public JTTError(String string) {
// 		super(string);
// 	}
// 	
// 	public JTTError() { }
// 	
// 	public JTTError(Throwable e) {
// 		super(e);
// 	}
// 
// 	private static final long serialVersionUID = 1L;
// }
// 
// Path: src/main/java/me/geso/jtt/exception/ParserError.java
// public class ParserError extends JTTError {
// 	private static final long serialVersionUID = 1L;
// 	private Parser parser;
// 
// 	public ParserError(String msg, Parser parser) {
// 		super(msg);
// 		this.parser = parser;
// 	}
// 
// 	public String toString() {
// 		int line = parser.getLine();
// 		Source src = parser.getSource();
// 		String lines;
// 		try {
// 			lines = src.getTargetLines(line);
// 		} catch (IOException e) {
// 			lines = "(IOException)";
// 		}
// 
// 		StringBuilder buf = new StringBuilder();
// 		buf.append(this.getMessage() + " at " + parser.getFileName() + " line "
// 				+ line);
// 		buf.append("\n==============================================\n");
// 		buf.append(lines);
// 		buf.append("\n==============================================");
// 
// 		return buf.toString();
// 	}
// }
// 
// Path: src/main/java/me/geso/jtt/exception/TemplateLoadingError.java
// public class TemplateLoadingError extends JTTError {
// 	private static final long serialVersionUID = 1L;
// 
// 	@Override
// 	public String toString() {
// 		return "TemplateLoadingError [includePaths=" + includePaths
// 				+ ", fileName=" + fileName + "]";
// 	}
// 
// 	private final List<Path> includePaths;
// 	private final String fileName;
// 
// 	public TemplateLoadingError(String fileName, List<Path> includePaths) {
// 		this.fileName = fileName;
// 		this.includePaths = includePaths;
// 	}
// 
// }


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import me.geso.jtt.exception.JTTError;
import me.geso.jtt.exception.ParserError;
import me.geso.jtt.exception.TemplateLoadingError;
import org.junit.Test;
			assertTrue(e.toString().contains("[% IF %]"));
		}
		assertTrue(errorSeen);
	}
	
	@Test
	public void testAttribute() throws IOException, JTTError {
		Foo foo = new Foo();
		foo.n = 5963;

		HashMap<String, Object> params = new HashMap<>();
		params.put("foo", foo);
		assertEquals("5963", renderString("[% foo.n %]", params));
		assertEquals("(null)", renderString("[% foo.n() %]", params));
	}
	
	class Foo {
		public int n;
	}

	// ---------------------------------------------------------------
	// utils.

	private String renderString(String tmpl, Map<String, Object> vars) {
		JTT jslate = new JTTBuilder().setIncludePaths(buildIncludePaths())
				.build();
		return jslate.renderString(tmpl, vars);
	}

	private String render(String fileName, Map<String, Object> vars)
// Path: src/main/java/me/geso/jtt/exception/JTTError.java
// public class JTTError extends Error {
// 	public JTTError(String string) {
// 		super(string);
// 	}
// 	
// 	public JTTError() { }
// 	
// 	public JTTError(Throwable e) {
// 		super(e);
// 	}
// 
// 	private static final long serialVersionUID = 1L;
// }
// 
// Path: src/main/java/me/geso/jtt/exception/ParserError.java
// public class ParserError extends JTTError {
// 	private static final long serialVersionUID = 1L;
// 	private Parser parser;
// 
// 	public ParserError(String msg, Parser parser) {
// 		super(msg);
// 		this.parser = parser;
// 	}
// 
// 	public String toString() {
// 		int line = parser.getLine();
// 		Source src = parser.getSource();
// 		String lines;
// 		try {
// 			lines = src.getTargetLines(line);
// 		} catch (IOException e) {
// 			lines = "(IOException)";
// 		}
// 
// 		StringBuilder buf = new StringBuilder();
// 		buf.append(this.getMessage() + " at " + parser.getFileName() + " line "
// 				+ line);
// 		buf.append("\n==============================================\n");
// 		buf.append(lines);
// 		buf.append("\n==============================================");
// 
// 		return buf.toString();
// 	}
// }
// 
// Path: src/main/java/me/geso/jtt/exception/TemplateLoadingError.java
// public class TemplateLoadingError extends JTTError {
// 	private static final long serialVersionUID = 1L;
// 
// 	@Override
// 	public String toString() {
// 		return "TemplateLoadingError [includePaths=" + includePaths
// 				+ ", fileName=" + fileName + "]";
// 	}
// 
// 	private final List<Path> includePaths;
// 	private final String fileName;
// 
// 	public TemplateLoadingError(String fileName, List<Path> includePaths) {
// 		this.fileName = fileName;
// 		this.includePaths = includePaths;
// 	}
// 
// }


// Path: src/test/java/me/geso/jtt/JTTTest.java
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import me.geso.jtt.exception.JTTError;
import me.geso.jtt.exception.ParserError;
import me.geso.jtt.exception.TemplateLoadingError;
import org.junit.Test;

			assertTrue(e.toString().contains("[% IF %]"));
		}
		assertTrue(errorSeen);
	}
	
	@Test
	public void testAttribute() throws IOException, JTTError {
		Foo foo = new Foo();
		foo.n = 5963;

		HashMap<String, Object> params = new HashMap<>();
		params.put("foo", foo);
		assertEquals("5963", renderString("[% foo.n %]", params));
		assertEquals("(null)", renderString("[% foo.n() %]", params));
	}
	
	class Foo {
		public int n;
	}

	// ---------------------------------------------------------------
	// utils.

	private String renderString(String tmpl, Map<String, Object> vars) {
		JTT jslate = new JTTBuilder().setIncludePaths(buildIncludePaths())
				.build();
		return jslate.renderString(tmpl, vars);
	}

	private String render(String fileName, Map<String, Object> vars)
			throws JTTError, TemplateLoadingError, IOException {