@Override public String getRelativePath() { return kieFile.getPath().toPortableString(); }
@Override public String getPath() { return kieFolder.getPath().toPortableString(); }
@Override public InputStream openInputStream() throws IOException { return kieFile.getContents(); }
@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 testRelativeToParentFilePath() { FileSystem fs = new MemoryFileSystem(); Folder mres = fs.getFolder( "src/main/java/org/domain" ); Folder f2 = fs.getFolder( "src/main/java/org/domain/f1/f2/" ); File f1 = mres.getFile( "MyClass.java" ); assertEquals( "../../MyClass.java", f1.getPath().toRelativePortableString( f2.getPath() ) ); }
@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 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() );
@Test public void testFileCreation() throws IOException { FileSystem fs = new MemoryFileSystem(); Folder mres = fs.getFolder( "src/main/java/org/domain" ); File f1 = mres.getFile( "MyClass.java" ); f1.create( new ByteArrayInputStream( "ABC".getBytes() ) ); mres.create(); f1 = mres.getFile( "MyClass.java" ); assertTrue( f1.exists()); f1.create( new ByteArrayInputStream( "ABC".getBytes() ) ); f1 = mres.getFile( "MyClass.java" ); assertTrue( f1.exists() ); assertEquals( "ABC", StringUtils.toString( f1.getContents() ) ); f1.create( new ByteArrayInputStream( "ABC".getBytes() ) ); f1.setContents( new ByteArrayInputStream( "DEF".getBytes() ) ); assertEquals( "DEF", StringUtils.toString( f1.getContents() ) ); }
@Test public void testFileRemoval() throws IOException { FileSystem fs = new MemoryFileSystem(); Folder mres = fs.getFolder( "src/main/java/org/domain" ); mres.create(); File f1 = mres.getFile( "MyClass.java" ); f1.create( new ByteArrayInputStream( "ABC".getBytes() ) ); assertTrue( f1.exists() ); assertEquals( "ABC", StringUtils.toString( f1.getContents() ) ); fs.remove( f1 ); f1 = mres.getFile( "MyClass.java" ); assertFalse( f1.exists() ); try { f1.getContents(); fail( "Should throw IOException" ); } catch( IOException e ) { } }
@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 testFilePath() { FileSystem fs = new MemoryFileSystem(); Folder mres = fs.getFolder( "src/main/java/org/domain" ); File f1 = mres.getFile( "MyClass.java" ); assertEquals( "src/main/java/org/domain/MyClass.java", f1.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 testMemoryFileSystemFolderUniqueness() { KieServices kieServices = KieServices.Factory.get(); String drl = "package org.drools.test\n" + "rule R1 when\n" + " $m : Object()\n" + "then\n" + "end\n"; Resource resource = kieServices.getResources().newReaderResource( new StringReader( drl), "UTF-8" ); resource.setTargetPath("org/drools/test/rules.drl"); String kmodule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<kmodule xmlns=\"http://www.drools.org/xsd/kmodule\">\n" + " <kbase name=\"testKbase\" packages=\"org.drools.test\">\n" + " <ksession name=\"testKsession\"/>\n" + " </kbase>\n" + "</kmodule>"; // Create an in-memory jar for version 1.0.0 ReleaseId releaseId = kieServices.newReleaseId("org.kie", "test-delete", "1.0.0"); createAndDeployJar(kieServices, kmodule, releaseId, resource); KieContainer kieContainer = kieServices.newKieContainer(releaseId); KieModule kieModule = ((InternalKieContainer) kieContainer).getMainKieModule(); MemoryFileSystem memoryFileSystem = ((MemoryKieModule) kieModule).getMemoryFileSystem(); Folder rootFolder = memoryFileSystem.getFolder(""); Object[] members = rootFolder.getMembers().toArray(); assertEquals(2, members.length); Folder firstFolder = (Folder) members[0]; Folder secondFolder = (Folder) members[1]; assertEquals(firstFolder.getParent(), secondFolder.getParent()); }
@Override public Iterable<Vfs.File> getFiles() { List<Vfs.File> vfsFileList = new ArrayList<>(); Deque<Resource> resourceDeque = new ArrayDeque<>(); Collection<? extends Resource> mainMembers = kieFolder.getMembers(); if (mainMembers != null) { resourceDeque.addAll(mainMembers); } while (!resourceDeque.isEmpty()) { Resource resource = resourceDeque.pop(); if (resource instanceof File) { File file = (File) resource; if (file.getName().endsWith(".class")) { vfsFileList.add(new ReflectionsKieVfsFile(file)); } } else if (resource instanceof Folder) { Collection<? extends Resource> members = ((Folder) resource).getMembers(); if (members != null) { resourceDeque.addAll(members); } } else { throw new IllegalStateException("Unsupported resource class (" + resource.getClass() + ") for resource (" + resource + ")."); } } return vfsFileList; }
@Override public String getName() { return kieFile.getName(); }
@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 testRelativeToBranchFilePath() { FileSystem fs = new MemoryFileSystem(); Folder mres = fs.getFolder( "src/main/java/org/domain" ); Folder f2 = fs.getFolder( "src/main/resources/org/domain/" ); File f1 = mres.getFile( "MyClass.java" ); assertEquals( "../../../java/org/domain/MyClass.java", f1.getPath().toRelativePortableString( f2.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() ) ); }