Skip to content

Commit

Permalink
Merge branch '3.0.x' into 3.1.x
Browse files Browse the repository at this point in the history
  • Loading branch information
graemerocher committed Apr 14, 2016
2 parents 98d3dfd + 35f6973 commit 7667c9f
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,7 @@
import grails.converters.JSON;
import groovy.lang.GroovyObject;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.*;

import org.grails.core.util.ClassPropertyFetcher;
import org.grails.core.artefact.DomainClassArtefactHandler;
Expand Down Expand Up @@ -166,10 +156,10 @@ else if (referenceObject instanceof SortedSet) {
referenceObject = new TreeSet((SortedSet) referenceObject);
}
else if (referenceObject instanceof Set) {
referenceObject = new HashSet((Set) referenceObject);
referenceObject = new LinkedHashSet((Set) referenceObject);
}
else if (referenceObject instanceof Map) {
referenceObject = new HashMap((Map) referenceObject);
referenceObject = new LinkedHashMap((Map) referenceObject);
}
else if (referenceObject instanceof Collection) {
referenceObject = new ArrayList((Collection) referenceObject);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,10 @@ else if (referenceObject instanceof SortedSet) {
referenceObject = new TreeSet((SortedSet) referenceObject);
}
else if (referenceObject instanceof Set) {
referenceObject = new HashSet((Set) referenceObject);
referenceObject = new LinkedHashSet((Set) referenceObject);
}
else if (referenceObject instanceof Map) {
referenceObject = new HashMap((Map) referenceObject);
referenceObject = new LinkedHashMap((Map) referenceObject);
}
else if (referenceObject instanceof Collection) {
referenceObject = new ArrayList((Collection) referenceObject);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package org.grails.web.converters.marshaller.json

import grails.converters.JSON
import grails.converters.XML
import grails.core.DefaultGrailsApplication
import grails.persistence.Entity
import org.grails.web.converters.configuration.ConvertersConfigurationInitializer
import spock.lang.Specification

class DomainClassMarshallerSpec extends Specification {
void setup() {
final initializer = new ConvertersConfigurationInitializer()
def grailsApplication = new DefaultGrailsApplication(Author, Book)
grailsApplication.initialise()
initializer.grailsApplication = grailsApplication
initializer.initialize()
}

void "Test DomainClassMarshaller's should maintain order of relations"() {
def json, xml

when:
def book = new Book(
id: 1, version: 2,
authorsSet: authors as Set,
authorsMap: authors.inject([:]) { acc, val ->
acc[val.name] = val
acc
}
)
JSON.use('deep') {
json = book as JSON
}
XML.use('deep') {
xml = book as XML
}

then:
json.toString() == expectedJson
xml.toString() == expectedXml

where:
authors | expectedJson | expectedXml
[new Author(id: 1, name: 'a'), new Author(id: 2, name: 'b')] | '{"class":"org.grails.web.converters.marshaller.json.Book","id":1,"authorsMap":{"a":{"class":"org.grails.web.converters.marshaller.json.Author","id":1,"name":"a"},"b":{"class":"org.grails.web.converters.marshaller.json.Author","id":2,"name":"b"}},"authorsSet":[{"class":"org.grails.web.converters.marshaller.json.Author","id":1,"name":"a"},{"class":"org.grails.web.converters.marshaller.json.Author","id":2,"name":"b"}]}' | '<?xml version="1.0" encoding="UTF-8"?><book id="1"><authorsMap><entry key="a" id="1"><name>a</name></entry><entry key="b" id="2"><name>b</name></entry></authorsMap><authorsSet><author id="1"><name>a</name></author><author id="2"><name>b</name></author></authorsSet></book>'
[new Author(id: 2, name: 'b'), new Author(id: 1, name: 'a')] | '{"class":"org.grails.web.converters.marshaller.json.Book","id":1,"authorsMap":{"b":{"class":"org.grails.web.converters.marshaller.json.Author","id":2,"name":"b"},"a":{"class":"org.grails.web.converters.marshaller.json.Author","id":1,"name":"a"}},"authorsSet":[{"class":"org.grails.web.converters.marshaller.json.Author","id":2,"name":"b"},{"class":"org.grails.web.converters.marshaller.json.Author","id":1,"name":"a"}]}' | '<?xml version="1.0" encoding="UTF-8"?><book id="1"><authorsMap><entry key="b" id="2"><name>b</name></entry><entry key="a" id="1"><name>a</name></entry></authorsMap><authorsSet><author id="2"><name>b</name></author><author id="1"><name>a</name></author></authorsSet></book>'
}
}

@Entity
class Author {
Long id
Long version
String name
}

@Entity
class Book {
static hasMany = [authorsSet: Author, authorsMap: Author]
Long id
Long version
Set authorsSet
Map authorsMap
}

0 comments on commit 7667c9f

Please sign in to comment.