alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
 *                 Sun Public License Notice
 *
 * The contents of this file are subject to the Sun Public License
 * Version 1.0 (the "License"). You may not use this file except in
 * compliance with the License. A copy of the License is available at
 * http://www.sun.com/
 *
 * The Original Code is NetBeans. The Initial Developer of the Original
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2002 Sun
 * Microsystems, Inc. All Rights Reserved.
 */
package org.netbeans.modules.xml.tools.generator;

import java.util.Arrays;
import java.util.Comparator;
import junit.textui.TestRunner;
import org.netbeans.jellytools.EditorOperator;
import org.netbeans.jellytools.EditorWindowOperator;
import org.netbeans.jellytools.actions.OpenAction;
import org.netbeans.jellytools.modules.xml.actions.SAXDocumentHandlerWizardAction;
import org.netbeans.jellytools.modules.xml.saxwizard.*;
import org.netbeans.jellytools.nodes.Node;
import org.netbeans.jellytools.util.FolderContext;
import org.netbeans.jemmy.operators.JTableOperator;
import org.netbeans.junit.AssertionFailedErrorException;
import org.netbeans.tests.xml.JXTest;
import org.openide.cookies.SourceCookie;
import org.openide.loaders.DataObject;
import org.openide.src.*;

/** Checks XSL Transformation action. */

public class SAXGeneratorJTest extends JXTest {
    
    /** Creates new XMLNodeTest */
    public SAXGeneratorJTest(String testName) {
        super(testName);
    }
    
    // TESTS ///////////////////////////////////////////////////////////////////
    
