package com.google.refine.tests.importers; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.List; import org.json.JSONObject; import org.mockito.Mockito; import com.google.refine.ProjectMetadata; import com.google.refine.RefineServlet; import com.google.refine.importers.ImportingParserBase; import com.google.refine.importers.tree.ImportColumnGroup; import com.google.refine.importers.tree.TreeImportingParserBase; import com.google.refine.importers.tree.XmlImportUtilities; import com.google.refine.importing.ImportingJob; import com.google.refine.importing.ImportingManager; import com.google.refine.model.Project; import com.google.refine.tests.RefineServletStub; import com.google.refine.tests.RefineTest; abstract class ImporterTest extends RefineTest { //mock dependencies protected Project project; protected ProjectMetadata metadata; protected ImportingJob job; protected RefineServlet servlet; protected JSONObject options; public void setUp(){ //FIXME - should we try and use mock(Project.class); - seems unnecessary complexity servlet = new RefineServletStub(); ImportingManager.initialize(servlet); project = new Project(); metadata = new ProjectMetadata(); job = ImportingManager.createJob(); options = Mockito.mock(JSONObject.class); } public void tearDown(){ project = null; metadata = null; ImportingManager.disposeJob(job.id); job = null; options = null; } protected void parseOneFile(ImportingParserBase parser, Reader reader) { parser.parseOneFile( project, metadata, job, "file-source", reader, -1, options, new ArrayList<Exception>() ); project.update(); } protected void parseOneFile(ImportingParserBase parser, InputStream inputStream) { parser.parseOneFile( project, metadata, job, "file-source", inputStream, -1, options, new ArrayList<Exception>() ); project.update(); } protected void parseOneFile(TreeImportingParserBase parser, Reader reader) { ImportColumnGroup rootColumnGroup = new ImportColumnGroup(); parser.parseOneFile( project, metadata, job, "file-source", reader, rootColumnGroup, -1, options, new ArrayList<Exception>() ); XmlImportUtilities.createColumnsFromImport(project, rootColumnGroup); project.columnModel.update(); } protected void parseOneFile(TreeImportingParserBase parser, InputStream inputStream, JSONObject options) { parseOneInputStreamAsReader(parser, inputStream, options); } protected void parseOneInputStream( TreeImportingParserBase parser, InputStream inputStream, JSONObject options) { ImportColumnGroup rootColumnGroup = new ImportColumnGroup(); List<Exception> exceptions = new ArrayList<Exception>(); parser.parseOneFile( project, metadata, job, "file-source", inputStream, rootColumnGroup, -1, options, exceptions ); postProcessProject(project, rootColumnGroup, exceptions); } protected void parseOneInputStreamAsReader( TreeImportingParserBase parser, InputStream inputStream, JSONObject options) { ImportColumnGroup rootColumnGroup = new ImportColumnGroup(); List<Exception> exceptions = new ArrayList<Exception>(); Reader reader = new InputStreamReader(inputStream); parser.parseOneFile( project, metadata, job, "file-source", reader, rootColumnGroup, -1, options, exceptions ); postProcessProject(project, rootColumnGroup, exceptions); try { reader.close(); } catch (IOException e) { //ignore errors on close } } protected void postProcessProject( Project project, ImportColumnGroup rootColumnGroup, List<Exception> exceptions) { XmlImportUtilities.createColumnsFromImport(project, rootColumnGroup); project.update(); for (Exception e : exceptions) { e.printStackTrace(); } } }