| /* |
| * Copyright 2003-2007 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 { |
| public 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] |
| } |
| |
| public 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()] |
| } |
| |
| public 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 |
| } |
| } |
| |
| 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" |
| } |
| } |