diff --git a/plugins/net.bioclipse.scripting.ui.tests/src/net/bioclipse/scripting/ui/tests/JsConsoleManagerTest.java b/plugins/net.bioclipse.scripting.ui.tests/src/net/bioclipse/scripting/ui/tests/JsConsoleManagerTest.java index f25f107b2..295244d89 100644 --- a/plugins/net.bioclipse.scripting.ui.tests/src/net/bioclipse/scripting/ui/tests/JsConsoleManagerTest.java +++ b/plugins/net.bioclipse.scripting.ui.tests/src/net/bioclipse/scripting/ui/tests/JsConsoleManagerTest.java @@ -12,9 +12,23 @@ ******************************************************************************/ package net.bioclipse.scripting.ui.tests; +import static org.junit.Assert.*; + import java.io.ByteArrayInputStream; +import java.util.ArrayList; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.junit.Assert; import org.junit.Test; import net.bioclipse.core.MockIFile; @@ -74,4 +88,51 @@ public void testExecuteFile() { ).extension( "js" ); console.executeFile(file); } + + @Test + public void testExecute() throws Exception { + final IFile file1 = new MockIFile( + new ByteArrayInputStream("i = 5;".getBytes()) + ).extension( "js" ); + final IFile file2 = new MockIFile( + new ByteArrayInputStream("i = 5;".getBytes()) + ).extension( "js" ); + console.executeFile(file1); + console.execute( file1 ); + console.execute( new ArrayList() {{add(file1); add(file2);}} ); + + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + IProject project = root.getProject("TEST"); + project.create(new NullProgressMonitor()); + project.open(new NullProgressMonitor()); + String filePath = "/TEST/testFile99883423427.js"; + final IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile( + new Path(filePath) + ); + Job job = new Job("test") { + @Override + protected IStatus run( IProgressMonitor monitor ) { + try { + file.create( new ByteArrayInputStream( + "i = 5;".getBytes()), true, monitor ); + } catch ( CoreException e ) { + fail( e.getMessage() ); + return Status.CANCEL_STATUS; + } + return Status.OK_STATUS; + } + }; + job.setRule( file ); + job.schedule(); + job.join(); + + final IFile savedFile = ResourcesPlugin.getWorkspace() + .getRoot() + .getFile( new Path(filePath) ); + + console.execute( new ArrayList() {{ + add(file.getFullPath().toString()); + add(file.getFullPath().toString()); + }} ); + } } diff --git a/plugins/net.bioclipse.scripting.ui/src/net/bioclipse/scripting/ui/business/IJsConsoleManager.java b/plugins/net.bioclipse.scripting.ui/src/net/bioclipse/scripting/ui/business/IJsConsoleManager.java index 37c7ea0e4..1b703244a 100644 --- a/plugins/net.bioclipse.scripting.ui/src/net/bioclipse/scripting/ui/business/IJsConsoleManager.java +++ b/plugins/net.bioclipse.scripting.ui/src/net/bioclipse/scripting/ui/business/IJsConsoleManager.java @@ -12,6 +12,8 @@ ******************************************************************************/ package net.bioclipse.scripting.ui.business; +import java.util.List; + import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IProgressMonitor; @@ -21,6 +23,7 @@ import net.bioclipse.core.TestClasses; import net.bioclipse.core.TestMethods; import net.bioclipse.managers.business.IBioclipseManager; +import net.bioclipse.core.business.BioclipseException; import net.bioclipse.core.util.IJavaScriptConsolePrinterChannel; /** @@ -58,14 +61,34 @@ public interface IJsConsoleManager extends IBioclipseManager, @TestMethods("testEval") public String eval(String command); + @Recorded + @TestMethods("testExecute") + public void execute(IFile file); + + @Recorded + @TestMethods("testExecute") + @PublishedMethod( params="String file", + methodSummary="Runs a js script file.") + public void execute(String file); + + @Recorded + @TestMethods("testExecute") + @PublishedMethod( params="List files", + methodSummary="Runs a js script file.") + public void execute(List files) throws BioclipseException; + @Recorded @TestMethods("testExecuteFile") + @Deprecated public void executeFile(IFile file); @Recorded - @PublishedMethod(params="String filePath", - methodSummary="Runs a js script file.") + @PublishedMethod( + params="String filePath", + methodSummary="Runs a js script file. Marked for removal. " + + "Use js.execute instead." ) @TestMethods("testExecuteFile") + @Deprecated public void executeFile(String filePath); public void printError( Throwable t ); diff --git a/plugins/net.bioclipse.scripting.ui/src/net/bioclipse/scripting/ui/business/JsConsoleManager.java b/plugins/net.bioclipse.scripting.ui/src/net/bioclipse/scripting/ui/business/JsConsoleManager.java index 41b166a5f..6c75cb6c8 100644 --- a/plugins/net.bioclipse.scripting.ui/src/net/bioclipse/scripting/ui/business/JsConsoleManager.java +++ b/plugins/net.bioclipse.scripting.ui/src/net/bioclipse/scripting/ui/business/JsConsoleManager.java @@ -12,6 +12,11 @@ ******************************************************************************/ package net.bioclipse.scripting.ui.business; +import java.util.ArrayList; +import java.util.List; + +import net.bioclipse.core.ResourcePathTransformer; +import net.bioclipse.core.business.BioclipseException; import net.bioclipse.managers.business.IBioclipseManager; import net.bioclipse.scripting.Activator; import net.bioclipse.scripting.Hook; @@ -92,8 +97,8 @@ public void run( Object result ) { ); return evalResult[0]; } - - public void executeFile( final IFile file ) { + + public void execute( final IFile file ) { Job job = new Job("JavaScript execution") { @Override protected IStatus run(final IProgressMonitor monitor) { @@ -152,9 +157,35 @@ public void run() { } }; job.schedule(); + + } + + @Deprecated + public void executeFile( final IFile file ) { + execute(file); } public void printError( Throwable t ) { print( getJsConsoleView().getErrorMessage( t ) ); } + + public void execute( List files ) throws BioclipseException { + int i = 0; + for ( Object o : files) { + if ( o instanceof IFile ) { + execute( (IFile)o ); + } + else if ( o instanceof String ) { + execute( ResourcePathTransformer.getInstance() + .transform( (String)o ) ); + } + else { + throw new BioclipseException( + "List of files given to the js.execute method contained " + + "an element at index " + i + " which could not be " + + "identified as a file. The element was: " + o.toString() ); + } + i++; + } + } }