/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * 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 org.drools.compiler.kproject.memory; import static org.junit.Assert.*; import java.io.ByteArrayInputStream; import java.io.IOException; import org.drools.compiler.compiler.io.File; import org.drools.compiler.compiler.io.FileSystem; import org.drools.compiler.compiler.io.Folder; import org.drools.compiler.compiler.io.memory.MemoryFileSystem; import org.drools.compiler.compiler.io.memory.MemoryFolder; import org.junit.Test; public class MemoryFolderTest { @Test public void testGetParentWithLeadingAndTrailingSlash() { MemoryFileSystem mfs = new MemoryFileSystem(); assertEquals( "", new MemoryFolder( mfs, "/src" ).getParent().getPath().toPortableString() ); assertEquals( "", new MemoryFolder( mfs, "src/" ).getParent().getPath().toPortableString() ); assertEquals( "", new MemoryFolder( mfs, "/src/" ).getParent().getPath().toPortableString() ); assertEquals( "src", new MemoryFolder( mfs, "/src/main" ).getParent().getPath().toPortableString() ); assertEquals( "src", new MemoryFolder( mfs, "src/main/" ).getParent().getPath().toPortableString() ); assertEquals( "src", new MemoryFolder( mfs, "/src/main/" ).getParent().getPath().toPortableString() ); assertEquals( "src/main", new MemoryFolder( mfs, "/src/main/java" ).getParent().getPath().toPortableString() ); assertEquals( "src/main", new MemoryFolder( mfs, "src/main/java/" ).getParent().getPath().toPortableString() ); assertEquals( "src/main", new MemoryFolder( mfs, "/src/main/java/" ).getParent().getPath().toPortableString() ); } @Test public void testRecursiveFolderCreation() { FileSystem fs = new MemoryFileSystem(); Folder mres = fs.getFolder( "src/main/resources" ); assertFalse( mres.exists() ); mres.create(); assertTrue( mres.exists() ); Folder fld = fs.getFolder( "src/main" ); assertTrue( fld.exists() ); Folder src = fs.getFolder( "src" ); assertTrue( src.exists() ); } @Test public void testFolderGetParent() { FileSystem fs = new MemoryFileSystem(); Folder mres = fs.getFolder( "src/main/resources" ); mres.create(); assertEquals( "src/main", mres.getParent().getPath().toPortableString() ); assertEquals( "src", mres.getParent().getParent().getPath().toPortableString() ); } @Test public void testNestedRelativePath() { FileSystem fs = new MemoryFileSystem(); Folder f1 = fs.getFolder( "src/main/java" ); Folder f2 = fs.getFolder( "src/main/java/org" ); f1.create(); f2.create(); assertEquals( "org", f2.getPath().toRelativePortableString( f1.getPath() ) ); fs = new MemoryFileSystem(); f1 = fs.getFolder( "src/main/java" ); f2 = fs.getFolder( "src/main/java/org/drools/reteoo" ); f1.create(); f2.create(); assertEquals( "org/drools/reteoo", f2.getPath().toRelativePortableString( f1.getPath() ) ); } @Test public void testNestedRelativePathReverseArguments() { FileSystem fs = new MemoryFileSystem(); Folder f1 = fs.getFolder( "src/main/java/org" ); Folder f2 = fs.getFolder( "src/main/java/" ); f1.create(); f2.create(); assertEquals( "..", f2.getPath().toRelativePortableString( f1.getPath() ) ); fs = new MemoryFileSystem(); f1 = fs.getFolder( "src/main/java/org/drools/reteoo" ); f2 = fs.getFolder( "src/main/java" ); f1.create(); f2.create(); assertEquals( "../../..", f2.getPath().toRelativePortableString( f1.getPath() ) ); } @Test public void testNestedRelativeDifferentPath() { FileSystem fs = new MemoryFileSystem(); Folder f1 = fs.getFolder( "src/main/java" ); Folder f2 = fs.getFolder( "src/main/resources" ); f1.create(); f2.create(); assertEquals( "../resources", f2.getPath().toRelativePortableString( f1.getPath() ) ); fs = new MemoryFileSystem(); f1 = fs.getFolder( "src/main/java/org/drools" ); f2 = fs.getFolder( "src/main/resources/org/drools/reteoo" ); f1.create(); f2.create(); assertEquals( "../../../resources/org/drools/reteoo", f2.getPath().toRelativePortableString( f1.getPath() ) ); } @Test public void testFolderRemoval() throws IOException { FileSystem fs = new MemoryFileSystem(); Folder fld = fs.getFolder( "src/main/resources/org/domain" ); fld.create(); fld = fs.getFolder( "src/main" ); File file = fld.getFile( "MyClass1.java" ); file.create( new ByteArrayInputStream( "ABC1".getBytes() ) ); file = fld.getFile( "MyClass2.java" ); file.create( new ByteArrayInputStream( "ABC2".getBytes() ) ); fld = fs.getFolder( "src/main/resources/org" ); file = fld.getFile( "MyClass3.java" ); file.create( new ByteArrayInputStream( "ABC3".getBytes() ) ); file = fld.getFile( "MyClass4.java" ); file.create( new ByteArrayInputStream( "ABC4".getBytes() ) ); fld = fs.getFolder( "src/main/resources/org/domain" ); file = fld.getFile( "MyClass4.java" ); file.create( new ByteArrayInputStream( "ABC5".getBytes() ) ); assertTrue( fs.getFolder( "src/main" ).exists() ); assertTrue( fs.getFile( "src/main/MyClass1.java" ).exists() ); assertTrue( fs.getFile( "src/main/MyClass2.java" ).exists() ); assertTrue( fs.getFile( "src/main/resources/org/MyClass3.java" ).exists() ); assertTrue( fs.getFile( "src/main/resources/org/MyClass4.java" ).exists() ); assertTrue( fs.getFile( "src/main/resources/org/domain/MyClass4.java" ).exists() ); fs.remove( fs.getFolder( "src/main" ) ); assertFalse( fs.getFolder( "src/main" ).exists() ); assertFalse( fs.getFile( "src/main/MyClass1.java" ).exists() ); assertFalse( fs.getFile( "src/main/MyClass2.java" ).exists() ); assertFalse( fs.getFile( "src/main/resources/org/MyClass3.java" ).exists() ); assertFalse( fs.getFile( "src/main/resources/org/MyClass4.java" ).exists() ); assertFalse( fs.getFile( "src/main/resources/org/domain/MyClass4.java" ).exists() ); } @Test public void trimLeadingAndTrailing() { assertEquals("", MemoryFolder.trimLeadingAndTrailing("")); assertEquals("src/main", MemoryFolder.trimLeadingAndTrailing("/src/main")); assertEquals("src/main", MemoryFolder.trimLeadingAndTrailing("src/main/")); assertEquals("src/main", MemoryFolder.trimLeadingAndTrailing("/src/main/")); } }