// Path: src/test/java/org/embulk/parser/EmbulkTestOutputPlugin.java
// public static class OutputRecord {
// 	private Map<String, Object> map = new LinkedHashMap<>();
// 
// 	public void set(String name, Object value) {
// 		map.put(name, value);
// 	}
// 
// 	public String getAsString(String name) {
// 		try {
// 			return (String) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	public Long getAsLong(String name) {
// 		try {
// 			return (Long) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	public Double getAsDouble(String name) {
// 		try {
// 			return (Double) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	public Boolean getAsBoolean(String name) {
// 		try {
// 			return (Boolean) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	public Timestamp getAsTimestamp(String name) {
// 		try {
// 			return (Timestamp) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return map.toString();
// 	}
// }


import java.io.Closeable;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.embulk.EmbulkEmbed;
import org.embulk.EmbulkEmbed.Bootstrap;
import org.embulk.config.ConfigLoader;
import org.embulk.config.ConfigSource;
import org.embulk.parser.EmbulkTestOutputPlugin.OutputRecord;
import org.embulk.plugin.InjectedPluginSource;
import org.embulk.spi.InputPlugin;
import org.embulk.spi.OutputPlugin;
import org.embulk.spi.ParserPlugin;
import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Provider;


		// output plugins
		InjectedPluginSource.registerPluginTo(binder, OutputPlugin.class, EmbulkTestOutputPlugin.TYPE,
				EmbulkTestOutputPlugin.class);
		binder.bind(EmbulkTestOutputPlugin.class).toProvider(new Provider<EmbulkTestOutputPlugin>() {

			@Override
			public EmbulkTestOutputPlugin get() {
				return embulkTestOutputPlugin;
			}
		});
	}

	public ConfigLoader getConfigLoader() {
		if (configLoader == null) {
			configLoader = getEmbulkEmbed().newConfigLoader();
		}
		return configLoader;
	}

	public ConfigSource newConfigSource() {
		return getConfigLoader().newConfigSource();
	}

	public EmbulkTestParserConfig newParserConfig(String type) {
		EmbulkTestParserConfig parser = new EmbulkTestParserConfig();
		parser.setType(type);
		return parser;
	}


// Path: src/test/java/org/embulk/parser/EmbulkTestOutputPlugin.java
// public static class OutputRecord {
// 	private Map<String, Object> map = new LinkedHashMap<>();
// 
// 	public void set(String name, Object value) {
// 		map.put(name, value);
// 	}
// 
// 	public String getAsString(String name) {
// 		try {
// 			return (String) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	public Long getAsLong(String name) {
// 		try {
// 			return (Long) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	public Double getAsDouble(String name) {
// 		try {
// 			return (Double) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	public Boolean getAsBoolean(String name) {
// 		try {
// 			return (Boolean) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	public Timestamp getAsTimestamp(String name) {
// 		try {
// 			return (Timestamp) map.get(name);
// 		} catch (Exception e) {
// 			throw new RuntimeException(MessageFormat.format("name={0}", name), e);
// 		}
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return map.toString();
// 	}
// }


// Path: src/test/java/org/embulk/parser/EmbulkPluginTester.java
import java.io.Closeable;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.embulk.EmbulkEmbed;
import org.embulk.EmbulkEmbed.Bootstrap;
import org.embulk.config.ConfigLoader;
import org.embulk.config.ConfigSource;
import org.embulk.parser.EmbulkTestOutputPlugin.OutputRecord;
import org.embulk.plugin.InjectedPluginSource;
import org.embulk.spi.InputPlugin;
import org.embulk.spi.OutputPlugin;
import org.embulk.spi.ParserPlugin;
import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Provider;


		// output plugins
		InjectedPluginSource.registerPluginTo(binder, OutputPlugin.class, EmbulkTestOutputPlugin.TYPE,
				EmbulkTestOutputPlugin.class);
		binder.bind(EmbulkTestOutputPlugin.class).toProvider(new Provider<EmbulkTestOutputPlugin>() {

			@Override
			public EmbulkTestOutputPlugin get() {
				return embulkTestOutputPlugin;
			}
		});
	}

	public ConfigLoader getConfigLoader() {
		if (configLoader == null) {
			configLoader = getEmbulkEmbed().newConfigLoader();
		}
		return configLoader;
	}

	public ConfigSource newConfigSource() {
		return getConfigLoader().newConfigSource();
	}

	public EmbulkTestParserConfig newParserConfig(String type) {
		EmbulkTestParserConfig parser = new EmbulkTestParserConfig();
		parser.setType(type);
		return parser;
	}


	public List<OutputRecord> runParser(URL inFile, EmbulkTestParserConfig parser) {
