blob: d05eedca4f8638ca534a32fdbf92af80db4102fb [file] [log] [blame]
/*
* 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 json
import org.junit.BeforeClass
import org.junit.Test
import static groovy.grape.Grape.resolve
import static groovy.test.GroovyAssert.assertScript
final class JsonBuilderTest {
@BeforeClass
static void setUpClass() {
// make sure files are installed locally
[
[groupId:'com.google.code.gson', artifactId:'gson', version:'2.3.1'],
[groupId:'net.javacrumbs.json-unit', artifactId:'json-unit', version:'1.5.6']
].each { spec ->
resolve([autoDownload:true, classLoader:new GroovyClassLoader()], spec)
}
}
@Test
void testJsonBuilder() {
assertScript """
@Grab('com.google.code.gson:gson:2.3.1') // json-unit requires gson, jackson1, or jackson2
@Grab('net.javacrumbs.json-unit:json-unit:1.5.6')
import net.javacrumbs.jsonunit.JsonAssert
import groovy.json.*
// tag::json_string[]
String carRecords = '''
{
"records": {
"car": {
"name": "HSV Maloo",
"make": "Holden",
"year": 2006,
"country": "Australia",
"record": {
"type": "speed",
"description": "production pickup truck with speed of 271kph"
}
}
}
}
'''
// end::json_string[]
// tag::json_builder[]
JsonBuilder builder = new JsonBuilder()
builder.records {
car {
name 'HSV Maloo'
make 'Holden'
year 2006
country 'Australia'
record {
type 'speed'
description 'production pickup truck with speed of 271kph'
}
}
}
String json = JsonOutput.prettyPrint(builder.toString())
// end::json_builder[]
// tag::json_assert[]
JsonAssert.assertJsonEquals(json, carRecords)
// end::json_assert[]
"""
}
void testJsonBuilderWithGenerator() {
assertScript """
// tag::json_builder_generator[]
import groovy.json.*
def generator = new JsonGenerator.Options()
.excludeNulls()
.excludeFieldsByName('make', 'country', 'record')
.excludeFieldsByType(Number)
.addConverter(URL) { url -> "http://groovy-lang.org" }
.build()
JsonBuilder builder = new JsonBuilder(generator)
builder.records {
car {
name 'HSV Maloo'
make 'Holden'
year 2006
country 'Australia'
homepage new URL('http://example.org')
record {
type 'speed'
description 'production pickup truck with speed of 271kph'
}
}
}
assert builder.toString() == '{"records":{"car":{"name":"HSV Maloo","homepage":"http://groovy-lang.org"}}}'
// end::json_builder_generator[]
"""
}
}