/*   Copyright 2004 The Apache Software Foundation
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package dom.checkin;

import org.apache.xmlbeans.XmlCursor;
import org.junit.Test;
import org.w3c.dom.Node;
import xbean.dom.complexTypeTest.ElementT;
import xbean.dom.complexTypeTest.EltTypeDocument;
import xbean.dom.complexTypeTest.MixedT;
import xbean.dom.complexTypeTest.MixedTypeDocument;
import xbean.dom.dumbNS.RootDocument;

import java.math.BigInteger;

import static org.junit.Assert.assertNull;

public class DirtyCacheTests {
    @Test
    public void testDirtyValue() throws Exception {
        EltTypeDocument o = EltTypeDocument.Factory.newInstance();
        ElementT t = o.addNewEltType();
        t.setChild1(new BigInteger("30"));
        Node n = o.getDomNode();
        n = n.getFirstChild();
        n = n.getFirstChild();
        n = n.getFirstChild();//text
        String s = n.getNodeValue();
        System.out.println(n.getNodeName() + " " + s);
        t.setChild1(new BigInteger("5"));
        s = n.getNodeValue();
        System.out.println(n.getNodeName() + " " + s);
    }

    @Test
    public void testDirtyValue1() throws Exception {
        MixedTypeDocument o = MixedTypeDocument.Factory.newInstance();
        MixedT testElt = o.addNewMixedType();
        assertNull(testElt.getChild1());
        assertNull(testElt.xgetChild1());
        testElt.setChild2(new BigInteger("5"));
        testElt.setChild3(new BigInteger("1"));
        testElt.setChild1(new BigInteger("0"));

        XmlCursor cur = testElt.newCursor();
        cur.toFirstContentToken();
        cur.insertChars("Random mixed content");
        Node n = o.getDomNode();
        n = n.getFirstChild();
        n = n.getFirstChild();

        String s = n.getNodeValue();
        System.out.println(n.getNodeName() + " " + s);
        n = n.getNextSibling();
        n = n.getFirstChild();

        s = n.getNodeValue();
        System.out.println(n.getNodeName() + " " + s);
    }

    @Test
    public void testDirtyValue2() throws Exception {
        RootDocument o = RootDocument.Factory.newInstance();
        RootDocument.Root testElt = o.addNewRoot();
        testElt.setB(new BigInteger("5"));
        Node n = o.getDomNode();
        n = n.getFirstChild();
        n = n.getAttributes().getNamedItem("b");

        System.out.println(n.getNodeName() + " " + n.getNodeValue());
    }
}
