001    package org.nanocontainer.script;
002    
003    import java.io.File;
004    import java.net.URL;
005    import java.util.Arrays;
006    import java.util.List;
007    import java.util.Set;
008    import java.util.TreeSet;
009    import junit.framework.TestCase;
010    
011    /**
012     * Name/Builder Resolution Test Cases.
013     * @author Michael Rimov
014     */
015    public class ScriptBuilderResolverTestCase extends TestCase {
016        private ScriptBuilderResolver scriptBuilderResolver = null;
017    
018        protected void setUp() throws Exception {
019            super.setUp();
020            scriptBuilderResolver = new ScriptBuilderResolver();
021        }
022    
023        protected void tearDown() throws Exception {
024            scriptBuilderResolver = null;
025            super.tearDown();
026        }
027    
028    
029        public void testGetAllSupportedExtensions() {
030            Set allExtensions = new TreeSet();
031    
032            allExtensions.add(ScriptBuilderResolver.XML);
033    
034            String[] actualReturn = scriptBuilderResolver.getAllSupportedExtensions();
035            assertNotNull(actualReturn);
036    
037            List returnAsList = Arrays.asList(actualReturn);
038            boolean someMerged = allExtensions.removeAll(returnAsList);
039            assertTrue(someMerged);
040            assertTrue(allExtensions.size() == 0);
041        }
042    
043        public void testGetBuilderClassNameForFile() {
044            File compositionFile = new File("test.xml");
045            String expected = ScriptBuilderResolver.DEFAULT_XML_BUILDER;
046            String actual = scriptBuilderResolver.getBuilderClassName(compositionFile);
047            assertEquals("return value", expected, actual);
048        }
049    
050        public void testGetBuilderClassNameForResource() {
051            final String resourceName = "/org/nanocontainer/nanocontainer.xml";
052            URL compositionURL = this.getClass().getResource(resourceName);
053            if (compositionURL == null) {
054                fail("This test depended on resource '"+ resourceName + "' which appears to have been moved");
055            }
056            String expected = ScriptBuilderResolver.DEFAULT_XML_BUILDER;
057            String actual = scriptBuilderResolver.getBuilderClassName(compositionURL);
058            assertEquals("return value", expected, actual);
059        }
060    
061        public void testGetBuilderClassNameForExtension() throws UnsupportedScriptTypeException {
062            String expectedReturn = ScriptBuilderResolver.DEFAULT_XML_BUILDER;
063            String actualReturn = scriptBuilderResolver.getBuilderClassName(".xml");
064            assertEquals("return value", expectedReturn, actualReturn);
065        }
066    
067        public void testGetBuilderForExtensionThrowsExceptionForUnknownBuilderType() {
068            try {
069                scriptBuilderResolver.getBuilderClassName(".foo");
070                fail("Retrieving extension of type .foo should have thrown exception");
071            } catch (UnsupportedScriptTypeException ex) {
072                assertEquals(".foo",ex.getRequestedExtension());
073            }
074        }
075    
076        public void testRegisterBuilder() {
077            scriptBuilderResolver.registerBuilder(".foo","org.example.FooBar");
078            assertEquals("org.example.FooBar", scriptBuilderResolver.getBuilderClassName(".foo"));
079        }
080    
081        public void testResetBuilders() {
082            scriptBuilderResolver.registerBuilder(".foo","org.example.FooBar");
083            scriptBuilderResolver.resetBuilders();
084            try {
085                scriptBuilderResolver.getBuilderClassName(".foo");
086                fail("Retrieving extension of type .foo should have thrown exception");
087            } catch (UnsupportedScriptTypeException ex) {
088                assertEquals(".foo",ex.getRequestedExtension());
089            }
090        }
091    
092    }