|
Groovy example source code file (SpreadDotTest.groovy)
The Groovy SpreadDotTest.groovy source code/* * Copyright 2003-2008 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 /** * Test for the spread dot operator "*.". * * For an example, * list*.property * means * list.collect { it?.property } * * @author Pilho Kim * @author Paul King */ public class SpreadDotTest extends GroovyTestCase { void testSpreadDot() { def m1 = ["a":1, "b":2] def m2 = ["a":11, "b":22] def m3 = ["a":111, "b":222] def x = [m1,m2,m3] println x*.a println x*."a" assert x == [m1, m2, m3] def m4 = null x << m4 println x*.a println x*."a" assert x == [m1, m2, m3, null] def d = new SpreadDotDemo() x << d println x*."a" assert x == [m1, m2, m3, null, d] def y = new SpreadDotDemo2() println y."a" println y.a x << y println x*."a" assert x == [m1, m2, m3, null, d, y] } void testSpreadDot2() { def a = new SpreadDotDemo() def b = new SpreadDotDemo2() def x = [a, b] assert x*.fnB("1") == [a.fnB("1"), b.fnB("1")] assert [a,b]*.fnB() == [a.fnB(), b.fnB()] } void testSpreadDotArrays() { def a = new SpreadDotDemo() def b = new SpreadDotDemo2() Object[] x = [a, b] assert x*.fnB("1") == [a.fnB("1"), b.fnB("1")] assert [a,b]*.fnB() == [a.fnB(), b.fnB()] int[] nums = [3, 4, 5] assert nums*.toString() == ['3', '4', '5'] boolean[] answers = [true, false, true] assert answers*.toString() == ['true', 'false', 'true'] String[] pets = ['ant', 'bear', 'camel'] assert pets*.length() == nums } void testSpreadDotOnArrays2 () { def books = [Book1, Book2, Book3] as Object[] books*.metaClass*.foo = { "Hello, ${delegate.class.name}" } assertEquals "Hello, groovy.Book1", new Book1 ().foo () assertEquals "Hello, groovy.Book2", new Book2 ().foo () assertEquals "Hello, groovy.Book3", new Book3 ().foo () } void testSpreadDotAdvanced() { assertEquals ([3, 3], ['cat', 'dog']*.size()) assertEquals ([3, 3], (['cat', 'dog'] as Vector)*.size()) assertEquals ([3, 3], (['cat', 'dog'] as String[])*.size()) assertEquals ([3, 3], (['cat', 'dog'] as Vector).elements()*.size()) assertEquals ([1, 1, 1], 'zoo'*.size()) assertEquals (Object, new Object().getClass()) assertEquals ([Object], new Object()*.getClass()) assertEquals ('Large', new Shirt().size()) assertEquals (['Large'], new Shirt()*.size()) } void testSpreadDotMap () { def map = [A:"one", B:"two", C:"three"] assert map.collect { child -> child.value.size() } == [3, 3, 5] assert map*.value*.size() == [3, 3, 5] assert map*.getKey() == ['A', 'B', 'C'] } public void testSpreadDotAttribute() { def s = new Singlet() assert s.size == 1 assert s.@size == 12 def wardrobe = [s, s] assert wardrobe*.size == [1, 1] assert wardrobe*.@size == [12, 12] } } class SpreadDotDemo { public java.util.Date getA() { return new Date() } public String fnB() { return "bb" } public String fnB(String m) { return "BB$m" } } class SpreadDotDemo2 { public String getAttribute(String key) { return "Attribute $key" } public String get(String key) { return getAttribute("Get $key") } public String fnB() { return "cc" } public String fnB(String m) { return "CC$m" } } class Book1 {} class Book2 {} class Book3 {} class Shirt { def size() { 'Large' } } class Singlet { private size = 12 def getSize() {1} } Other Groovy examples (source code examples)Here is a short list of links related to this Groovy SpreadDotTest.groovy source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 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.