blob: 4fa3787d8223e99088334b0e602ecc7a3463d699 [file] [log] [blame]
/* Copyright 2006-2007 Graeme Rocher
*
* 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 groovy.util
/**
* Tests for the ConfigSlurper class
* @author Graeme Rocher
* @since 0.6
*
* Created: Jun 19, 2007
* Time: 6:29:33 PM
*
*/
class ConfigSlurperTest extends GroovyTestCase {
void testEnvironmentProperties2() {
def config = new ConfigSlurper("production").parse('''
dataSource {
pooling = false
driverClassName = "org.hsqldb.jdbcDriver"
username = "sa"
password = ""
}
environments {
development {
dataSource {
dbCreate = "create-drop"
url = "jdbc:hsqldb:mem:devDB"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:mem:testDb"
}
}
production {
dataSource {
password = "secret"
dbCreate = "update"
url = "jdbc:hsqldb:file:prodDb;shutdown=true"
}
}
}''')
assertEquals false, config.dataSource.pooling
assertEquals "org.hsqldb.jdbcDriver", config.dataSource.driverClassName
assertEquals "sa", config.dataSource.username
assertEquals "secret", config.dataSource.password
assertEquals "update", config.dataSource.dbCreate
assertEquals "jdbc:hsqldb:file:prodDb;shutdown=true", config.dataSource.url
}
void testParseProperties() {
Properties props = new Properties()
props['foo'] = 'bar'
props['log4j.appender.NULL']='org.apache.log4j.varia.NullAppender'
props['log4j.rootLogger']='error, NULL'
props['log4j.logger.org.codehaus.groovy.grails.plugins']='info,NULL'
props['log4j.additivity.org.codehaus.groovy.grails.plugins']='false'
props['log4j.additivity.org.springframework']='false'
props['log4j.logger.grails.spring']='info,NULL'
props['log4j.appender.NULL.layout']='org.apache.log4j.PatternLayout'
def config = new ConfigSlurper().parse(props)
assertEquals "org.apache.log4j.PatternLayout", config.log4j.appender.'NULL.layout' // tests overlapping properties
assertEquals "org.apache.log4j.varia.NullAppender", config.log4j.appender.NULL // tests overlapping properties
assertEquals 'error, NULL', config.log4j.rootLogger
assertEquals 'info,NULL', config.log4j.logger.org.codehaus.groovy.grails.plugins
assertEquals 'false', config.log4j.additivity.org.springframework
assertEquals 'bar', config.foo
}
void testSimpleProperties() {
def slurper = new ConfigSlurper()
def config = slurper.parse('''
smtp.server.url = "localhost"
smtp.username = "fred"
''')
assert config
println config
println config.smtp.server
assertEquals "localhost", config.smtp.server.url
assertEquals "fred", config.smtp.username
}
void testScopedProperties() {
def slurper = new ConfigSlurper()
def config = slurper.parse('''
smtp {
mail.host = 'smtp.myisp.com'
mail.auth.user = 'server'
}
resources.URL = "http://localhost:80/resources"
''')
assert config
assertEquals "smtp.myisp.com", config.smtp.mail.host
assertEquals "server", config.smtp.mail.auth.user
assertEquals "http://localhost:80/resources", config.resources.URL
}
void testScopedPropertiesWithNesting() {
def slurper = new ConfigSlurper()
def config = slurper.parse('''
smtp {
mail {
host = 'smtp.myisp.com'
auth.user = 'server'
}
}
resources.URL = "http://localhost:80/resources"
''')
assert config
assert "smtp.myisp.com" == config.smtp.mail.host
assertEquals "server", config.smtp.mail.auth.user
assertEquals "http://localhost:80/resources", config.resources.URL
}
void testLog4jConfiguration() {
def slurper = new ConfigSlurper()
def config = slurper.parse('''
log4j {
appender {
stdout("org.apache.log4j.ConsoleAppender") {
layout="org.apache.log4j.PatternLayout"
}
}
rootLogger="error,stdout"
logger {
org.codehaus.groovy.grails="info,stdout"
org.springframework="info,stdout"
}
additivity {
org.codehaus.groovy.grails=false
org.springframework=false
}
}
''')
assert config
println config
assertEquals "org.apache.log4j.ConsoleAppender", config.log4j.appender.stdout
assertEquals "org.apache.log4j.PatternLayout", config.log4j.appender."stdout.layout"
assertEquals "error,stdout", config.log4j.rootLogger
assertEquals "info,stdout", config.log4j.logger.org.codehaus.groovy.grails
assertEquals false, config.log4j.additivity.org.codehaus.groovy.grails
}
void testEnvironmentSpecificConfig() {
def slurper = new ConfigSlurper()
def config = slurper.parse('''
log4j {
appender {
stdout("org.apache.log4j.ConsoleAppender") {
layout="org.apache.log4j.PatternLayout"
}
}
rootLogger="error,stdout"
logger {
org.codehaus.groovy.grails="info,stdout"
org.springframework="info,stdout"
}
additivity {
org.codehaus.groovy.grails=false
org.springframework=false
}
}
environments {
development {
log4j.logger.org.codehaus.groovy.grails="debug,stdout"
}
}
''')
assert config
assertEquals "org.apache.log4j.ConsoleAppender", config.log4j.appender.stdout
assertEquals "org.apache.log4j.PatternLayout", config.log4j.appender."stdout.layout"
assertEquals "error,stdout", config.log4j.rootLogger
assertEquals "info,stdout", config.log4j.logger.org.codehaus.groovy.grails
assertEquals false, config.log4j.additivity.org.codehaus.groovy.grails
slurper.setEnvironment("development")
config = slurper.parse('''
log4j {
appender {
stdout("org.apache.log4j.ConsoleAppender") {
layout="org.apache.log4j.PatternLayout"
}
}
rootLogger="error,stdout"
logger {
org.codehaus.groovy.grails="info,stdout"
org.springframework="info,stdout"
}
additivity {
org.codehaus.groovy.grails=false
org.springframework=false
}
}
environments {
development {
log4j.logger.org.codehaus.groovy.grails="debug,stdout"
log4j.appender.layout="MyLayout"
}
production {
log4j.appender.stdout="MyRobustFileAppender"
}
}
''')
assert config
assertEquals "org.apache.log4j.ConsoleAppender", config.log4j.appender.stdout
assertEquals "MyLayout", config.log4j.appender.layout
assertEquals "error,stdout", config.log4j.rootLogger
assertEquals "debug,stdout", config.log4j.logger.org.codehaus.groovy.grails
assertEquals false, config.log4j.additivity.org.codehaus.groovy.grails
}
void testFlattenConfig() {
def slurper = new ConfigSlurper()
def config = slurper.parse('''
log4j {
appender {
stdout("org.apache.log4j.ConsoleAppender") {
layout="org.apache.log4j.PatternLayout"
}
}
rootLogger="error,stdout"
logger {
org.codehaus.groovy.grails="info,stdout"
org.springframework="info,stdout"
}
additivity {
org.codehaus.groovy.grails=false
org.springframework=false
}
}
''')
config = config.flatten()
assertEquals "org.apache.log4j.ConsoleAppender", config."log4j.appender.stdout"
assertEquals "org.apache.log4j.PatternLayout", config."log4j.appender.stdout.layout"
assertEquals "error,stdout", config."log4j.rootLogger"
assertEquals "info,stdout", config."log4j.logger.org.codehaus.groovy.grails"
assertEquals false, config."log4j.additivity.org.codehaus.groovy.grails"
}
void testToProperties() {
def slurper = new ConfigSlurper()
def config = slurper.parse('''
log4j {
appender {
stdout("org.apache.log4j.ConsoleAppender") {
layout="org.apache.log4j.PatternLayout"
}
}
rootLogger="error,stdout"
logger {
org.codehaus.groovy.grails="info,stdout"
org.springframework="info,stdout"
}
additivity {
org.codehaus.groovy.grails=false
org.springframework=false
}
}
''')
def props = config.toProperties()
assert props
assertEquals "org.apache.log4j.ConsoleAppender", props."log4j.appender.stdout"
assertEquals "org.apache.log4j.PatternLayout", props."log4j.appender.stdout.layout"
assertEquals "error,stdout", props."log4j.rootLogger"
assertEquals "info,stdout", props."log4j.logger.org.codehaus.groovy.grails"
assertEquals "false", props."log4j.additivity.org.codehaus.groovy.grails"
props = config.log4j.toProperties("log4j")
assertEquals "org.apache.log4j.ConsoleAppender", props."log4j.appender.stdout"
assertEquals "org.apache.log4j.PatternLayout", props."log4j.appender.stdout.layout"
assertEquals "error,stdout", props."log4j.rootLogger"
assertEquals "info,stdout", props."log4j.logger.org.codehaus.groovy.grails"
assertEquals "false", props."log4j.additivity.org.codehaus.groovy.grails"
}
void testConfigTokensAsStrings() {
def slurper = new ConfigSlurper()
def config = slurper.parse('''
log4j {
appender.stdout = "org.apache.log4j.ConsoleAppender"
appender."stdout.layout"="org.apache.log4j.PatternLayout"
rootLogger="error,stdout"
}
''')
assert config
assertEquals "org.apache.log4j.ConsoleAppender", config.log4j.appender.stdout
assertEquals "org.apache.log4j.PatternLayout", config.log4j.appender."stdout.layout"
assertEquals "error,stdout", config.log4j.rootLogger
}
void testConfigInterReferencing() {
def slurper = new ConfigSlurper()
def config = slurper.parse('''
var.one=5
var.two=var.one*2
''')
assertEquals 5, config.var.one
assertEquals 10, config.var.two
}
void testSerializeConfig() {
def text = '''
log4j {
appender.stdout="org.apache.log4j.ConsoleAppender"
appender.'stdout.layout'="org.apache.log4j.PatternLayout"
rootLogger="error,stdout"
logger {
org.codehaus.groovy.grails="info,stdout"
org.springframework="info,stdout"
}
additivity.'default' = true
additivity.org.codehaus.groovy.grails=false
additivity.org.springframework=false
}'''
def slurper = new ConfigSlurper()
def config = slurper.parse(text)
assert config
def sw = new StringWriter()
config.writeTo(sw)
def newText = sw.toString()
println newText
config = slurper.parse(newText)
assertEquals "org.apache.log4j.ConsoleAppender", config.log4j.appender.stdout
assertEquals "org.apache.log4j.PatternLayout", config.log4j.appender."stdout.layout"
assertEquals "error,stdout", config.log4j.rootLogger
assertEquals "info,stdout", config.log4j.logger.org.codehaus.groovy.grails
assertEquals false, config.log4j.additivity.org.codehaus.groovy.grails
}
}