jname1test.java

来自「Groovy动态语言 运行在JVM中的动态语言 可以方便的处理业务逻辑变化大的业」· Java 代码 · 共 290 行

JAVA
290
字号
package gls.ch06.s05;


import groovy.lang.Closure;
import junit.framework.TestCase;

import gls.ch06.s05.testClasses.Tt1cgi;
import gls.ch06.s05.testClasses.Tt1cgo;
import gls.ch06.s05.testClasses.Tt1gi;
import gls.ch06.s05.testClasses.Tt1go;
/*
 * Copyright 2005 John G. Wilson
 *
 * 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.
 *
 */

/**
 * @author John Wilson
 *
 */

public class JName1Test extends TestCase {
  public void testObjectSupportNameHandling() {
    final Tt1go obj = new Tt1go();  // Test subclass of GroovyObjectSupport
    final String newX = "new x";
    final String newX1 = "new x1";
    final String newX2 = "new x2";
    final String newX3 = "new x3";
    
    assertTrue(obj.getProperty("x") == obj.getX());
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == obj.x);
    assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    
    obj.setProperty("x", newX);
    obj.getMetaClass().setAttribute(obj, "x", newX1);
    
    assertTrue(obj.getProperty("x") == newX);
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX1);
    
    obj.setX(newX2);
    obj.x = newX3;
    
    assertTrue(obj.getProperty("x") == newX2);
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX3);
  }

  public void testObjectSupportNameHandling1() {
    final Tt1go obj = new Tt1go() {}; // repeat test with subclass
    final String newX = "new x";
    final String newX1 = "new x1";
    final String newX2 = "new x2";
    final String newX3 = "new x3";
    
    assertTrue(obj.getProperty("x") == obj.getX());
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == obj.x);
    assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    
    obj.setProperty("x", newX);
    obj.getMetaClass().setAttribute(obj, "x", newX1);
    
    assertTrue(obj.getProperty("x") == newX);
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX1);
    
    obj.setX(newX2);
    obj.x = newX3;
    
    assertTrue(obj.getProperty("x") == newX2);
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX3);
  }
  
  public void testObjectSupportNameHandlingWitnClosureValues() {
    final Tt1cgo obj = new Tt1cgo();  // Test subclass of GroovyObjectSupport
    final Closure newX = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x";
      }
    };
    final Closure newX1 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x1";
      }
    };
    final Closure newX2 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x2";
      }
    };
    final Closure newX3 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x3";
      }
    };
    
    assertTrue(((Closure)obj.getProperty("x")).call() == obj.getX().call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == obj.x.call());
    assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    
    obj.setProperty("x", newX);
    obj.getMetaClass().setAttribute(obj, "x", newX1);
    
    assertTrue(((Closure)obj.getProperty("x")).call() == newX.call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX1.call());
    
    obj.setX(newX2);
    obj.x = newX3;
    
    assertTrue(((Closure)obj.getProperty("x")).call() == newX2.call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX3.call());
  }
  
  public void testObjectSupportNameHandlingWitnClosureValuesi() {
    final Tt1cgo obj = new Tt1cgo() {};  // repeat test with subclass
    final Closure newX = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x";
      }
    };
    final Closure newX1 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x1";
      }
    };
    final Closure newX2 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x2";
      }
    };
    final Closure newX3 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x3";
      }
    };
    
    assertTrue(((Closure)obj.getProperty("x")).call() == obj.getX().call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == obj.x.call());
    assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    
    obj.setProperty("x", newX);
    obj.getMetaClass().setAttribute(obj, "x", newX1);
    
    assertTrue(((Closure)obj.getProperty("x")).call() == newX.call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX1.call());
    
    obj.setX(newX2);
    obj.x = newX3;
    
    assertTrue(((Closure)obj.getProperty("x")).call() == newX2.call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX3.call());
  }

  public void testMetaClassNameHandling() {
    final Tt1gi obj = new Tt1gi();  // Test class implementing GroovyObject
    final String newX = "new x";
    final String newX1 = "new x1";
    final String newX2 = "new x2";
    final String newX3 = "new x3";
    
    assertTrue("dynamic property".equals(obj.getProperty("x")));
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == obj.x);
    assertTrue("dynamic method".equals(obj.invokeMethod("x", new Object[]{})));
    
    obj.setProperty("x", newX);
    obj.getMetaClass().setAttribute(obj, "x", newX1);
    
    assertTrue("dynamic property".equals(obj.getProperty("x")));
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX1);
    
    obj.setX(newX2);
    obj.x = newX3;
    
    assertTrue("dynamic property".equals(obj.getProperty("x")));
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX3);
  }

  public void testMetaClassNameHandling1() {
    final Tt1gi obj = new Tt1gi() {}; // repeat test with subclass
    final String newX = "new x";
    final String newX1 = "new x1";
    final String newX2 = "new x2";
    final String newX3 = "new x3";
    
    assertTrue("dynamic property".equals(obj.getProperty("x")));
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == obj.x);
    assertTrue("dynamic method".equals(obj.invokeMethod("x", new Object[]{})));
    
    obj.setProperty("x", newX);
    obj.getMetaClass().setAttribute(obj, "x", newX1);
    
    assertTrue("dynamic property".equals(obj.getProperty("x")));
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX1);
    
    obj.setX(newX2);
    obj.x = newX3;
    
    assertTrue("dynamic property".equals(obj.getProperty("x")));
    assertTrue(obj.getMetaClass().getAttribute(obj, "x") == newX3);
  }

  public void testMetaClassNameHandlingWithClosures() {
    final Tt1cgi obj = new Tt1cgi();  // Test class implementing GroovyObject
    final Closure newX = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x";
      }
    };
    final Closure newX1 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x1";
      }
    };
    final Closure newX2 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x2";
      }
    };
    final Closure newX3 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x3";
      }
    };
    
    assertTrue(((Closure)obj.getProperty("x")).call() == obj.getX().call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == obj.x.call());
    assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    
    obj.setProperty("x", newX);
    obj.getMetaClass().setAttribute(obj, "x", newX1);
    
    assertTrue(((Closure)obj.getProperty("x")).call() == newX.call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX1.call());
    
    obj.setX(newX2);
    obj.x = newX3;
    
    assertTrue(((Closure)obj.getProperty("x")).call() == newX2.call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX3.call());
  }

  public void testMetaClassNameHandlingWithClosures1() {
    final Tt1cgi obj = new Tt1cgi() {};  // repeat test with subclass
    final Closure newX = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x";
      }
    };
    final Closure newX1 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x1";
      }
    };
    final Closure newX2 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x2";
      }
    };
    final Closure newX3 = new Closure(null) {
      public Object doCall(final Object params) {
        return "new x3";
      }
    };
    
    assertTrue(((Closure)obj.getProperty("x")).call() == obj.getX().call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == obj.x.call());
    assertTrue(obj.invokeMethod("x", new Object[]{}) == obj.x());
    
    obj.setProperty("x", newX);
    obj.getMetaClass().setAttribute(obj, "x", newX1);
    
    assertTrue(((Closure)obj.getProperty("x")).call() == newX.call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX1.call());
    
    obj.setX(newX2);
    obj.x = newX3;
    
    assertTrue(((Closure)obj.getProperty("x")).call() == newX2.call());
    assertTrue(((Closure)obj.getMetaClass().getAttribute(obj, "x")).call() == newX3.call());
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?