blob: ec68c617e38f5320c9ae3b1a06521fba73c4293d [file] [log] [blame]
/*
* 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 org.apache.tomee.bootstrap;
import org.apache.openejb.loader.IO;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* Copied with permission from tomitribe-util
*/
public class ArchiveTest {
@Test
public void addString() throws IOException {
final Archive archive = new Archive()
.add("colors/red.txt", "crimson")
.add("colors/green/emerald.txt", "#50c878");
final File dir = archive.toDir();
assertTrue(dir.isDirectory());
assertEquals(1, dir.listFiles().length);
assertEquals("colors", dir.listFiles()[0].getName());
assertFile(dir, "colors/red.txt", "crimson");
assertFile(dir, "colors/green/emerald.txt", "#50c878");
}
@Test
public void addArchive() throws IOException {
final Archive nested = new Archive()
.add("red.txt", "crimson")
.add("green/emerald.txt", "#50c878");
final Archive archive = new Archive();
archive.add("colors", nested);
final File dir = archive.toDir();
assertTrue(dir.isDirectory());
assertEquals(1, dir.listFiles().length);
assertEquals("colors", dir.listFiles()[0].getName());
assertFile(dir, "colors/red.txt", "crimson");
assertFile(dir, "colors/green/emerald.txt", "#50c878");
}
/**
* When adding an inner class we must also add the parent as the child
* cannot be loaded without the parent class
*/
@Test
public void addInnerClass() throws IOException {
final Archive archive = new Archive().add(MomINeedYou.class);
final File dir = archive.toDir();
assertTrue(dir.isDirectory());
assertEquals(1, dir.listFiles().length);
assertEquals("org", dir.listFiles()[0].getName());
final File parent = new File(dir, "org/apache/tomee/bootstrap/ArchiveTest.class");
final File child = new File(dir, "org/apache/tomee/bootstrap/ArchiveTest$MomINeedYou.class");
assertTrue(parent.exists());
assertTrue(child.exists());
}
private static void assertFile(final File dir, final String name, final String expected) throws IOException {
final File file = new File(dir, name);
assertTrue(name, file.exists());
assertEquals(expected, IO.slurp(file));
}
/**
* Inner classes cannot be loaded without their parent,
* so we must always include the parent by default
*/
public static class MomINeedYou {
}
}