    /** Performs 'XSL Transformation...' action and checks output. */
    public void test() throws Exception {
        // clear output and display Transformation Dialog
        FolderContext df = FolderContext.getDataFolder(this);
        df.deleteDataObject("sax/BooksSAXBindings.xml");
        df.deleteDataObject("sax/BHImpl.java");
        df.deleteDataObject("sax/BHandler.java");
        df.deleteDataObject("sax/BPImpl.java");
        df.deleteDataObject("sax/BParser.java");
        df.deleteDataObject("sax/BParslet.java");
        
        // perform SAX Wizard Action
        SAXDocumentHandlerWizardAction  saxAction = new SAXDocumentHandlerWizardAction();
        try {
            Node node = findDataNode("sax" + DELIM + "books");
            saxAction.perform(node);
        } catch (Exception ex) {
            fail("Cannot perform SAX Wizard Action.", ex);
        }
        
        // Page-1
        try {
            SAXDocumentHandlerWizardPage1 page1 = new SAXDocumentHandlerWizardPage1();
            page1.verify();
            sleepTest(2000); //!!!
            page1.cboJAXPVersion().selectItem(page1.ITEM_JAXP10);
            page1.cboSAXParserVersion().selectItem(page1.ITEM_SAX20);
            page1.checkPropagateSAXEventsToGeneratedHandler(true);
            if (DEBUG) sleepTest(2000);
            page1.next();
        } catch (Exception ex) {
            fail("Test fails on Page-1.", ex);
        }
        
        // Page-2
        try {
            SAXDocumentHandlerWizardPage2 page2 = new SAXDocumentHandlerWizardPage2();
            page2.verify();
            JTableOperator table = page2.tabElementMappings();
            int row = table.findCellRow("inc-level-1");
            page2.selectHandlerType(row, page2.IGNORE);
            row = table.findCellRow("Product");
            page2.selectHandlerType(row, page2.CONTAINER);
            page2.setHandlerMethod(row, "productHandlerMethod");
            page2.setHandlerMethod(row, "product Handler Method");
            assertEquals("Invalid method name.", "productHandlerMethod", page2.getHandlerMethod(row));
            if (DEBUG) sleepTest(2000);
            page2.next();
        } catch (Exception ex) {
            fail("Test fails on Page-2.", ex);
        }
        
        // Page-3
        try {
            SAXDocumentHandlerWizardPage3 page3 = new SAXDocumentHandlerWizardPage3();
            page3.verify();
            JTableOperator table = page3.tabDataConvertors();
            int row = table.findCellRow("inc-level-1");
            assertEquals("Invalid initial method.", page3.NO_METHOD, page3.getConvertorMethod(row));
            page3.setConvertorMethod(row, "getText");
            assertEquals("Invalid return type.", "java.lang.String", page3.getReturnType(row));
            
            row = table.findCellRow("Price");
            page3.setConvertorMethod(row, "priceToInt");
            page3.selectReturnType(row, "int");
            
            row = table.findCellRow("Image");
            page3.setConvertorMethod(row, "getImage");
            page3.setReturnType(row, "java.awt.Image");
            
            row = table.findCellRow("Product");
            page3.selectConvertorMethod(row, "priceToInt");
            assertEquals("Invalid return type.", "int", page3.getReturnType(row));
            page3.selectConvertorMethod(row, "getImage");
            assertEquals("Invalid return type.", "java.awt.Image", page3.getReturnType(row));
            page3.selectConvertorMethod(row, "getText");
            assertEquals("Invalid return type.", "java.lang.String", page3.getReturnType(row));
            page3.setReturnType(row, "java*lang*String");
            assertEquals("Invalid return type.", "java.lang.String", page3.getReturnType(row));
            page3.setReturnType(row, "java.lang.StringBuffer");
            
            // getText() should have consistent return type for "Product" and "inc-level-1" elements
            int row1 = table.findCellRow("inc-level-1");
            assertEquals("Invalid return type.", page3.getReturnType(row1), page3.getReturnType(row));
            if (DEBUG) sleepTest(2000);
            page3.next();
        } catch (Exception ex) {
            fail("Test fails on Page-3.", ex);
        }
        
        // Page-4
        try {
            SAXDocumentHandlerWizardPage4 page4 = new SAXDocumentHandlerWizardPage4();
            page4.verify();
            page4.setHandlerInterface("BHandler");
            page4.setHandlerImplementation("BHImpl");
            page4.setGeneratedParser("BParser");
            page4.setDataConvertorInterface("BParslet");
            page4.setDataConvertorImplementation("BPImpl");
            page4.checkSaveCustomizedBindings(false);
            page4.checkSaveCustomizedBindings(true);
            assertEquals("Invalid bindings location.", "BooksSAXBindings", page4.getBindingsLocation());
            if (DEBUG) sleepTest(2000);
            page4.finish();
        } catch (Exception ex) {
            fail("Test fails on Page-4.", ex);
        }
        
        // confirm changes - Propagate SAXE vents was checked
        try {
            new ConfirmChangesDialog().processAll();
        } catch (Exception ex) {
            fail("Test fails on Confirm Changes dialog.", ex);
        }
        
        // save handler implementation dump generated classes
        try {
            Node implNode = findDataNode("sax" + DELIM + "BHImpl");
            new OpenAction().perform(implNode);
            // force editor to reload document
            EditorWindowOperator ewo = new EditorWindowOperator();
            EditorOperator eo = ewo.getEditor("BHImpl");
            eo.setCaretPositionToLine(1);
            eo.insert("\n");
            eo.waitModified(true);
            eo.deleteLine(1);
            eo.save();
            
            ref("\n=== Handler Interface:\n");
            ref(dumpFile(TestUtil.THIS.findData("sax/BHandler.java")));
            ref("=== Handler Implementation:\n");
            ref(dumpFile(TestUtil.THIS.findData("sax/BHImpl.java")));
            ref("\n=== Generated Parser:\n");
            ref(dumpFile(TestUtil.THIS.findData("sax/BParser.java")));
            ref("\n=== Data Convertor Interfaces:\n");
            ref(dumpFile(TestUtil.THIS.findData("sax/BParslet.java")));
            ref("\n=== Data Convertor Implementation:\n");
            ref(dumpFile(TestUtil.THIS.findData("sax/BPImpl.java")));
        } catch (Exception ex) {
            fail("Test fails during dumping generated classes.", ex);
        }
        compareReferenceFiles();
    }
    
