|
Groovy example source code file (CategoryAnnotationTest.groovy)
The Groovy CategoryAnnotationTest.groovy source code
/*
* Copyright 2003-2011 the original author or authors.
*
* 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.lang
class CategoryAnnotationTest extends GroovyTestCase {
void testTransformationOfPropertyInvokedOnThis() {
//Test the fix for GROOVY-3367
assertScript """
@Category(Distance3367)
class DistanceCategory3367 {
Distance3367 plus(Distance3367 increment) {
new Distance3367(number: this.number + increment.number)
}
}
class Distance3367 {
def number
}
use(DistanceCategory3367) {
def d1 = new Distance3367(number: 5)
def d2 = new Distance3367(number: 10)
def d3 = d1 + d2
assert d3.number == 15
}
"""
}
void testTransformationWithCatchClause() {
//Test the fix for GROOVY-4801
assertScript """
class ExceptionHandler {
static def handled(Object self, Closure block) {
try { block.call() }
catch (Throwable t) { t.message }
}
}
@Mixin(ExceptionHandler)
class Caller {
def thrower() { handled { 1/0 } }
}
assert new Caller().thrower() == 'Division by zero'
"""
}
void testCategoryMethodsHavingDeclarationStatements() {
// GROOVY-3543: Declaration statements in category class' methods were not being visited by
// CategoryASTTransformation's expressionTransformer resulting in declaration variables not being
// defined on varStack resulting in compilation errors later
assertScript """
@Category(Test)
class TestCategory {
String getSuperName1() {
String myname = ""
return myname + "hi from category"
}
// 2nd test case of JIRA
String getSuperName2() {
String myname = this.getName()
for(int i = 0; i < 5; i++) myname += i
return myname + "-Post"
}
// 3rd test case of JIRA
String getSuperName3() {
String myname = this.getName()
for(i in 0..4) myname += i
return myname + "-Post"
}
}
interface Test {
String getName()
}
class MyTest implements Test {
String getName() {
return "Pre-"
}
}
def onetest = new MyTest()
use(TestCategory) {
assert onetest.getSuperName1() == "hi from category"
assert onetest.getSuperName2() == "Pre-01234-Post"
assert onetest.getSuperName3() == "Pre-01234-Post"
}
"""
}
void testPropertyNameExpandingToGetterInsideCategoryMethod() {
//GROOVY-3543: Inside the category method, this.getType().name was failing but this.getType().getName() was not.
assertScript """
@Category(Guy)
class Naming {
String getTypeName() {
if(this.getType() != null)
this.getType().name
else
""
}
}
interface Guy {
Type getType()
}
class Type {
String name
}
class MyGuyver implements Guy {
Type type
}
def atype = new Type(name: 'String')
def onetest = new MyGuyver(type:atype)
use(Naming) {
assert onetest.getTypeName() == onetest.getType().getName()
}
"""
}
void testClosureUsingThis() {
assertScript """
@Category(Guy)
class Filtering {
List process() {
this.messages.findAll{it.name != this.getName()}
}
}
interface Guy {
String getName()
List getMessages()
}
class MyGuyver implements Guy {
List messages
String name
}
def onetest = new MyGuyver(
name: 'coucou',
messages : [['name':'coucou'], ['name':'test'], ['name':'salut']])
Guy.mixin Filtering
assert onetest.process() == onetest.messages.findAll{it.name != onetest.getName()}
"""
}
void testClosureWithinDeclarationExpressionAndMultipleAssignment() {
// GROOVY-4546
assertScript """
@Category(Integer)
class MyOps {
def multiplesUpTo4() { [this * 2, this * 3, this * 4] }
def multiplesUpTo(num) {
(2..num).collect{ j -> this * j }
}
def alsoMultiplesUpTo(num) {
def ans = (2..num).collect{ i -> this * i }
ans
}
def twice() {
def (twice, thrice, quad) = multiplesUpTo4()
twice
}
}
use(MyOps) {
assert 5.multiplesUpTo4() == [10, 15, 20]
assert 5.multiplesUpTo(6) == [10, 15, 20, 25, 30]
assert 5.alsoMultiplesUpTo(6) == [10, 15, 20, 25, 30]
assert 5.twice() == 10
}
"""
}
}
Other Groovy examples (source code examples)Here is a short list of links related to this Groovy CategoryAnnotationTest.groovy source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.