package org.javabuilders.test; import static org.junit.Assert.*; import java.util.ResourceBundle; import javax.swing.JButton; import javax.swing.JPanel; import org.javabuilders.BuildResult; import org.javabuilders.Builder; import org.javabuilders.test.resources.ParentClass; import org.javabuilders.util.BuilderUtils; import org.junit.Assert; import org.junit.Test; /** * Tests to ensure the builder correctly handles getting/creating object references * @author Jacek Furmankiewicz */ public class CoreTest { @Test public void existingAndNewInstanceTest() throws Exception { ParentClass parentClass = new ParentClass(); Assert.assertNotNull("emptyClass is null", parentClass.getEmptyClass()); Assert.assertEquals("emptyClass.constraint wrong value", "emptyClass", parentClass.getEmptyClass().getConstraint()); Assert.assertNotNull("createdClass is null", parentClass.getCreatedClass()); Assert.assertEquals("createdClass.constraint wrong value", "createdClass", parentClass.getCreatedClass().getConstraint()); } @Test public void testNameGeneration() { TestBuilderConfig config = new TestBuilderConfig(JPanel.class); BuildResult r = new BuildResult(config,this); assertEquals("firstName", BuilderUtils.generateName(r,"\"First Name\"", null, null)); assertEquals("labelFirstName", BuilderUtils.generateName(r,"\"First Name\"", "label", null)); assertEquals("firstNameLabel", BuilderUtils.generateName(r,"\"First Name\"", null, "Label")); assertEquals("firstName", BuilderUtils.generateName(r,"firstName", null, null)); assertEquals("labelName", BuilderUtils.generateName(r,"label.name", null, null)); assertEquals("labelFirstName", BuilderUtils.generateName(r,"label.firstName", null, null)); assertEquals("firstName", BuilderUtils.generateName(r,"First Name", null, null)); } @Test public void testBuildContentProvider() { TestBuilderConfig config = new TestBuilderConfig(JPanel.class); String yaml = "JPanel(name=testPanel)"; BuildResult r = Builder.buildFromString(config, this, yaml); assertNotNull(r.get("testPanel")); assertTrue(r.get("testPanel") instanceof JPanel); } @Test public void testPrototypeControlNameParsing() { TestBuilderConfig config = new TestBuilderConfig(JButton.class); assertEquals("test32_3",config.prototype("JButton(name=test32_3)")); assertEquals("test32",config.prototype("JButton( name=test32 )")); assertEquals("test4",config.prototype("JButton(onAction=sux,name=test4 ))")); assertEquals("test55",config.prototype("JButton(onAction=sux,name=test55, tes3t=3 )")); assertEquals("JButton(name=test32_3)",config.getPrototype("test32_3")); } @Test public void testResourceFallbackWithInternationalization() { //configure global resource TestBuilderConfig config = new TestBuilderConfig(JButton.class,JPanel.class); config.forType(JButton.class).localize("text"); config.forType(JPanel.class).children(JButton.class,0,Integer.MAX_VALUE); config.addResourceBundle("org.javabuilders.test.Global"); //build with additional local resource String yaml = "JPanel:\n" + " - JButton(name=global,text=button.cancel)\n" + " - JButton(name=local,text=title.cancelTask)\n" + " - JButton(name=jb,text=label.processing)\n" + " - JButton(name=wrong,text=label.wrong)"; BuildResult r = Builder.buildFromString(config, this, yaml, ResourceBundle.getBundle("org.javabuilders.test.Local")); JButton global = (JButton) r.get("global"); JButton local = (JButton) r.get("local"); JButton jb = (JButton) r.get("jb"); JButton wrong = (JButton) r.get("wrong"); //each of the labels should have been fetched from different resources and override the base JB one assertEquals("Global Cancel", global.getText()); assertEquals("Local Cancel Task", local.getText()); assertEquals("Processing...", jb.getText()); assertEquals("label.wrong", wrong.getText()); } @Test public void testResourceFallbackWithInternationalizationAndMarkedInvalidKeys() { //configure global resource TestBuilderConfig config = new TestBuilderConfig(JButton.class,JPanel.class); config.forType(JButton.class).localize("text"); config.forType(JPanel.class).children(JButton.class,0,Integer.MAX_VALUE); config.addResourceBundle("org.javabuilders.test.Global"); config.setMarkInvalidResourceBundleKeys(true); //build with additional local resource String yaml = "JPanel:\n" + " - JButton(name=global,text=button.cancel)\n" + " - JButton(name=local,text=title.cancelTask)\n" + " - JButton(name=jb,text=label.processing)\n" + " - JButton(name=wrong,text=label.wrong)"; BuildResult r = Builder.buildFromString(config, this, yaml, ResourceBundle.getBundle("org.javabuilders.test.Local")); JButton global = (JButton) r.get("global"); JButton local = (JButton) r.get("local"); JButton jb = (JButton) r.get("jb"); JButton wrong = (JButton) r.get("wrong"); //each of the labels should have been fetched from different resources and override the base JB one assertEquals("Global Cancel", global.getText()); assertEquals("Local Cancel Task", local.getText()); assertEquals("Processing...", jb.getText()); assertEquals("#label.wrong#", wrong.getText()); } @Test public void testResourceFallbackWithoutInternationalization() { //configure global resource TestBuilderConfig config = new TestBuilderConfig(JButton.class,JPanel.class); config.forType(JButton.class).localize("text"); config.forType(JPanel.class).children(JButton.class,0,Integer.MAX_VALUE); //build with additional local resource String yaml = "JPanel:\n" + " - JButton(name=test,text=Button Text)\n"; BuildResult r = Builder.buildFromString(config, this, yaml); //label should be unaffected JButton global = (JButton) r.get("test"); assertEquals("Button Text", global.getText()); } @Test public void testMarkingOfInvalidResourceKeys() { //configure global resource TestBuilderConfig config = new TestBuilderConfig(JButton.class,JPanel.class); config.forType(JButton.class).localize("text"); config.forType(JPanel.class).children(JButton.class,0,Integer.MAX_VALUE); config.addResourceBundle("org.javabuilders.test.Global"); //build with additional local resource String yaml = "JPanel:\n" + " - JButton(name=test,text=Button Text)\n"; BuildResult r = Builder.buildFromString(config, this, yaml); //label should be unaffected JButton global = (JButton) r.get("test"); assertEquals("Button Text", global.getText()); //now set it to mark invalid resource keys config.setMarkInvalidResourceBundleKeys(true); BuildResult r2 = Builder.buildFromString(config, this, yaml); //label should be unaffected JButton global2 = (JButton) r2.get("test"); assertEquals("#Button Text#", global2.getText()); } }