blob: b95e1769b982cf1d3d00c6dc3c850fbdbb24fa33 [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 groovy.lang
import groovy.test.GroovyTestCase
/**
* Tests the behaviour of the runtime evaluating methods of Groovy's MetaClass system
*
* @since 1.5
*/
class GetMethodsTest extends GroovyTestCase {
void testGetMethods() {
GMTest2.metaClass.doStuff = { -> "foo" }
GMTest2.metaClass.getFoo = { -> "foo" }
GMTest2.metaClass.bar = "bar"
GMTest2.metaClass.'static'.doMoreStuff = { -> "more" }
def t = new GMTest2()
assert t.metaClass.methods.find { it.name == 'one' }
assert t.metaClass.methods.find { it.name == 'three' }
assert t.metaClass.methods.find { it.name == 'foo' }
assert t.metaClass.methods.find { it.name == 'getSeven' }
assert t.metaClass.methods.find { it.name == 'getEight' }
assert t.metaClass.methods.find { it.name == 'bar' }
assert t.metaClass.methods.find { it.name == 'toString' }
assert t.metaClass.methods.find { it.name == 'getEight' }
assert t.metaClass.methods.find { it.name == 'stuff' }
assert t.metaClass.methods.find { it.name == 'doStuff' }
assert t.metaClass.methods.find { it.name == 'getFoo' }
assert t.metaClass.methods.find { it.name == 'getBar' }
assert t.metaClass.methods.find { it.name == 'setBar' }
assert t.metaClass.methods.find { it.name == 'doMoreStuff' }
}
void testGetProperties() {
GMTest2.metaClass.getFoo = { -> "foo" }
GMTest2.metaClass.bar = "bar"
def t = new GMTest2()
assert t.metaClass.properties.find { it.name == 'five' }
assert t.metaClass.properties.find { it.name == 'six' }
assert t.metaClass.properties.find { it.name == 'seven' }
assert t.metaClass.properties.find { it.name == 'eight' }
assert t.metaClass.properties.find { it.name == 'foo' }
assert t.metaClass.properties.find { it.name == 'bar' }
}
}
class GMTest1 {
String five
def two = { "three" }
def one() { "two" }
def one(String one) { "two: $one" }
def three(String one) { "four" }
def three(Integer one) { "four" }
def foo(String name) {
"bar"
}
String getSeven() { "seven" }
}
class GMTest2 extends GMTest1 {
String six
def bar(String name) { "foo" }
static stuff() { "goodie" }
String getEight() { "eight" }
}