package org.wyona.yarep.tests;
import org.wyona.yarep.core.Path;
import org.wyona.yarep.core.Repository;
import org.wyona.yarep.core.RepositoryFactory;
import java.io.BufferedReader;
import java.io.File;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import junit.framework.TestCase;
/**
*
*/
public class YarepTest extends TestCase {
/**
*
*/
public static void testYarep() throws Exception {
RepositoryFactory repoFactory;
repoFactory = new RepositoryFactory();
//repoFactory = new RepositoryFactory("my-yarep.properties");
System.out.println(repoFactory);
Repository repoA = repoFactory.newRepository("example1");
Repository repoC = repoFactory.newRepository("hugo");
// Add more repositories to repository factory
Repository repoB;
Repository repoD;
repoB = repoFactory.newRepository("vanya", new File("orm-example/repository-config.xml"));
repoD = repoFactory.newRepository("vfs-example", new File("vfs-example/repository.xml"));
System.out.println(repoFactory);
// Test YarepUtil ...
Path path = new Path("/example2/hello.txt");
org.wyona.yarep.util.RepoPath rp = new org.wyona.yarep.util.YarepUtil().getRepositoryPath(path, repoFactory);
System.out.println("YarepUtil: " + rp.getRepo() + " " + rp.getPath());
path = new Path("/pele/hello/");
rp = new org.wyona.yarep.util.YarepUtil().getRepositoryPath(path, repoFactory);
System.out.println("YarepUtil: " + rp.getRepo() + " " + rp.getPath());
Path worldPath = new Path("/hello/world.txt");
// Write content to repository
System.out.println("\nWrite content to repository " + repoA.getName() + " (repoA) ...");
Writer writerA = repoA.getWriter(worldPath);
String testContent = "Hello World!\n...\n";
writerA.write(testContent);
writerA.close();
System.out.println("\nWrite content to repository " + repoB.getName() + " (repoB) ...");
Writer writerB = repoB.getWriter(worldPath);
// TODO: See TODO.txt re VFS implementation
/*
System.out.println("\nWrite content to repository " + repoD.getName() + "...");
Writer writerD = repoD.getWriter(new Path("/hello/vfs-example.txt"));
writerD.write("Hello VFS example!\n...");
writerD.close();
*/
// Read content from repository
System.out.println("\nRead content from repository " + repoA.getName() + " (repoA) ...");
Reader readerA = repoA.getReader(worldPath);
BufferedReader br = new BufferedReader(readerA);
String line = br.readLine();
StringWriter strWriter = new StringWriter();
while (line != null) {
strWriter.write(line + "\n");
//System.out.println(line);
line = br.readLine();
}
System.out.println(strWriter.toString());
strWriter.close();
br.close();
readerA.close();
assertEquals("Repository content did not match expected result.", testContent, strWriter.toString());
System.out.println("\nRead content from repository " + repoD.getName() + " (repoD) ...");
Reader readerD = repoD.getReader(new Path("/hello/vfs-example.txt"));
br = new BufferedReader(readerD);
String firstLine = br.readLine();
System.out.println("Very first line: " + firstLine);
readerD.close();
assertEquals("Repository content did not match expected result.", "Hello VFS!", firstLine);
System.out.println("\nRead content from node without a UID:");
readerA = repoA.getReader(new Path("/no/uid/example.txt"));
br = new BufferedReader(readerA);
firstLine = br.readLine();
System.out.println("Very first line: " + firstLine);
readerA.close();
assertEquals("Repository content did not match expected result.", "No UID example!", firstLine);
// List children
System.out.println("\nList children of path /hello from repository " + repoA.getName() + " ...");
Path helloPath = new Path("/hello");
Path[] children = repoA.getChildren(helloPath);
for (int i = 0; i < children.length; i++) {
System.out.println(children[i]);
// assert what?
}
// test size:
long size = repoD.getSize(new Path("/hello/vfs-example.txt"));
assertEquals("Size of file /hello/vfs-example.txt did not match expected size.", 11, size);
assertFalse("Deleting '" + helloPath + "' should not be possible because it has children.",
repoA.delete(helloPath));
assertTrue("Deleting '" + worldPath + "' should be possible.", repoA.delete(worldPath));
}
}