/* * Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: TestDatabaseResources.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.resources; import com.uwyn.rife.database.Datasource; import com.uwyn.rife.resources.exceptions.ResourceFinderErrorException; import com.uwyn.rife.resources.exceptions.ResourceWriterErrorException; import com.uwyn.rife.tools.ExceptionUtils; import com.uwyn.rife.tools.FileUtils; import com.uwyn.rife.tools.exceptions.InnerClassException; import com.uwyn.rife.tools.InputStreamUser; import com.uwyn.rife.tools.exceptions.FileUtilsErrorException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import junit.framework.TestCase; public class TestDatabaseResources extends TestCase { private Datasource mDatasource = null; private String mResource = "This just contains some text to\n"+ "verify if\n"+ "\n"+ "resources can be found\n"+ "\n"+ "and\n"+ "read\n"+ "\n"+ "correctly.\n"; private String mResourceUtf8 = "This just contains some text to\n"+ "verify if\n"+ "\n"+ "resources can be found\n"+ "\n"+ "and\n"+ "read\n"+ "\n"+ "correctly.\n"+ "Here are some encoding-specific chars : ¡¢£¥§¨©ª«¬®.\n"; public TestDatabaseResources(Datasource datasource, String datasourceName, String name) { super(name); mDatasource = datasource; } protected void setUp() throws Exception { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { resource_finder.install(); resource_finder.addResource("resources/test.txt", mResource); resource_finder.addResource("resources/test-utf8.txt", mResourceUtf8); } catch (ResourceWriterErrorException e) { throw new RuntimeException(e); } } protected void tearDown() throws Exception { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { resource_finder.remove(); } catch (ResourceWriterErrorException e) { // that's ok, it's probably already gone } } public void testInstantiation() { ResourceFinder resource_finder1 = DatabaseResourcesFactory.getInstance(mDatasource); ResourceFinder resource_finder2 = DatabaseResourcesFactory.getInstance(mDatasource); assertNotNull(resource_finder1); assertNotNull(resource_finder2); assertSame(resource_finder1, resource_finder2); } public void testInstall() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { resource_finder.remove(); resource_finder.install(); try { resource_finder.install(); fail(); } catch (ResourceWriterErrorException e) { assertTrue(true); } } catch (ResourceWriterErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testRemove() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { resource_finder.remove(); resource_finder.install(); resource_finder.remove(); try { resource_finder.remove(); fail(); } catch (ResourceWriterErrorException e) { assertTrue(true); } } catch (ResourceWriterErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testAddResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { resource_finder.addResource("just/some/resource", "the content of this resource\nyes it's there"); } catch (ResourceWriterErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetUnknownResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); assertNull(resource_finder.getResource("this/resource/doesnt/exist.txt")); } public void testGetResourceByName() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); assertNotNull(resource_finder.getResource("resources/test.txt")); } public void testUpdateResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { String content1 = "the content of this resource\nyes it's there"; String content2 = "the content of this resource has been modified"; resource_finder.addResource("resources/test.txt", content1); String result1 = resource_finder.getContent("resources/test.txt"); long time1 = resource_finder.getModificationTime("resources/test.txt"); assertEquals(content1, result1); assertTrue(resource_finder.updateResource("resources/test.txt", content2)); String result2 = resource_finder.getContent("resources/test.txt"); long time2 = resource_finder.getModificationTime("resources/test.txt"); assertEquals(content2, result2); assertTrue(time1 != time2); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } catch (ResourceWriterErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testUpdateMissingResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { assertNull(resource_finder.getContent("resources/test_blah.txt")); assertFalse(resource_finder.updateResource("resources/test_blah.txt", "blah")); assertNull(resource_finder.getContent("resources/test_blah.txt")); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } catch (ResourceWriterErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testRemoveResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { assertNotNull(resource_finder.getContent("resources/test.txt")); assertTrue(resource_finder.removeResource("resources/test.txt")); assertNull(resource_finder.getContent("resources/test.txt")); assertFalse(resource_finder.removeResource("resources/test.txt")); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } catch (ResourceWriterErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetUnknownStreamByName() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { resource_finder.useStream("this/resource/doesnt/exist.txt", new InputStreamUser() { public Object useInputStream(InputStream stream) throws InnerClassException { assertNull(stream); return null; } }); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetUnknownStreamByResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { resource_finder.useStream(new URL("file://this/resource/doesnt/exist.txt"), new InputStreamUser() { public Object useInputStream(InputStream stream) throws InnerClassException { assertNull(stream); return null; } }); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } catch (MalformedURLException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetStreamByName() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { resource_finder.useStream("resources/test.txt", new InputStreamUser() { public Object useInputStream(InputStream stream) throws InnerClassException { assertNotNull(stream); try { assertEquals(mResource, FileUtils.readString(stream)); } catch (FileUtilsErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } return null; } }); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetStreamByResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); URL resource = resource_finder.getResource("resources/test.txt"); try { resource_finder.useStream(resource, new InputStreamUser() { public Object useInputStream(InputStream stream) throws InnerClassException { assertNotNull(stream); try { assertEquals(mResource, FileUtils.readString(stream)); } catch (FileUtilsErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } return null; } }); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetUnknownContentByName() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { String content = resource_finder.getContent("this/resource/doesnt/exist.txt"); assertNull(content); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetUnknownContentByResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { String content = resource_finder.getContent(new URL("file://this/resource/doesnt/exist.txt")); assertNull(content); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } catch (MalformedURLException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetContentByName() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { String content = resource_finder.getContent("resources/test.txt"); assertNotNull(content); assertEquals(content, mResource); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetContentByResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); URL resource = resource_finder.getResource("resources/test.txt"); try { String content = resource_finder.getContent(resource); assertNotNull(content); assertEquals(content, mResource); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetContentByNameAndEncoding() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { String content = resource_finder.getContent("resources/test-utf8.txt", "UTF-8"); assertNotNull(content); assertEquals(content, mResourceUtf8); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetContentByResourceAndEncoding() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); URL resource = resource_finder.getResource("resources/test-utf8.txt"); try { String content = resource_finder.getContent(resource, "UTF-8"); assertNotNull(content); assertEquals(content, mResourceUtf8); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetUnknownModificationTimeByName() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { long time = resource_finder.getModificationTime("this/resource/doesnt/exist.txt"); assertEquals(-1, time); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetUnknownModificationTimeByResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { long time = resource_finder.getModificationTime(new URL("file://this/resource/doesnt/exist.txt")); assertEquals(-1, time); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } catch (MalformedURLException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetModificationTimeByName() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); try { long time = resource_finder.getModificationTime("resources/test.txt"); assertTrue(time != -1); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testGetModificationTimeByResource() { DatabaseResources resource_finder = DatabaseResourcesFactory.getInstance(mDatasource); URL resource = resource_finder.getResource("resources/test.txt"); try { long time = resource_finder.getModificationTime(resource); assertTrue(time != -1); } catch (ResourceFinderErrorException e) { assertFalse(ExceptionUtils.getExceptionStackTrace(e), false); } } }