package ca.carleton.gcrc.couch.app;

import java.io.File;
import java.io.StringWriter;
import java.net.URL;

import net.sf.json.JSONObject;
import net.sf.json.util.JSONTokener;

import junit.framework.TestCase;

public class JSONDirectoryBuilderTest extends TestCase {

	static public File findResourceDirectory(String name) {
		URL url = JSONDirectoryBuilderTest.class.getClassLoader().getResource(name);
		File file = new File(url.getPath());
		return file;
	}
	
	public void testJson1() throws Exception {
		File dir = findResourceDirectory("json1");
		JSONDirectoryBuilder builder = new JSONDirectoryBuilder(dir);
		
		StringWriter sw = new StringWriter();
		builder.write(sw);
		
		// Get JSON from it
		JSONObject jsonObj = null;
		{
			JSONTokener jsonTokener = new JSONTokener(sw.toString());
			Object obj = jsonTokener.nextValue();
			if( obj instanceof JSONObject ) {
				jsonObj = (JSONObject)obj;
			} else {
				throw new Exception("Unexpected returned object type: "+obj.getClass().getSimpleName());
			}
		}
		
		// Verify
		if( false == jsonObj.containsKey("test") ) {
			fail("Can not find script at key: test");
		}
		JSONObject obj = jsonObj.getJSONObject("obj");
		String v1 = obj.getString("key1");
		if( false == "value1".equals(v1) ) {
			fail("Unexpected value: obj/key1");
		}
		String v2 = obj.getString("key2");
		if( false == "value2".equals(v2) ) {
			fail("Unexpected value: obj/key2");
		}
	}
}
