You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Michael Dick <mi...@gmail.com> on 2010/11/19 03:58:22 UTC

Re: svn commit: r1036673 - in /openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest: ./ Actor.java DataLoader.java LocalJESTTest.java Movie.java TestRelaxQueryParameterType.java

I've moved these tests to the jest sandbox - due to the compilation errors
(no junit 4).

On Thu, Nov 18, 2010 at 5:06 PM, <pp...@apache.org> wrote:

> Author: ppoddar
> Date: Thu Nov 18 23:06:23 2010
> New Revision: 1036673
>
> URL: http://svn.apache.org/viewvc?rev=1036673&view=rev
> Log:
> OPENJPA-1859: Add few encoding tests
>
> Added:
>
>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/
>
>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Actor.java
>   (with props)
>
>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/DataLoader.java
>   (with props)
>
>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/LocalJESTTest.java
>   (with props)
>
>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Movie.java
>   (with props)
>
>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/TestRelaxQueryParameterType.java
>   (with props)
>
> Added:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Actor.java
> URL:
> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Actor.java?rev=1036673&view=auto
>
> ==============================================================================
> ---
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Actor.java
> (added)
> +++
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Actor.java
> Thu Nov 18 23:06:23 2010
> @@ -0,0 +1,102 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you 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 org.apache.openjpa.persistence.jest;
> +
> +import java.util.Date;
> +import java.util.HashSet;
> +import java.util.Set;
> +
> +import javax.persistence.CascadeType;
> +import javax.persistence.Entity;
> +import javax.persistence.Id;
> +import javax.persistence.ManyToOne;
> +import javax.persistence.OneToMany;
> +import javax.persistence.OneToOne;
> +
> +/**
> + * A persistent entity with singular and plural association to test JEST
> object marshalling.
> + *
> + * @author Pinaki Poddar
> + *
> + */
> +@Entity
> +public class Actor {
> +    public static enum Gender {Male, Female};
> +    @Id
> +    private String id;
> +    private String firstName;
> +    private String lastName;
> +    private Gender gender;
> +    private Date dob;
> +    @OneToOne
> +    private Actor partner;
> +    @OneToMany
> +    private Set<Movie> movies;
> +
> +    protected Actor() {
> +
> +    }
> +
> +    public Actor(String id, String firstName, String lastName, Gender
> gender, Date dob) {
> +        super();
> +        this.id = id;
> +        this.firstName = firstName;
> +        this.lastName = lastName;
> +        this.gender = gender;
> +        this.dob = dob;
> +    }
> +
> +    public String getId() {
> +        return id;
> +    }
> +
> +    public String getFirstName() {
> +        return firstName;
> +    }
> +
> +    public String getLastName() {
> +        return lastName;
> +    }
> +
> +    public Gender getGender() {
> +        return gender;
> +    }
> +
> +    public Date getDob() {
> +        return dob;
> +    }
> +    public Actor getPartner() {
> +        return partner;
> +    }
> +
> +    public void setPartner(Actor partner) {
> +        this.partner = partner;
> +    }
> +
> +    public Set<Movie> getMovies() {
> +        return movies;
> +    }
> +
> +    public void addMovie(Movie movie) {
> +        if (movies == null)
> +            movies = new HashSet<Movie>();
> +        movies.add(movie);
> +    }
> +}
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Actor.java
>
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Actor.java
>
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
> Added:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/DataLoader.java
> URL:
> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/DataLoader.java?rev=1036673&view=auto
>
> ==============================================================================
> ---
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/DataLoader.java
> (added)
> +++
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/DataLoader.java
> Thu Nov 18 23:06:23 2010
> @@ -0,0 +1,130 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you 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 org.apache.openjpa.persistence.jest;
> +
> +import java.util.ArrayList;
> +import java.util.Date;
> +import java.util.List;
> +import java.util.Random;
> +
> +import javax.persistence.EntityManager;
> +
> +/**
> + * Loads some example Actor-Movie data.
> + *
> + * @author Pinaki Poddar
> + *
> + */
> +public class DataLoader {
> +    @SuppressWarnings("deprecation")
> +    public static Object[][] ACTOR_DATA = {
> +        new Object[] {"m01", "Robert", "Redford", Actor.Gender.Male, new
> Date(1950, 1, 12)},
> +        new Object[] {"m02", "Robert", "De Niro", Actor.Gender.Male, new
> Date(1940, 4, 14)},
> +        new Object[] {"m03", "Al",     "Pacino",  Actor.Gender.Male, new
> Date(1950, 1, 12)},
> +        new Object[] {"m04", "Brad",   "Pitt",    Actor.Gender.Male, new
> Date(1940, 4, 14)},
> +        new Object[] {"m05", "Clint",  "Eastwood",Actor.Gender.Male, new
> Date(1950, 1, 12)},
> +
> +        new Object[] {"f01", "Meryl",   "Streep",    Actor.Gender.Female,
> new Date(1940, 4, 14)},
> +        new Object[] {"f02", "Anglina", "Jolie",     Actor.Gender.Female,
> new Date(1950, 1, 12)},
> +        new Object[] {"f03", "Goldie",  "Hawn",      Actor.Gender.Female,
> new Date(1940, 4, 14)},
> +        new Object[] {"f04", "Diane",   "Keaton",    Actor.Gender.Female,
> new Date(1950, 1, 12)},
> +        new Object[] {"f05", "Catherine", "Hepburn", Actor.Gender.Female,
> new Date(1940, 4, 14)},
> +    };
> +
> +    public static Object[][] MOVIE_DATA = {
> +        new Object[] {"One flew over the cuckoo's nest", 1980},
> +        new Object[] {"Everyone Says I Love You", 1980},
> +        new Object[] {"Where Eagles Dare", 1980},
> +        new Object[] {"Fight Club", 1980},
> +        new Object[] {"Horse Whisperer", 1980},
> +    };
> +
> +    public void populate(EntityManager em) throws Exception {
> +        Long count = em.createQuery("select count(m) from Movie m",
> Long.class).getSingleResult();
> +        if (count != null && count.longValue() > 0) {
> +            System.err.println("Found " + count + " Movie records in the
> database");
> +            return;
> +        }
> +
> +
> +        List<Actor> actors = createActors();
> +        List<Movie> movies = createMovies();
> +        linkActorAndMovie(actors, movies);
> +        makePartner(actors);
> +        em.getTransaction().begin();
> +        for (Actor a : actors) {
> +            em.persist(a);
> +        }
> +        for (Movie m : movies) {
> +            em.persist(m);
> +        }
> +        em.getTransaction().commit();
> +    }
> +
> +    List<Actor> createActors() {
> +        List<Actor> actors = new ArrayList<Actor>();
> +        for (Object[] a : ACTOR_DATA) {
> +            Actor actor = new Actor((String)a[0], (String)a[1],
> (String)a[2], (Actor.Gender)a[3], (Date)a[4]);
> +            actors.add(actor);
> +        }
> +        return actors;
> +    }
> +
> +    List<Movie> createMovies() {
> +        List<Movie> movies = new ArrayList<Movie>();
> +        for (Object[] m : MOVIE_DATA) {
> +            Movie movie = new Movie((String)m[0], (Integer)m[1]);
> +            movies.add(movie);
> +        }
> +        return movies;
> +    }
> +
> +    void linkActorAndMovie(List<Actor> actors, List<Movie> movies) {
> +        for (Actor a : actors) {
> +            int n = rng.nextInt(movies.size());
> +            for (int i = 0; i < n; i++) {
> +                Movie m = random(movies);
> +                a.addMovie(m);
> +                m.addActor(a);
> +            }
> +        }
> +    }
> +
> +    void makePartner(List<Actor> actors) {
> +        for (Actor p : actors) {
> +            if (p.getPartner() != null)
> +                continue;
> +            Actor f = random(actors);
> +            if (f.getPartner() == null && p.getGender() != f.getGender())
> {
> +               p.setPartner(f);
> +               f.setPartner(p);
> +            }
> +       }
> +    }
> +
> +    /**
> +     * Select a random element from the given list.
> +     */
> +    private <T> T random(List<T> list) {
> +        return list.get(rng.nextInt(list.size()));
> +    }
> +
> +    private static Random rng = new Random();
> +}
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/DataLoader.java
>
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/DataLoader.java
>
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
> Added:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/LocalJESTTest.java
> URL:
> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/LocalJESTTest.java?rev=1036673&view=auto
>
> ==============================================================================
> ---
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/LocalJESTTest.java
> (added)
> +++
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/LocalJESTTest.java
> Thu Nov 18 23:06:23 2010
> @@ -0,0 +1,149 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you 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 org.apache.openjpa.persistence.jest;
> +
> +
> +import java.io.PrintWriter;
> +import java.util.ArrayList;
> +import java.util.Collection;
> +import java.util.List;
> +
> +import javax.persistence.EntityManager;
> +import javax.persistence.EntityManagerFactory;
> +import javax.persistence.Persistence;
> +import javax.persistence.Query;
> +import javax.persistence.metamodel.Metamodel;
> +import javax.xml.validation.Schema;
> +
> +import junit.framework.Assert;
> +
> +import org.apache.openjpa.kernel.OpenJPAStateManager;
> +import org.apache.openjpa.kernel.StoreContext;
> +import org.apache.openjpa.persistence.JPAFacadeHelper;
> +import org.junit.After;
> +import org.junit.AfterClass;
> +import org.junit.Before;
> +import org.junit.BeforeClass;
> +import org.junit.Test;
> +import org.w3c.dom.Document;
> +
> +/**
> + * Base class for testing JEST outside a container.
> + *
> + * @author Pinaki Poddar
> + *
> + */
> +public class LocalJESTTest {
> +    private static EntityManagerFactory _emf;
> +    private static Metamodel _model;
> +    private EntityManager _em;
> +
> +
> +    @BeforeClass
> +    public static void setUpBeforeClass() throws Exception {
> +        _emf = Persistence.createEntityManagerFactory("jest");
> +        _model = _emf.getMetamodel();
> +
> +        new DataLoader().populate(_emf.createEntityManager());
> +
> +    }
> +
> +    @AfterClass
> +    public static void tearDownAfterClass() throws Exception {
> +        _emf.close();
> +    }
> +
> +    @Before
> +    public void setUp() throws Exception {
> +        _em = _emf.createEntityManager();
> +        _em.getTransaction().begin();
> +    }
> +
> +    @After
> +    public void tearDown() throws Exception {
> +        _em.getTransaction().rollback();
> +        _em.close();
> +    }
> +
> +    @Test
> +    public void testUnitIsAvaliable() {
> +        Assert.assertNotNull(_emf);
> +    }
> +    @Test
> +    public void testModelIsAvaliable() {
> +        Assert.assertNotNull(_model);
> +        Assert.assertFalse(_model.getManagedTypes().isEmpty());
> +    }
> +
> +    @Test
> +    public void testXMLEncoderForColllection() {
> +        encodeAndValidateQueryResult("select m from Movie m", false);
> +    }
> +
> +    @Test
> +    public void testXMLEncoderForInstance() {
> +        encodeAndValidateQueryResult("select m from Movie m where m.title
> = '" + DataLoader.MOVIE_DATA[1][0] + "'",
> +            true);
> +    }
> +
> +    @Test
> +    public void testDomainModelEncoder() {
> +        DomainCommand formatter = new DomainCommand();
> +        Document doc = formatter.encode(_model);
> +        try {
> +            new XMLFormatter().write(doc, new PrintWriter(System.err));
> +        } catch (Exception e) {
> +            e.printStackTrace();
> +            Assert.fail();
> +        }
> +    }
> +
> +    void encodeAndValidateQueryResult(String jpql, boolean single) {
> +        XMLFormatter formatter = new XMLFormatter();
> +        Query query = _em.createQuery(jpql);
> +        Document doc = null;
> +        if (single)
> +            doc =
> formatter.encodeManagedInstance(toStateManager(query.getSingleResult()),
> _model);
> +        else
> +            doc =
> formatter.encodeManagedInstances(toStateManager(query.getResultList()),
> _model);
> +        try {
> +            formatter.write(doc, new PrintWriter(System.err));
> +            formatter.validate(doc);
> +        } catch (Exception e) {
> +            e.printStackTrace();
> +            Assert.fail(e.getMessage());
> +        }
> +    }
> +
> +    OpenJPAStateManager toStateManager(Object obj) {
> +        StoreContext broker =
> ((StoreContext)JPAFacadeHelper.toBroker(_em));
> +        return broker.getStateManager(obj);
> +    }
> +
> +    List<OpenJPAStateManager> toStateManager(Collection<?> objects) {
> +        StoreContext broker =
> ((StoreContext)JPAFacadeHelper.toBroker(_em));
> +        List<OpenJPAStateManager> sms = new
> ArrayList<OpenJPAStateManager>();
> +        for (Object o : objects) {
> +            sms.add(broker.getStateManager(o));
> +        }
> +        return sms;
> +    }
> +
> +}
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/LocalJESTTest.java
>
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/LocalJESTTest.java
>
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
> Added:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Movie.java
> URL:
> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Movie.java?rev=1036673&view=auto
>
> ==============================================================================
> ---
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Movie.java
> (added)
> +++
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Movie.java
> Thu Nov 18 23:06:23 2010
> @@ -0,0 +1,77 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you 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 org.apache.openjpa.persistence.jest;
> +
> +import java.util.HashSet;
> +import java.util.Set;
> +
> +import javax.persistence.Entity;
> +import javax.persistence.FetchType;
> +import javax.persistence.GeneratedValue;
> +import javax.persistence.Id;
> +import javax.persistence.OneToMany;
> +
> +/**
> + * @author Pinaki Poddar
> + *
> + */
> +
> +@Entity
> +public class Movie {
> +    @Id
> +    @GeneratedValue
> +    private long id;
> +    private String title;
> +    private int year;
> +    @OneToMany(fetch=FetchType.EAGER)
> +    private Set<Actor> actors;
> +
> +    protected Movie() {
> +
> +    }
> +    public Movie(String title, int year) {
> +        super();
> +        this.title = title;
> +        this.year = year;
> +    }
> +
> +    public long getId() {
> +        return id;
> +    }
> +
> +    public String getTitle() {
> +        return title;
> +    }
> +
> +    public void addActor(Actor a) {
> +        if (actors == null)
> +            actors = new HashSet<Actor>();
> +        actors.add(a);
> +    }
> +
> +    public Set<Actor> getActors() {
> +        return actors;
> +    }
> +
> +    public int getYear() {
> +        return year;
> +    }
> +
> +}
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Movie.java
>
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/Movie.java
>
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
> Added:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/TestRelaxQueryParameterType.java
> URL:
> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/TestRelaxQueryParameterType.java?rev=1036673&view=auto
>
> ==============================================================================
> ---
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/TestRelaxQueryParameterType.java
> (added)
> +++
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/TestRelaxQueryParameterType.java
> Thu Nov 18 23:06:23 2010
> @@ -0,0 +1,38 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you 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 org.apache.openjpa.persistence.jest;
> +
> +import org.apache.openjpa.kernel.Filters;
> +
> +import junit.framework.TestCase;
> +
> +/**
> + * @author Pinaki Poddar
> + *
> + */
> +public class TestRelaxQueryParameterType extends TestCase {
> +    public static enum Gender {MALE, FEMALE};
> +    public void testValidStringToEnum() {
> +        Filters.convert("MALE", Gender.class);
> +    }
> +    public void testInvalidStringToEnum() {
> +        Filters.convert("M", Gender.class);
> +    }
> +}
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/TestRelaxQueryParameterType.java
>
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange:
> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jest/TestRelaxQueryParameterType.java
>
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
>
>