package com.google.dart.tools.core.pub; import com.google.dart.tools.core.dart2js.ProcessRunner; import com.google.dart.tools.core.test.util.TestProject; import static com.google.dart.tools.core.DartCore.PACKAGES_DIRECTORY_NAME; import static com.google.dart.tools.core.DartCore.PUBSPEC_FILE_NAME; import static com.google.dart.tools.core.DartCore.PUBSPEC_LOCK_FILE_NAME; import junit.framework.TestCase; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import java.io.IOException; public class RunPubJobTest extends TestCase { // TODO(keertip): enable when sure it will pass on buildbot // public void test_runPubScript() throws Exception { // // PlainTestProject project = new PlainTestProject("fooBar"); // // RunPubJob pubJob = new RunPubJob(project.getProject(), "help"); // IStatus status = pubJob.runSilent(new NullProgressMonitor()); // assertStatus(status, IStatus.OK, null); // } // Assert normal operation private TestProject testProject; public void test_runSilent() { RunPubJob target = new RunPubJob(testProject.getProject(), RunPubJob.INSTALL_COMMAND, false) { @Override protected ProcessRunner newProcessRunner(ProcessBuilder builder) { ProcessRunner processRunner = new ProcessRunner(builder) { @Override public int runSync(IProgressMonitor monitor) throws IOException { return 0; } }; return processRunner; } }; IStatus status = target.runSilent(new NullProgressMonitor()); assertStatus(status, IStatus.OK, null); } // Assert a process IOException is gracefully handled correctly public void test_runSilent_ioException() { RunPubJob target = new RunPubJob(testProject.getProject(), RunPubJob.INSTALL_COMMAND, false) { @Override protected ProcessRunner newProcessRunner(ProcessBuilder builder) { // Assert valid builder information assertNotNull(builder); assertEquals(testProject.getProject().getLocation().toFile(), builder.directory()); assertTrue(builder.command().size() > 0); ProcessRunner processRunner = new ProcessRunner(builder) { @Override public int runSync(IProgressMonitor monitor) throws IOException { throw new IOException("test"); } }; return processRunner; } }; IStatus status = target.runSilent(new NullProgressMonitor()); assertStatus(status, IStatus.CANCEL, IOException.class); } // Assert a non-zero exit code generates an error status public void test_runSilent_nonZeroExitCode() { final int exitCode = 3452; RunPubJob target = new RunPubJob(testProject.getProject(), RunPubJob.INSTALL_COMMAND, false) { @Override protected ProcessRunner newProcessRunner(ProcessBuilder builder) { ProcessRunner processRunner = new ProcessRunner(builder) { @Override public int getExitCode() { return exitCode; } @Override public int runSync(IProgressMonitor monitor) throws IOException { return exitCode; } }; return processRunner; } }; IStatus status = target.runSilent(new NullProgressMonitor()); assertStatus(status, IStatus.ERROR, null); } @Override protected void setUp() throws Exception { super.setUp(); testProject = new TestProject(); if (testProject.getProject().exists()) { testProject.setFileContent(PUBSPEC_FILE_NAME, "name: myapp"); testProject.createFolder(PACKAGES_DIRECTORY_NAME); testProject.setFileContent(PUBSPEC_LOCK_FILE_NAME, "packages:"); } } private void assertStatus(IStatus status, int severity, Class<?> exceptionClass) { assertNotNull("Expected status", status); assertEquals(severity, status.getSeverity()); if (exceptionClass != null) { assertNotNull("Expected exception", status.getException()); assertEquals(exceptionClass, status.getException().getClass()); } assertNotNull("Expected message", status.getMessage()); } }