001    package org.picocontainer.script;
002    
003    import static org.junit.Assert.assertEquals;
004    import static org.junit.Assert.assertNotNull;
005    import static org.junit.Assert.assertTrue;
006    import static org.picocontainer.script.ScriptedBuilderNameResolver.DEFAULT_XML_BUILDER;
007    
008    import java.io.File;
009    import java.net.URL;
010    import java.util.Arrays;
011    import java.util.List;
012    import java.util.Set;
013    import java.util.TreeSet;
014    
015    import org.junit.Test;
016    
017    /**
018     * @author Michael Rimov
019     * @author Mauro Talevi
020     */
021    public class ScriptedBuilderNameResolverTestCase {
022        private ScriptedBuilderNameResolver scriptBuilderResolver = new ScriptedBuilderNameResolver();
023    
024        @Test
025        public void testGetAllSupportedExtensions() {
026            Set<String> allExtensions = new TreeSet<String>();
027    
028            allExtensions.add(ScriptedBuilderNameResolver.XML);
029    
030            String[] actualReturn = scriptBuilderResolver.getAllSupportedExtensions();
031            assertNotNull(actualReturn);
032    
033            List<String> returnAsList = Arrays.asList(actualReturn);
034            boolean someMerged = allExtensions.removeAll(returnAsList);
035            assertTrue(someMerged);
036            assertTrue(allExtensions.size() == 0);
037        }
038    
039        @Test
040        public void testGetBuilderClassNameForFile() {
041            File compositionFile = new File("test.xml");
042            assertEquals("return value", ScriptedBuilderNameResolver.DEFAULT_XML_BUILDER, scriptBuilderResolver.getBuilderClassName(compositionFile));
043        }
044    
045        @Test
046        public void testGetBuilderClassNameForResource() {
047            final String resourceName = "/org/picocontainer/script/xml/picocontainer.xml";
048            URL compositionURL = this.getClass().getResource(resourceName);
049            assertEquals("return value", DEFAULT_XML_BUILDER, scriptBuilderResolver.getBuilderClassName(compositionURL));
050        }
051    
052        @Test
053        public void canGetBuilderClassNameForExtension() throws UnsupportedScriptTypeException {
054            assertEquals("return value", DEFAULT_XML_BUILDER, scriptBuilderResolver.getBuilderClassName(".xml"));
055        }
056    
057        @Test(expected = UnsupportedScriptTypeException.class)
058        public void cannotGetBuilderClassNameForUnknownExtension() {
059            scriptBuilderResolver.getBuilderClassName(".foo");
060        }
061    
062        @Test
063        public void canRegisterBuilder() {
064            scriptBuilderResolver.registerBuilder(".foo", "org.example.FooBar");
065            assertEquals("org.example.FooBar", scriptBuilderResolver.getBuilderClassName(".foo"));
066        }
067    
068        @Test(expected = UnsupportedScriptTypeException.class)
069        public void cannotGetBuilderClassNameAfterReset() {
070            scriptBuilderResolver.registerBuilder(".foo", "org.example.FooBar");
071            scriptBuilderResolver.resetBuilders();
072            scriptBuilderResolver.getBuilderClassName(".foo");
073        }
074    
075    }