/*
 * (C) Copyright 2006-2014 Nuxeo SA (http://nuxeo.com/) and contributors.
 *
 * 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.
 *
 * Contributors:
 *     Nuxeo - initial API and implementation
 *
 */

package org.nuxeo.common.xmap;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.File;
import java.net.URL;

import org.junit.Test;

import org.nuxeo.common.xmap.Author.Gender;

public class ReverseXMapTest {

    @Test
    public void testReverse() throws Exception {
        XMap xmap = new XMap();
        xmap.register(Author.class);
        URL url = Thread.currentThread().getContextClassLoader().getResource(
                "test-xmap.xml");
        Author author = (Author) xmap.load(url);
        try {
            xmap.toXML(new String());
            fail("should throw IllegalArgumentException");
        } catch (IllegalArgumentException e) {
            String msg = e.getMessage();
            assertTrue(msg,
                    msg.contains("java.lang.String is NOT registred in xmap"));
        }

        // save the object
        // System.out.println(xmap.toXML(author));
        File file = File.createTempFile("xmap", "xml");
        file.deleteOnExit();
        xmap.toXML(author, file);

        // load map from new created file
        xmap = new XMap();
        xmap.register(Author.class);
        author = (Author) xmap.load(file.toURI().toURL());

        assertEquals("First test 22", author.title);
        assertEquals("bla bla", author.description);
        assertEquals(author, author.name.owner);
        assertEquals("my first name", author.name.firstName);
        assertEquals("my last name", author.name.lastName);
        assertEquals("The content", author.content.trim());
        assertEquals("author", author.nameType);
        assertEquals(Gender.MALE, author.gender);
        assertEquals(32, author.age);
        assertEquals("test1", author.getId());
        assertEquals("friend1_fn", author.friends.get(0).firstName);
        assertEquals("friend1_ln", author.friends.get(0).lastName);
        assertEquals("friend2_fn", author.friends.get(1).firstName);
        assertEquals("friend2_ln", author.friends.get(1).lastName);

        // assertEquals("Test <b>content</b>", author.testContent.trim());
        String t = author.testContent2.getFirstChild().getTextContent().trim();
        assertEquals("Test", t);

        assertFalse(author.content.equals(author.content.trim()));

        assertNull(author.testNullByDefaultForList);
        assertNull(author.testNullByDefaultForMap);

        // test map with objects
        assertEquals(2, author.persons.size());
        assertEquals("friend1_ln", author.persons.get("friend1_fn").lastName);
        assertEquals("friend1_fn", author.persons.get("friend1_fn").firstName);
        assertEquals("friend2_ln", author.persons.get("friend2_fn").lastName);
        assertEquals("friend2_fn", author.persons.get("friend2_fn").firstName);
    }

}

@@ -1836,37 +1836,8 @@
 %22);%0A
-        file.deleteOnExit();%0A
     
@@ -2031,16 +2031,39 @@
 oURL());
+%0A        file.delete();
 %0A%0A      

Delete temporary files ASAP