    // LIB ////////////////////////////////////////////////////////////////////

    /**  @author David Kaspar */
    public String dumpFile(DataObject dao) {
        SourceCookie sc = (SourceCookie) dao.getCookie(SourceCookie.class);
        SourceElement se = sc.getSource();
        ClassElement[] cea = se.getClasses();
        if (cea == null)
            return "";
        ClassElement[] newcea = new ClassElement[cea.length];
        for (int a = 0; a < cea.length; a ++)
            newcea[a] = (ClassElement) cea[a].clone();
        newcea = sortClasses(newcea);
        String str = "";
        for (int a = 0; a < newcea.length; a ++)
            str += newcea[a].toString();
        return str;
    }
    
    /**  @author David Kaspar */
    public ClassElement[] sortClasses(ClassElement[] cea) {
        Arrays.sort(cea, new Comparator() {
            public int compare(Object o1, Object o2) {
                return ((ClassElement) o1).getName().getName().compareTo(((ClassElement) o2).getName().getName());
            }
        });
        for (int a = 0; a < cea.length; a ++) {
            ClassElement ce = cea[a];
            try {
                ce.setInterfaces(sortInterfaces(ce.getInterfaces()));
                ce.setFields(sortFields(ce.getFields()));
                ce.setInitializers(sortInitializers(ce.getInitializers()));
                ce.setConstructors(sortConstructors(ce.getConstructors()));
                ce.setMethods(sortMethods(ce.getMethods()));
                ce.setClasses(sortClasses(ce.getClasses()));
            } catch (Exception e) {
                log("ERROR: Exception while normalizing class: ClassElement: " + ce.getName() + " | " + ce.getSignature(), e);
                throw new AssertionFailedErrorException(e);
            }
        }
        return cea;
    }
    
    /**  @author David Kaspar */
    public static Identifier[] sortInterfaces(Identifier[] ar) {
        Arrays.sort(ar, new Comparator() {
            public int compare(Object o1, Object o2) {
                return ((Identifier) o1).getName().compareTo(((Identifier) o2).getName());
            }
        });
        return ar;
    }
    
    /**  @author David Kaspar */
    public static FieldElement[] sortFields(FieldElement[] ar) {
        Arrays.sort(ar, new Comparator() {
            public int compare(Object o1, Object o2) {
                return ((FieldElement) o1).getName().getName().compareTo(((FieldElement) o2).getName().getName());
            }
        });
        return ar;
    }
    
    /**  @author David Kaspar */
    public static InitializerElement[] sortInitializers(InitializerElement[] ar) {
        Arrays.sort(ar, new Comparator() {
            public int compare(Object o1, Object o2) {
                InitializerElement s1 = (InitializerElement) o1;
                InitializerElement s2 = (InitializerElement) o2;
                if (s1.isStatic() == s2.isStatic())
                    return 0;
                return (s1.isStatic()) ? -1 : 1;
            }
        });
        return ar;
    }
    
    /**  @author David Kaspar */
    public static ConstructorElement[] sortConstructors(ConstructorElement[] ar) {
        Arrays.sort(ar, new Comparator() {
            public int compare(Object o1, Object o2) {
                return ((ConstructorElement) o1).getName().getName().compareTo(((ConstructorElement) o2).getName().getName());
            }
        });
        return ar;
    }
    
    /**  @author David Kaspar */
    public static MethodElement[] sortMethods(MethodElement[] ar) {
        Arrays.sort(ar, new Comparator() {
            public int compare(Object o1, Object o2) {
                return ((MethodElement) o1).getName().getName().compareTo(((MethodElement) o2).getName().getName());
            }
        });
        return ar;
    }
    
    // MAIN ////////////////////////////////////////////////////////////////////
    
    public static void main(String[] args) throws Exception {
        DEBUG = false;
        System.setProperty("xmltest.dbgTimeouts", "true");
        TestRunner.run(SAXGeneratorJTest.class);
        //TestRunner.run(suite());
    }
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.