boolean basicChildCompare()

in java/src/org/apache/qetest/xsl/XHTComparator.java [482:554]


    boolean basicChildCompare(Node gold, Node test, PrintWriter reporter,
                              boolean[] warning, Node next[])
    {

        next[0] = gold;
        next[1] = test;

        boolean alreadyTriedToAdvance = false;

        if ((null != gold) && (null == test))
        {
            gold = tryToAdvancePastWhitespace(gold, reporter, warning, next,
                                              0);
            alreadyTriedToAdvance = true;

            if ((null != gold) && (null == test))
            {
                reporter.println(MISSING_TEST_NODE + nodeTypeString(gold)
                               + SEPARATOR + SEPARATOR
                               + "missing node on test");

                return false;
            }
        }
        else if ((null == gold) && (null != test))
        {
            test = tryToAdvancePastWhitespace(test, reporter, warning, next,
                                              1);
            alreadyTriedToAdvance = true;

            if ((null == gold) && (null != test))
            {
                reporter.println(MISSING_GOLD_NODE + SEPARATOR
                               + nodeTypeString(test) + SEPARATOR
                               + "missing node on gold");

                return false;
            }
        }

        if ((null != gold) && (gold.getNodeType() != test.getNodeType()))
        {
            Node savedGold = gold;
            Node savedTest = test;

            if (!alreadyTriedToAdvance)
            {
                gold = tryToAdvancePastWhitespace(gold, reporter, warning,
                                                  next, 0);

                if (gold == savedGold)
                {
                    test = tryToAdvancePastWhitespace(test, reporter,
                                                      warning, next, 1);
                }
            }

            if ((null != gold) && (gold.getNodeType() != test.getNodeType()))
            {
                gold = savedGold;
                test = savedTest;

                reporter.println(MISMATCH_NODE + nodeTypeString(gold)
                               + SEPARATOR + nodeTypeString(test) + SEPARATOR
                               + "node type mismatch");
                printNodeDiff(gold, test, reporter);

                return false;
            }
        }

        return true;
    }  // end of basicChildCompare()