/** * Copyright 2012 Tobias Gierke <tobias.gierke@code-sourcery.de> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.codesourcery.jasm16.ide; import java.io.File; import java.io.IOException; import java.util.List; import java.util.NoSuchElementException; import de.codesourcery.jasm16.compiler.ICompilationUnit; import de.codesourcery.jasm16.ide.exceptions.ProjectAlreadyExistsException; import de.codesourcery.jasm16.ide.ui.utils.SizeAndLocation; import de.codesourcery.jasm16.parser.TestHelper; import de.codesourcery.jasm16.utils.Misc; public class DefaultWorkspaceTest extends TestHelper { private File workspaceDir; @Override protected void tearDown() throws Exception { if ( workspaceDir != null ) { Misc.deleteRecursively( workspaceDir ); workspaceDir = null; } } @Override protected void setUp() throws Exception { super.setUp(); final File tempDir = getTempDir(); workspaceDir = new File(tempDir,"workspace"); workspaceDir.mkdirs(); } public void testLoadWorkspaceWithOneProject() throws IOException, ProjectAlreadyExistsException { final IApplicationConfig config = new IApplicationConfig() { @Override public void setWorkspaceDirectory(File dir) throws IOException { } @Override public void saveConfiguration() { } @Override public File getWorkspaceDirectory() { return workspaceDir; } @Override public void storeViewCoordinates(String viewID, SizeAndLocation loc) { } @Override public SizeAndLocation getViewCoordinates(String viewId) { return null; } }; DefaultWorkspace workspace = new DefaultWorkspace( config ); assertEquals( workspaceDir , workspace.getBaseDirectory() ); workspace.open(); workspace.createNewProject("project1"); workspace.close(); workspace = new DefaultWorkspace( config ); workspace.open(); final List<IAssemblyProject> projects = workspace.getAllProjects(); assertEquals( 1 , projects.size() ); assertTrue( workspace.doesProjectExist( "project1" ) ); assertFalse( workspace.doesProjectExist( "project2" ) ); final IAssemblyProject project = projects.get(0); assertEquals( "project1" , project.getName() ); final List<ICompilationUnit> units = workspace.getBuildManager().getProjectBuilder( project ).getCompilationUnits(); assertEquals( 0 , units.size() ); assertSame( project , workspace.getProjectByName("project1" ) ); try { workspace.getProjectByName("project2" ); fail("Should've failed"); } catch(NoSuchElementException e) { // ok } } public void testLoadWorkspaceWithTwoProjects() throws IOException, ProjectAlreadyExistsException { final IApplicationConfig config = new IApplicationConfig() { @Override public void setWorkspaceDirectory(File dir) throws IOException { } @Override public void saveConfiguration() { } @Override public File getWorkspaceDirectory() { return workspaceDir; } @Override public void storeViewCoordinates(String viewID, SizeAndLocation loc) { } @Override public SizeAndLocation getViewCoordinates(String viewId) { // TODO Auto-generated method stub return null; } }; DefaultWorkspace workspace = new DefaultWorkspace( config ); assertEquals( workspaceDir , workspace.getBaseDirectory() ); workspace.open(); workspace.createNewProject("project1"); workspace.createNewProject("project2"); workspace.close(); workspace = new DefaultWorkspace( config ); workspace.open(); final List<IAssemblyProject> projects = workspace.getAllProjects(); assertEquals( 2 , projects.size() ); assertTrue( workspace.doesProjectExist( "project1" ) ); assertTrue( workspace.doesProjectExist( "project2" ) ); IAssemblyProject project1 = projects.get(0); IAssemblyProject project2 = projects.get(1); if ( "project1".equals( project2.getName() ) ) { final IAssemblyProject tmp = project1; project1 = project2; project2 = tmp; } assertEquals( "project1" , project1.getName() ); final List<ICompilationUnit> units = workspace.getBuildManager().getProjectBuilder( project1 ).getCompilationUnits(); assertEquals( 0 , units.size() ); assertSame( project1 , workspace.getProjectByName("project1" ) ); assertEquals( "project2" , project2.getName() ); final List<ICompilationUnit> units2 = workspace.getBuildManager().getProjectBuilder( project1 ).getCompilationUnits(); assertEquals( 0 , units2.size() ); assertSame( project2 , workspace.getProjectByName("project2" ) ); } public void testDeleteProject() throws IOException, ProjectAlreadyExistsException { final IApplicationConfig config = new IApplicationConfig() { @Override public void setWorkspaceDirectory(File dir) throws IOException { } @Override public void saveConfiguration() { } @Override public File getWorkspaceDirectory() { return workspaceDir; } @Override public void storeViewCoordinates(String viewID, SizeAndLocation loc) { } @Override public SizeAndLocation getViewCoordinates(String viewId) { // TODO Auto-generated method stub return null; } }; DefaultWorkspace workspace = new DefaultWorkspace( config ); workspace.open(); workspace.createNewProject("project1"); workspace.close(); assertEquals( workspaceDir , workspace.getBaseDirectory() ); workspace = new DefaultWorkspace( config ); workspace.open(); final List<IAssemblyProject> projects = workspace.getAllProjects(); assertEquals( 1 , projects.size() ); assertTrue( workspace.doesProjectExist( "project1" ) ); final IAssemblyProject project = projects.get(0); assertEquals( "project1" , project.getName() ); final List<ICompilationUnit> units = workspace.getBuildManager().getProjectBuilder( project ).getCompilationUnits(); assertEquals( 0 , units.size() ); assertSame( project , workspace.getProjectByName("project1" ) ); workspace.deleteProject( project , false ); assertEquals( 0 , workspace.getAllProjects().size() ); assertFalse( workspace.doesProjectExist( "project1" ) ); assertTrue( new File( workspaceDir, "project1" ).isDirectory() ); workspace = new DefaultWorkspace( config ); workspace.open(); assertEquals( 0 , workspace.getAllProjects().size() ); } public void testDeleteProjectPhysically() throws IOException, ProjectAlreadyExistsException { final IApplicationConfig config = new IApplicationConfig() { @Override public void setWorkspaceDirectory(File dir) throws IOException { } @Override public void saveConfiguration() { } @Override public File getWorkspaceDirectory() { return workspaceDir; } @Override public void storeViewCoordinates(String viewID, SizeAndLocation loc) { } @Override public SizeAndLocation getViewCoordinates(String viewId) { // TODO Auto-generated method stub return null; } }; DefaultWorkspace workspace = new DefaultWorkspace( config ); workspace.open(); workspace.createNewProject("project1"); workspace.close(); assertEquals( workspaceDir , workspace.getBaseDirectory() ); workspace = new DefaultWorkspace( config ); workspace.open(); final List<IAssemblyProject> projects = workspace.getAllProjects(); assertEquals( 1 , projects.size() ); assertTrue( workspace.doesProjectExist( "project1" ) ); final IAssemblyProject project = projects.get(0); assertEquals( "project1" , project.getName() ); final List<ICompilationUnit> units = workspace.getBuildManager().getProjectBuilder( project ).getCompilationUnits(); assertEquals( 0 , units.size() ); assertSame( project , workspace.getProjectByName("project1" ) ); workspace.deleteProject( project , true ); assertEquals( 0 , workspace.getAllProjects().size() ); assertFalse( workspace.doesProjectExist( "project1" ) ); assertFalse( new File( workspaceDir, "project1" ).exists() ); workspace = new DefaultWorkspace( config ); workspace.open(); assertEquals( 0 , workspace.getAllProjects().size() ); } }