    1   package gls.ch06.s05;
    2
    3
    4   import groovy.lang.Closure;
    5   import junit.framework.TestCase;
    6
    7   import gls.ch06.s05.testClasses.Tt1cgi;
    8   import gls.ch06.s05.testClasses.Tt1cgo;
    9   import gls.ch06.s05.testClasses.Tt1gi;
    10  import gls.ch06.s05.testClasses.Tt1go;
    11  /*
    12   * Copyright 2005 John G. Wilson
    13   *
    14   * Licensed under the Apache License, Version 2.0 (the "License");
    15   * you may not use this file except in compliance with the License.
    16   * You may obtain a copy of the License at
    17   *
    18   *     http://www.apache.org/licenses/LICENSE-2.0
    19   *
    20   * Unless required by applicable law or agreed to in writing, software
    21   * distributed under the License is distributed on an "AS IS" BASIS,
    22   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    23   * See the License for the specific language governing permissions and
    24   * limitations under the License.
    25   *
    26   */
    27
    28  /***
    29   * @author John Wilson
    30   *
    31   */
    32
    33  public class JName1Test extends TestCase {
    34    public void testObjectSupportNameHandling() {
    35      final Tt1go obj = new Tt1go();  // Test subclass of GroovyObjectSupport
    36      final String newX = "new x";
    37      final String newX1 = "new x1";
    38      final String newX2 = "new x2";
    39      final String newX3 = "new x3";
    40
    41      assertTrue(obj.getProperty("x") == obj.getX());
    42      assertTrue(obj.getMetaClass().getAttribute(obj, "x") == obj.x);
    43      assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    44
    45      obj.setProperty("x", newX);
    46      obj.getMetaClass().setAttribute(obj, "x", newX1);
    47
    48      assertTrue(obj.getProperty("x") == newX);
    49      assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX1);
    50
    51      obj.setX(newX2);
    52      obj.x = newX3;
    53
    54      assertTrue(obj.getProperty("x") == newX2);
    55      assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX3);
    56    }
    57
    58    public void testObjectSupportNameHandling1() {
    59      final Tt1go obj = new Tt1go() {}; // repeat test with subclass
    60      final String newX = "new x";
    61      final String newX1 = "new x1";
    62      final String newX2 = "new x2";
    63      final String newX3 = "new x3";
    64
    65      assertTrue(obj.getProperty("x") == obj.getX());
    66      assertTrue(obj.getMetaClass().getAttribute(obj, "x") == obj.x);
    67      assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    68
    69      obj.setProperty("x", newX);
    70      obj.getMetaClass().setAttribute(obj, "x", newX1);
    71
    72      assertTrue(obj.getProperty("x") == newX);
    73      assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX1);
    74
    75      obj.setX(newX2);
    76      obj.x = newX3;
    77
    78      assertTrue(obj.getProperty("x") == newX2);
    79      assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX3);
    80    }
    81
    82    public void testObjectSupportNameHandlingWitnClosureValues() {
    83      final Tt1cgo obj = new Tt1cgo();  // Test subclass of GroovyObjectSupport
    84      final Closure newX = new Closure(null) {
    85        public Object doCall(final Object params) {
    86          return "new x";
    87        }
    88      };
    89      final Closure newX1 = new Closure(null) {
    90        public Object doCall(final Object params) {
    91          return "new x1";
    92        }
    93      };
    94      final Closure newX2 = new Closure(null) {
    95        public Object doCall(final Object params) {
    96          return "new x2";
    97        }
    98      };
    99      final Closure newX3 = new Closure(null) {
    100       public Object doCall(final Object params) {
    101         return "new x3";
    102       }
    103     };
    104
    105     assertTrue(((Closure)obj.getProperty("x")).call() == obj.getX().call());
    106     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == obj.x.call());
    107     assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    108
    109     obj.setProperty("x", newX);
    110     obj.getMetaClass().setAttribute(obj, "x", newX1);
    111
    112     assertTrue(((Closure)obj.getProperty("x")).call() == newX.call());
    113     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX1.call());
    114
    115     obj.setX(newX2);
    116     obj.x = newX3;
    117
    118     assertTrue(((Closure)obj.getProperty("x")).call() == newX2.call());
    119     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX3.call());
    120   }
    121
    122   public void testObjectSupportNameHandlingWitnClosureValuesi() {
    123     final Tt1cgo obj = new Tt1cgo() {};  // repeat test with subclass
    124     final Closure newX = new Closure(null) {
    125       public Object doCall(final Object params) {
    126         return "new x";
    127       }
    128     };
    129     final Closure newX1 = new Closure(null) {
    130       public Object doCall(final Object params) {
    131         return "new x1";
    132       }
    133     };
    134     final Closure newX2 = new Closure(null) {
    135       public Object doCall(final Object params) {
    136         return "new x2";
    137       }
    138     };
    139     final Closure newX3 = new Closure(null) {
    140       public Object doCall(final Object params) {
    141         return "new x3";
    142       }
    143     };
    144
    145     assertTrue(((Closure)obj.getProperty("x")).call() == obj.getX().call());
    146     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == obj.x.call());
    147     assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    148
    149     obj.setProperty("x", newX);
    150     obj.getMetaClass().setAttribute(obj, "x", newX1);
    151
    152     assertTrue(((Closure)obj.getProperty("x")).call() == newX.call());
    153     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX1.call());
    154
    155     obj.setX(newX2);
    156     obj.x = newX3;
    157
    158     assertTrue(((Closure)obj.getProperty("x")).call() == newX2.call());
    159     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX3.call());
    160   }
    161
    162   public void testMetaClassNameHandling() {
    163     final Tt1gi obj = new Tt1gi();  // Test class implementing GroovyObject
    164     final String newX = "new x";
    165     final String newX1 = "new x1";
    166     final String newX2 = "new x2";
    167     final String newX3 = "new x3";
    168
    169     assertTrue("dynamic property".equals(obj.getProperty("x")));
    170     assertTrue(obj.getMetaClass().getAttribute(obj, "x") == obj.x);
    171     assertTrue("dynamic method".equals(obj.invokeMethod("x", new Object[]{})));
    172
    173     obj.setProperty("x", newX);
    174     obj.getMetaClass().setAttribute(obj, "x", newX1);
    175
    176     assertTrue("dynamic property".equals(obj.getProperty("x")));
    177     assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX1);
    178
    179     obj.setX(newX2);
    180     obj.x = newX3;
    181
    182     assertTrue("dynamic property".equals(obj.getProperty("x")));
    183     assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX3);
    184   }
    185
    186   public void testMetaClassNameHandling1() {
    187     final Tt1gi obj = new Tt1gi() {}; // repeat test with subclass
    188     final String newX = "new x";
    189     final String newX1 = "new x1";
    190     final String newX2 = "new x2";
    191     final String newX3 = "new x3";
    192
    193     assertTrue("dynamic property".equals(obj.getProperty("x")));
    194     assertTrue(obj.getMetaClass().getAttribute(obj, "x") == obj.x);
    195     assertTrue("dynamic method".equals(obj.invokeMethod("x", new Object[]{})));
    196
    197     obj.setProperty("x", newX);
    198     obj.getMetaClass().setAttribute(obj, "x", newX1);
    199
    200     assertTrue("dynamic property".equals(obj.getProperty("x")));
    201     assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX1);
    202
    203     obj.setX(newX2);
    204     obj.x = newX3;
    205
    206     assertTrue("dynamic property".equals(obj.getProperty("x")));
    207     assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX3);
    208   }
    209
    210   public void testMetaClassNameHandlingWithClosures() {
    211     final Tt1cgi obj = new Tt1cgi();  // Test class implementing GroovyObject
    212     final Closure newX = new Closure(null) {
    213       public Object doCall(final Object params) {
    214         return "new x";
    215       }
    216     };
    217     final Closure newX1 = new Closure(null) {
    218       public Object doCall(final Object params) {
    219         return "new x1";
    220       }
    221     };
    222     final Closure newX2 = new Closure(null) {
    223       public Object doCall(final Object params) {
    224         return "new x2";
    225       }
    226     };
    227     final Closure newX3 = new Closure(null) {
    228       public Object doCall(final Object params) {
    229         return "new x3";
    230       }
    231     };
    232
    233     assertTrue(((Closure)obj.getProperty("x")).call() == obj.getX().call());
    234     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == obj.x.call());
    235     assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    236
    237     obj.setProperty("x", newX);
    238     obj.getMetaClass().setAttribute(obj, "x", newX1);
    239
    240     assertTrue(((Closure)obj.getProperty("x")).call() == newX.call());
    241     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX1.call());
    242
    243     obj.setX(newX2);
    244     obj.x = newX3;
    245
    246     assertTrue(((Closure)obj.getProperty("x")).call() == newX2.call());
    247     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX3.call());
    248   }
    249
    250   public void testMetaClassNameHandlingWithClosures1() {
    251     final Tt1cgi obj = new Tt1cgi() {};  // repeat test with subclass
    252     final Closure newX = new Closure(null) {
    253       public Object doCall(final Object params) {
    254         return "new x";
    255       }
    256     };
    257     final Closure newX1 = new Closure(null) {
    258       public Object doCall(final Object params) {
    259         return "new x1";
    260       }
    261     };
    262     final Closure newX2 = new Closure(null) {
    263       public Object doCall(final Object params) {
    264         return "new x2";
    265       }
    266     };
    267     final Closure newX3 = new Closure(null) {
    268       public Object doCall(final Object params) {
    269         return "new x3";
    270       }
    271     };
    272
    273     assertTrue(((Closure)obj.getProperty("x")).call() == obj.getX().call());
    274     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == obj.x.call());
    275     assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    276
    277     obj.setProperty("x", newX);
    278     obj.getMetaClass().setAttribute(obj, "x", newX1);
    279
    280     assertTrue(((Closure)obj.getProperty("x")).call() == newX.call());
    281     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX1.call());
    282
    283     obj.setX(newX2);
    284     obj.x = newX3;
    285
    286     assertTrue(((Closure)obj.getProperty("x")).call() == newX2.call());
    287     assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX3.call());
    288   }
    289 }