/*
* Copyright (c) 2013-2016 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/
package org.adoptopenjdk.jitwatch.test;
import static org.junit.Assert.*;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.*;
import org.adoptopenjdk.jitwatch.loader.ResourceLoader;
import org.junit.Before;
import org.junit.Test;
public class TestResourceLoader
{
private Path tempJarPath;
@Test
public void testSourceLoader()
{
List<String> sourceLocations = new ArrayList<>();
sourceLocations.add(tempJarPath.toString());
String mySource = ResourceLoader.getSourceForClassName(getClass().getName(), sourceLocations);
// a really unique comment
// 1234567896465487946542165467987654646879764684
assertNotNull(mySource);
assertTrue(mySource.contains("1234567896465487946542165467987654646879764684"));
}
@Before
public void run() throws IOException
{
Manifest manifest = new Manifest();
manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
tempJarPath = Files.createTempFile("test", ".jar");
JarOutputStream target = new JarOutputStream(new FileOutputStream(tempJarPath.toFile()), manifest);
File startingDirectory = Paths.get(System.getProperty("user.dir"), "src", "test", "java").toFile();
addFileToJar(startingDirectory, startingDirectory, target);
target.close();
}
private void addFileToJar(File startingDir, File fileOrDirectory, JarOutputStream jarOutputStream) throws IOException
{
BufferedInputStream bufferedInputStream = null;
try
{
if (fileOrDirectory.isDirectory())
{
String name = fileOrDirectory.getPath().replace(S_BACKSLASH, S_SLASH);
if (!name.isEmpty())
{
if (!name.endsWith(S_SLASH))
{
name += S_SLASH;
}
name = name.substring(startingDir.toString().length() + 1);
JarEntry entry = new JarEntry(name);
jarOutputStream.putNextEntry(entry);
jarOutputStream.closeEntry();
}
for (File nestedFile : fileOrDirectory.listFiles())
{
addFileToJar(startingDir, nestedFile, jarOutputStream);
}
}
else
{
String name = fileOrDirectory.getPath().replace(S_BACKSLASH, S_SLASH);
name = name.substring(startingDir.toString().length() + 1);
JarEntry entry = new JarEntry(name);
jarOutputStream.putNextEntry(entry);
bufferedInputStream = new BufferedInputStream(new FileInputStream(fileOrDirectory));
byte[] buffer = new byte[1024];
int readBytes = bufferedInputStream.read(buffer);
while (readBytes != -1)
{
jarOutputStream.write(buffer, 0, readBytes);
readBytes = bufferedInputStream.read(buffer);
}
jarOutputStream.closeEntry();
}
}
finally
{
if (bufferedInputStream != null)
{
bufferedInputStream.close();
}
}
}
}