/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you 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 org.codehaus.groovy.ast

import groovy.test.GroovyTestCase
import org.codehaus.groovy.ast.*

class LazyInitOnClassNodeTest extends GroovyTestCase {
    void testLazyInit() {
        def script = """
          class ClassNodeMethodsListGrowth {
            // Setting the type to ArrayList triggers a growth in methodsList
            ArrayList array1=new ArrayList()

            // ... using dynamic typing does not
            // def array2=new ArrayList()

            // Test method as a sanity check
            def get(o) { return "ok" }
          }
        """
        def listType = ClassHelper.make(List.class)
        def last=0
        5.times {
          def loader = new GroovyClassLoader(this.class.classLoader)
          assert loader.parseClass(script).newInstance().get("default")=="ok"
          def size = listType.redirect().getMethods().size()
          if (last!=0) assert last==size
          if (last==0) last = size
        }
    }
}
