From 20faec69c2a6957525aefe52a236580aed6b1a8c Mon Sep 17 00:00:00 2001 From: master Date: Thu, 24 Nov 2011 23:24:06 -0700 Subject: [PATCH 1/2] added spock and codenarc replaced blank and useless old tests with spock tests that exercise functionality added spock tests for previously untested bits of code recorded observations in tests for future refactoring directions --- .gitignore | 1 + CodeNarcReport.html | 158 ++++ grails-app/conf/BuildConfig.groovy | 11 + stacktrace.log | 692 ++++++++++++++++++ .../JQueryServiceIntegrationSpec.groovy | 19 + .../plugins/jquery/JQueryConfigSpec.groovy | 33 + .../JQueryProviderIntegrationSpec.groovy | 30 + test/unit/JQueryResourceTagLibSpec.groovy | 39 + test/unit/JQueryResourceTagLibTests.groovy | 15 - test/unit/JQueryServiceSpec.groovy | 33 + test/unit/JQueryServiceTests.groovy | 15 - test/unit/JQueryTagLibSpec.groovy | 62 ++ test/unit/JQueryTagLibTests.groovy | 15 - 13 files changed, 1078 insertions(+), 45 deletions(-) mode change 100755 => 100644 .gitignore create mode 100644 CodeNarcReport.html create mode 100644 stacktrace.log create mode 100644 test/integration/JQueryServiceIntegrationSpec.groovy create mode 100644 test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryConfigSpec.groovy create mode 100644 test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryProviderIntegrationSpec.groovy create mode 100755 test/unit/JQueryResourceTagLibSpec.groovy delete mode 100755 test/unit/JQueryResourceTagLibTests.groovy create mode 100755 test/unit/JQueryServiceSpec.groovy delete mode 100755 test/unit/JQueryServiceTests.groovy create mode 100755 test/unit/JQueryTagLibSpec.groovy delete mode 100755 test/unit/JQueryTagLibTests.groovy diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index 74bc612..6753e7f --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ out/* target/* .idea/* *.iml +/.settings/ \ No newline at end of file diff --git a/CodeNarcReport.html b/CodeNarcReport.html new file mode 100644 index 0000000..8807ad1 --- /dev/null +++ b/CodeNarcReport.html @@ -0,0 +1,158 @@ +CodeNarc Report

CodeNarc Report

Report title:
Date:Nov 24, 2011 10:07:27 PM
Generated with:CodeNarc v0.16.1

Summary by Package

PackageTotal FilesFiles with ViolationsPriority 1Priority 2Priority 3
All Packages92-131
grails-app/services11-13-
grails-app/taglib21--1
src/groovy/org/codehaus/groovy/grails/plugins/jquery2----
test/integration1----
test/unit3----

Package: grails-app.services

➥ JQueryService.groovy

Rule NamePriorityLine #Source Line / Message
GrailsStatelessService223

[SRC]String jsFolder

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'jsFolder'

GrailsStatelessService224

[SRC]String cssFolder

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'cssFolder'

GrailsStatelessService225

[SRC]String cssDefault

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'cssDefault'

GrailsStatelessService226

[SRC]String coreSuffix

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'coreSuffix'

GrailsStatelessService227

[SRC]String minFolder

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'minFolder'

GrailsStatelessService228

[SRC]String minExt

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'minExt'

GrailsStatelessService230

[SRC]def grailsApplication

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'grailsApplication'

GrailsStatelessService232

[SRC]def pathChecked = []

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'pathChecked'

GrailsStatelessService233

[SRC]def pathWhichDoNotExist = []

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'pathWhichDoNotExist'

GrailsStatelessService268

[SRC]def exist = { String dirPath, String filePath ->

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'exist'

GrailsStatelessService272

[SRC]def existPath = { String path ->

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'existPath'

GrailsStatelessService283

[SRC]def checkPath = {path ->

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'checkPath'

GrailsStatelessService290

[SRC]def cleanPath = { path ->

[MSG]Violation in class JQueryService. The class is marked as stateless but contains the non-final field 'cleanPath'

Package: grails-app.taglib

➥ JQueryResourceTagLib.groovy

Rule NamePriorityLine #Source Line / Message
UnusedImport319

[SRC]import org.codehaus.groovy.grails.commons.ConfigurationHolder

Rule Descriptions

#Rule NameDescription
1AssignmentInConditionalAn assignment operator (=) was used in a conditional test. This is usually a typo, and the comparison operator (==) was intended.
2BigDecimalInstantiationChecks for calls to the BigDecimal constructors that take a double parameter, which may result in an unexpected BigDecimal value.
3BitwiseOperatorInConditionalChecks for bitwise operations in conditionals, if you need to do a bitwise operation then it is best practive to extract a temp variable.
4BooleanGetBooleanThis rule catches usages of java.lang.Boolean.getBoolean(String) which reads a boolean from the System properties. It is often mistakenly used to attempt to read user input or parse a String into a boolean. It is a poor piece of API to use; replace it with System.properties['prop'].
5BrokenOddnessCheckThe code uses x % 2 == 1 to check to see if a value is odd, but this won't work for negative numbers (e.g., (-5) % 2 == -1). If this code is intending to check for oddness, consider using x & 1 == 1, or x % 2 != 0.
6CatchArrayIndexOutOfBoundsExceptionCheck the size of the array before accessing an array element rather than catching ArrayIndexOutOfBoundsException.
7CatchErrorCatching Error is dangerous; it can catch exceptions such as ThreadDeath and OutOfMemoryError.
8CatchExceptionCatching Exception is often too broad or general. It should usually be restricted to framework or infrastructure code, rather than application code.
9CatchIllegalMonitorStateExceptionDubious catching of IllegalMonitorStateException. IllegalMonitorStateException is generally only thrown in case of a design flaw in your code (calling wait or notify on an object you do not hold a lock on).
10CatchIndexOutOfBoundsExceptionCheck that an index is valid before accessing an indexed element rather than catching IndexOutOfBoundsException.
11CatchNullPointerExceptionCatching NullPointerException is never appropriate. It should be avoided in the first place with proper null checking, and it can mask underlying errors.
12CatchRuntimeExceptionCatching RuntimeException is often too broad or general. It should usually be restricted to framework or infrastructure code, rather than application code.
13CatchThrowableCatching Throwable is dangerous; it can catch exceptions such as ThreadDeath and OutOfMemoryError.
14ClassForNameUsing Class.forName(...) is a common way to add dynamic behavior to a system. However, using this method can cause resource leaks because the classes can be pinned in memory for long periods of time.
15ComparisonOfTwoConstantsChecks for expressions where a comparison operator or equals() or compareTo() is used to compare two constants to each other or two literals that contain only constant values., e.g.: 23 == 67, Boolean.FALSE != false, 0.17 <= 0.99, "abc" > "ddd", [a:1] <=> [a:2], [1,2].equals([3,4]) or [a:false, b:true].compareTo(['a':34.5, b:Boolean.TRUE].
16ComparisonWithSelfChecks for expressions where a comparison operator or equals() or compareTo() is used to compare a variable to itself, e.g.: x == x, x != x, x <=> x, x < x, x =>= x, x.equals(x) or x.compareTo(x), where x is a variable.
17ConfusingClassNamedExceptionThis class is not derived from another exception, but ends with 'Exception'. This will be confusing to users of this class.
18ConstantIfExpressionChecks for if statements with a constant value for the if expression, such as true, false, null, or a literal constant value.
19ConstantTernaryExpressionChecks for ternary expressions with a constant value for the boolean expression, such as true, false, null, or a literal constant value.
20DeadCodeDead code appears after a return statement or an exception is thrown. If code appears after one of these statements then it will never be executed and can be safely deleted.
21DoubleNegativeThere is no point in using a double negative, it is always positive. For instance !!x can always be simplified to x. And !(!x) can as well.
22DuplicateCaseStatementCheck for duplicate case statements in a switch block, such as two equal integers or strings.
23DuplicateImportDuplicate import statements are unnecessary.
24DuplicateMapKeyA map literal is created with duplicated key. The map entry will be overwritten.
25DuplicateSetValueA Set literal is created with duplicate constant value. A set cannot contain two elements with the same value.
26EmptyCatchBlockIn most cases, exceptions should not be caught and ignored (swallowed).
27EmptyElseBlockEmpty else blocks are confusing and serve no purpose.
28EmptyFinallyBlockEmpty finally blocks are confusing and serve no purpose.
29EmptyForStatementEmpty for statements are confusing and serve no purpose.
30EmptyIfStatementEmpty if statements are confusing and serve no purpose.
31EmptyInstanceInitializerAn empty class instance initializer was found. It is safe to remove it.
32EmptyMethodA method was found without an implementation. If the method is overriding or implementing a parent method, then mark it with the @Override annotation.
33EmptyStaticInitializerAn empty static initializer was found. It is safe to remove it.
34EmptySwitchStatementEmpty switch statements are confusing and serve no purpose.
35EmptySynchronizedStatementEmpty synchronized statements are confusing and serve no purpose.
36EmptyTryBlockEmpty try blocks are confusing and serve no purpose.
37EmptyWhileStatementEmpty while statements are confusing and serve no purpose.
38EqualsAndHashCodeIf either the boolean equals(Object) or the int hashCode() methods are overridden within a class, then both must be overridden.
39EqualsOverloadedThe class has an equals method, but the parameter of the method is not of type Object. It is not overriding equals but instead overloading it.
40ExceptionExtendsErrorErrors are system exceptions. Do not extend them.
41ExplicitGarbageCollectionCalls to System.gc(), Runtime.getRuntime().gc(), and System.runFinalization() are not advised. Code should have the same behavior whether the garbage collection is disabled using the option -Xdisableexplicitgc or not. Moreover, "modern" jvms do a very good job handling garbage collections. If memory usage issues unrelated to memory leaks develop within an application, it should be dealt with JVM options rather than within the code itself.
42ForLoopShouldBeWhileLoopA for loop without an init and update statement can be simplified to a while loop.
43GrailsDomainHasEqualsChecks that Grails domain classes redefine equals().
44GrailsDomainHasToStringChecks that Grails domain classes redefine toString()
45GrailsPublicControllerMethodChecks for public methods on Grails controller classes. Static methods are ignored.
46GrailsServletContextReferenceChecks for references to the servletContext object from within Grails controller and taglib classes.
47GrailsStatelessServiceChecks for fields on Grails service classes. Grails service classes are singletons, by default, and so they should be reentrant and typically stateless. The ignoreFieldNames property (dataSource,scope,sessionFactory,transactional,*Service) specifies one or more field names that should be ignored. The ignoreFieldTypes property (null) specifies one or more field type names that should be ignored. Both can optionally contain wildcard characters ('*' or '?').
48HardCodedWindowsFileSeparatorThis rule finds usages of a Windows file separator within the constructor call of a File object. It is better to use the Unix file separator or use the File.separator constant.
49HardCodedWindowsRootDirectoryThis rule find cases where a File object is constructed with a windows-based path. This is not portable, and using the File.listRoots() method is a better alternative.
50ImportFromSamePackageAn import of a class that is within the same package is unnecessary.
51ImportFromSunPackagesAvoid importing anything from the 'sun.*' packages. These packages are not portable and are likely to change.
52IntegerGetIntegerThis rule catches usages of java.lang.Integer.getInteger(String, ...) which reads an Integer from the System properties. It is often mistakenly used to attempt to read user input or parse a String into an Integer. It is a poor piece of API to use; replace it with System.properties['prop'].
53MisorderedStaticImportsStatic imports should never be declared after nonstatic imports.
54MissingNewInThrowStatementA common Groovy mistake when throwing exceptions is to forget the new keyword. For instance, "throw RuntimeException()" instead of "throw new RuntimeException()". If the error path is not unit tested then the production system will throw a Method Missing exception and hide the root cause. This rule finds constructs like "throw RuntimeException()" that look like a new keyword was meant to be used but forgotten.
55RandomDoubleCoercedToZeroThe Math.random() method returns a double result greater than or equal to 0.0 and less than 1.0. If you coerce this result into an Integer or int, then it is coerced to zero. Casting the result to int, or assigning it to an int field is probably a bug.
56RemoveAllOnSelfDon't use removeAll to clear a collection. If you want to remove all elements from a collection c, use c.clear, not c.removeAll(c). Calling c.removeAll(c) to clear a collection is less clear, susceptible to errors from typos, less efficient and for some collections, might throw a ConcurrentModificationException.
57ReturnFromFinallyBlockReturning from a finally block is confusing and can hide the original exception.
58ReturnNullFromCatchBlockReturning null from a catch block often masks errors and requires the client to handle error codes. In some coding styles this is discouraged.
59SwallowThreadDeathChecks for code that catches ThreadDeath without re-throwing it.
60ThrowErrorChecks for throwing an instance of java.lang.Error.
61ThrowExceptionChecks for throwing an instance of java.lang.Exception.
62ThrowExceptionFromFinallyBlockThrowing an exception from a finally block is confusing and can hide the original exception.
63ThrowNullPointerExceptionChecks for throwing an instance of java.lang.NullPointerException.
64ThrowRuntimeExceptionChecks for throwing an instance of java.lang.RuntimeException.
65ThrowThrowableChecks for throwing an instance of java.lang.Throwable.
66UnnecessaryGroovyImportA Groovy file does not need to include an import for classes from java.lang, java.util, java.io, java.net, groovy.lang and groovy.util, as well as the classes java.math.BigDecimal and java.math.BigInteger.
67UnusedArrayChecks for array allocations that are not assigned or used, unless it is the last statement within a block.
68UnusedImportImports for a class that is never referenced within the source file is unnecessary.
69UnusedMethodParameterThis rule finds instances of method parameters not being used. It does not analyze private methods (that is done by the UnusedPrivateMethodParameter rule) or methods marked @Override.
70UnusedObjectChecks for object allocations that are not assigned or used, unless it is the last statement within a block
71UnusedPrivateFieldChecks for private fields that are not referenced within the same class.
72UnusedPrivateMethodChecks for private methods that are not referenced within the same class.
73UnusedPrivateMethodParameterChecks for parameters to private methods that are not referenced within the method body.
74UnusedVariableChecks for variables that are never referenced.
\ No newline at end of file diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index 4daaf6a..e6b1390 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -11,4 +11,15 @@ grails.project.dependency.resolution = { } dependencies { } + plugins{ + test ":spock:0.5-groovy-1.7" + build ":codenarc:0.16.1" + } + + codenarc.reports = { + StockAnalysis('html') { + outputFile = 'CodeNarc-Report.html' + title = 'Stock installation CodeNarc Report' + } + } } diff --git a/stacktrace.log b/stacktrace.log new file mode 100644 index 0000000..5010a67 --- /dev/null +++ b/stacktrace.log @@ -0,0 +1,692 @@ +2011-11-24 19:23:36,133 [main] ERROR StackTrace - Sanitizing stacktrace: +groovy.lang.MissingPropertyException: No such property: toTest for class: JQueryServiceIntegrationSpec + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationTests.groovy:6) +2011-11-24 19:23:36,150 [main] ERROR StackTrace - Sanitizing stacktrace: +groovy.lang.MissingPropertyException: No such property: toTest for class: JQueryServiceIntegrationSpec + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationTests.groovy:6) +2011-11-24 19:23:36,171 [main] ERROR StackTrace - Sanitizing stacktrace: +groovy.lang.MissingPropertyException: No such property: toTest for class: JQueryServiceIntegrationSpec + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationTests.groovy:13) +2011-11-24 19:23:36,174 [main] ERROR StackTrace - Sanitizing stacktrace: +groovy.lang.MissingPropertyException: No such property: toTest for class: JQueryServiceIntegrationSpec + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationTests.groovy:13) +2011-11-24 19:25:04,966 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot get property 'mainContext' on null object + at JQueryService.invokeMethod(JQueryService.groovy) + at JQueryService.invokeMethod(JQueryService.groovy) + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 19:25:04,977 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot get property 'mainContext' on null object + at JQueryService.invokeMethod(JQueryService.groovy) + at JQueryService.invokeMethod(JQueryService.groovy) + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 19:25:04,996 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot get property 'mainContext' on null object + at JQueryService.invokeMethod(JQueryService.groovy) + at JQueryService.invokeMethod(JQueryService.groovy) + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 19:25:04,996 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot get property 'mainContext' on null object + at JQueryService.invokeMethod(JQueryService.groovy) + at JQueryService.invokeMethod(JQueryService.groovy) + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 19:26:06,618 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 19:26:06,629 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 19:26:06,646 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 19:26:06,647 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 19:27:22,912 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 19:27:22,920 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 19:27:22,933 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 19:27:22,933 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:05:53,625 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:05:53,628 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:05:53,637 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:05:53,638 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:06:57,523 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:06:57,525 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:06:57,533 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:06:57,533 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:34:49,077 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:34:49,088 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:34:49,106 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:34:49,106 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:38:26,085 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:38:26,097 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:38:26,113 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:38:26,113 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:39:11,457 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:39:11,465 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:39:11,477 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:39:11,478 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:42:00,766 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.ClassFormatError: Illegal method name "verify our current version is the latest release, 1.7.1" in class org/codehaus/groovy/grails/plugins/jquery/JQueryConfigSpec + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) + at java.lang.ClassLoader.defineClass(ClassLoader.java:615) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) + at java.net.URLClassLoader.access$000(URLClassLoader.java:58) + at java.net.URLClassLoader$1.run(URLClassLoader.java:197) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:190) + at java.lang.ClassLoader.loadClass(ClassLoader.java:306) + at java.lang.ClassLoader.loadClass(ClassLoader.java:247) + at java_lang_ClassLoader$loadClass.call(Unknown Source) + at org.codehaus.groovy.grails.test.support.GrailsTestTypeSupport.loadClass(GrailsTestTypeSupport.groovy:250) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:266) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) + at org.codehaus.groovy.grails.test.support.GrailsTestTypeSupport.sourceFileToClass(GrailsTestTypeSupport.groovy:232) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1003) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) + at grails.plugin.spock.test.GrailsSpecTestType$_doPrepare_closure1.doCall(GrailsSpecTestType.groovy:54) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:266) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:153) + at grails.plugin.spock.test.GrailsSpecTestType$_doPrepare_closure1.call(GrailsSpecTestType.groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:266) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:63) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128) + at org.codehaus.groovy.grails.test.support.GrailsTestTypeSupport$_eachSourceFile_closure3_closure8.doCall(GrailsTestTypeSupport.groovy:200) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:295) + at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1220) + at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1196) + at org.codehaus.groovy.runtime.dgm$110.invoke(Unknown Source) + at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:270) + at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124) + at org.codehaus.groovy.grails.test.support.GrailsTestTypeSupport$_eachSourceFile_closure3.doCall(GrailsTestTypeSupport.groovy:199) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:295) + at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1220) + at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1196) + at org.codehaus.groovy.runtime.dgm$110.invoke(Unknown Source) + at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:270) + at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124) + at org.codehaus.groovy.grails.test.support.GrailsTestTypeSupport.eachSourceFile(GrailsTestTypeSupport.groovy:198) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:266) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) + at grails.plugin.spock.test.GrailsSpecTestType.doPrepare(GrailsSpecTestType.groovy:53) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:266) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145) + at org.codehaus.groovy.grails.test.support.GrailsTestTypeSupport.prepare(GrailsTestTypeSupport.groovy:98) + at org.codehaus.groovy.grails.test.GrailsTestType$prepare.call(Unknown Source) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:132) + at _GrailsTest_groovy$_run_closure4.doCall(_GrailsTest_groovy:261) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:266) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:153) + at _GrailsTest_groovy$_run_closure4.call(_GrailsTest_groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1104) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1060) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:706) + at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:44) + at groovy.lang.Script.invokeMethod(Script.java:78) + at groovy.lang.MetaClassImpl.invokeMethodOnGroovyObject(MetaClassImpl.java:1123) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1017) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:153) + at _GrailsTest_groovy$_run_closure2.doCall(_GrailsTest_groovy:228) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:295) + at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1220) + at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1196) + at org.codehaus.groovy.runtime.dgm$110.invoke(Unknown Source) + at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:270) + at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124) + at _GrailsTest_groovy$_run_closure1_closure21.doCall(_GrailsTest_groovy:187) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at org.codehaus.groovy.runtime.DefaultGroovyMethods.callClosureForMapEntry(DefaultGroovyMethods.java:2456) + at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1249) + at org.codehaus.groovy.runtime.dgm$111.invoke(Unknown Source) + at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:270) + at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124) + at _GrailsTest_groovy$_run_closure1.doCall(_GrailsTest_groovy:174) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.DelegatingMetaClass.invokeMethod(DelegatingMetaClass.java:149) + at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:127) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:295) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.DelegatingMetaClass.invokeMethod(DelegatingMetaClass.java:149) + at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:127) + at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:54) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124) + at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:225) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) + at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:277) + at groovy.lang.Closure$call.call(Unknown Source) + at org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90) + at org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1003) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:706) + at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:44) + at groovy.lang.MetaClassImpl.invokeMethodOnGroovyObject(MetaClassImpl.java:1123) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1017) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:157) + at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:225) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) + at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:277) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1104) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1060) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:706) + at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:44) + at groovy.lang.Script.invokeMethod(Script.java:78) + at groovy.lang.MetaClassImpl.invokeMethodOnGroovyObject(MetaClassImpl.java:1123) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1017) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.DelegatingMetaClass.invokeMethod(DelegatingMetaClass.java:149) + at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:127) + at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145) + at TestApp$_run_closure1.doCall(TestApp.groovy:82) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.DelegatingMetaClass.invokeMethod(DelegatingMetaClass.java:149) + at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:127) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:295) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.DelegatingMetaClass.invokeMethod(DelegatingMetaClass.java:149) + at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:127) + at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:54) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124) + at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:225) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) + at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:277) + at groovy.lang.Closure$call.call(Unknown Source) + at org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90) + at org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1003) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:706) + at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:44) + at groovy.lang.MetaClassImpl.invokeMethodOnGroovyObject(MetaClassImpl.java:1123) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1017) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:157) + at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:225) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) + at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:277) + at groovy.lang.Closure$call.call(Unknown Source) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120) + at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:295) + at groovy.lang.Closure$call$0.call(Unknown Source) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124) + at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:225) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) + at gant.Gant$_dispatch_closure7.doCall(Gant.groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.Closure.call(Closure.java:282) + at groovy.lang.Closure.call(Closure.java:277) + at groovy.lang.Closure$call.call(Unknown Source) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120) + at gant.Gant.withBuildListeners(Gant.groovy:427) + at gant.Gant.this$2$withBuildListeners(Gant.groovy) + at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) + at gant.Gant.dispatch(Gant.groovy:415) + at gant.Gant.this$2$dispatch(Gant.groovy) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) + at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:708) + at gant.Gant.invokeMethod(Gant.groovy) + at groovy.lang.GroovyObject$invokeMethod.callCurrent(Unknown Source) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:153) + at gant.Gant.executeTargets(Gant.groovy:590) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:225) + at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:153) + at gant.Gant.executeTargets(Gant.groovy:589) + at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeWithGantInstance(GrailsScriptRunner.java:667) + at org.codehaus.groovy.grails.cli.GrailsScriptRunner.callPluginOrGrailsScript(GrailsScriptRunner.java:526) + at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeCommand(GrailsScriptRunner.java:310) + at org.codehaus.groovy.grails.cli.GrailsScriptRunner.main(GrailsScriptRunner.java:135) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.codehaus.groovy.grails.cli.support.GrailsStarter.rootLoader(GrailsStarter.java:234) + at org.codehaus.groovy.grails.cli.support.GrailsStarter.main(GrailsStarter.java:262) +2011-11-24 22:42:27,181 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:42:27,189 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:42:27,202 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:42:27,202 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:43:23,350 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:43:23,361 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:43:23,376 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:43:23,377 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:54:54,390 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:54:54,401 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 22:54:54,419 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 22:54:54,419 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 23:05:56,197 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 23:05:56,208 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 23:05:56,226 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 23:05:56,226 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 23:07:03,587 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 23:07:03,596 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 23:07:03,609 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 23:07:03,609 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 23:08:25,382 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 23:08:25,393 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 23:08:25,411 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 23:08:25,411 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 23:10:31,271 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 23:10:31,279 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that exist are successfully found(JQueryServiceIntegrationSpec.groovy:8) +2011-11-24 23:10:31,292 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) +2011-11-24 23:10:31,292 [main] ERROR StackTrace - Sanitizing stacktrace: +java.lang.NullPointerException: Cannot invoke method exist() on null object + at JQueryServiceIntegrationSpec.verify that paths that don't exist are successfully identified(JQueryServiceIntegrationSpec.groovy:15) diff --git a/test/integration/JQueryServiceIntegrationSpec.groovy b/test/integration/JQueryServiceIntegrationSpec.groovy new file mode 100644 index 0000000..7f5f8cd --- /dev/null +++ b/test/integration/JQueryServiceIntegrationSpec.groovy @@ -0,0 +1,19 @@ +import grails.plugin.spock.* + +class JQueryServiceIntegrationSpec extends IntegrationSpec { + JQueryService jQueryService + + def "verify that paths that exist are successfully found"(){ + when: "we try to see if a path exists" + def test = jQueryService.exist("grails-app", "domain") + then: "it is successfully found" + test == true + } + + def "verify that paths that don't exist are successfully identified"(){ + when: "we try to see if a path exists" + def test = jQueryService.exist("foo", "bar") + then: "it is not found" + test == false + } +} diff --git a/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryConfigSpec.groovy b/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryConfigSpec.groovy new file mode 100644 index 0000000..ed9af4c --- /dev/null +++ b/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryConfigSpec.groovy @@ -0,0 +1,33 @@ +package org.codehaus.groovy.grails.plugins.jquery; + +import grails.plugin.spock.* +import org.codehaus.groovy.grails.commons.ApplicationHolder + +class JQueryConfigSpec extends IntegrationSpec { + def "verify our current version is the latest release, 1 7 1"(){ + expect: "our current version is the latest release. Update this test when you update jQuery!" + new JQueryConfig().SHIPPED_VERSION == "1.7.1" + } + def "verify that we can initialize the config with default plugins"(){ + when: "we try to load a config file and build a JQueryConfig" + // doesn't work. Can't set metadata + ApplicationHolder.application.config.jquery.defaultPlugins = ["jqueryui", "cycle"] + def test = new JQueryConfig() + test.init() + then: "we should have the plugin info available" + test.defaultPlugins == ["jqueryui", "cycle"] + } + + def "verify that we can initialize the config with application metadata"(){ + // I have no idea how we can mock the ApplicationHolder the class will use + // or dynamically set the metadata (we could insert fake properties in a test, but + // it doesn't seem that metadata has setters as well as getters + when: "we try to load an application's metadata and build a JQueryConfig" + // doesn't work. Can't set metadata + ApplicationHolder.application.metadata +=["jquery.plugins.foo":"baz"] + def test = new JQueryConfig() + test.init() + then: "we should have the plugin info available" + test.plugins.foo == ["baz"] + } +} diff --git a/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryProviderIntegrationSpec.groovy b/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryProviderIntegrationSpec.groovy new file mode 100644 index 0000000..bc3d3ee --- /dev/null +++ b/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryProviderIntegrationSpec.groovy @@ -0,0 +1,30 @@ +package org.codehaus.groovy.grails.plugins.jquery; + +import grails.plugin.spock.* + +class JQueryProviderIntegrationSpec extends IntegrationSpec { + def "verify that ajax forms are prepared successfully for submit tags"(){ + given: "a set of attributes, including forSubmitTag" + def attrs = ["blah" :"boo", "forSubmitTag" : "true"] + when: "an ajax form is prepared" + def test = new JQueryProvider().prepareAjaxForm(attrs) + then: "the resultant jQuery should serialize the surrounding form" + test == "jQuery(this).parents('form:first').serialize()".toString() + attrs.params == "jQuery(this).parents('form:first').serialize()".toString() + } + + def "verify that ajax forms are prepared successfully"(){ + given: "a set of attributes" + def attrs = [blah :"boo"] + when: "an ajax form is prepared" + def test = new JQueryProvider().prepareAjaxForm(attrs) + then: "the resultant jQuery should serialize the form" + test == "jQuery(this).serialize()".toString() + attrs.params == "jQuery(this).serialize()".toString() + } + + // the buildCallback() helper method should probably be private + def "verify that remote function works in happy case"(){ + + } +} diff --git a/test/unit/JQueryResourceTagLibSpec.groovy b/test/unit/JQueryResourceTagLibSpec.groovy new file mode 100755 index 0000000..a3e5ec6 --- /dev/null +++ b/test/unit/JQueryResourceTagLibSpec.groovy @@ -0,0 +1,39 @@ +import grails.plugin.spock.* + +class JQueryResourceTagLibSpec extends TagLibSpec { + // this is apparently an undocumented feature on http://grails.org/plugin/jquery. Is it necessary? Removable? + def "verify that when the resources tag is called with local attribute, script comes from app"(){ + when: "I try to load resources" + def result = resources( local: 'true' ) + then: "jQuery is loaded from local app" + result == "" + } + + def "verify that when the resources tag is called without local attribute, script comes from plugin"(){ + when: "I try to load resources" + def result = resources() + then: "jQuery is loaded from the plugin" + result == "" + } + + def "verify that when the resources tag is called with a non boolean local attribute, script comes from plugin"(){ + when: "I try to load resources" + def result = resources( local: 'gaz' ) + then: "jQuery is loaded from the plugin" + result == "" + } + + // Is this really testable? should this be refactored? + def "verify that when the resources tag is called in the development environment, min version is not loaded"(){ + when: "I try to load resources in development environment" + def result = resources( local: 'gaz' ) + then: "jQuery is loaded from the plugin" + result == "" + } + + // RESOURCE is really ugly and difficult to test... + // effects in the comment appears to be unused. mode is undocumented in the plugin docs + // it seems to try to incorporate much functionality that the resources plugin does. + // does it make sense to just have this plugin depend on that and remove these tags? + // also, the addResource should probably be private, as it looks like it is meant to be a utility method +} diff --git a/test/unit/JQueryResourceTagLibTests.groovy b/test/unit/JQueryResourceTagLibTests.groovy deleted file mode 100755 index aa433e6..0000000 --- a/test/unit/JQueryResourceTagLibTests.groovy +++ /dev/null @@ -1,15 +0,0 @@ -import grails.test.* - -class JQueryResourceTagLibTests extends TagLibUnitTestCase { - protected void setUp() { - super.setUp() - } - - protected void tearDown() { - super.tearDown() - } - - void testSomething() { - - } -} diff --git a/test/unit/JQueryServiceSpec.groovy b/test/unit/JQueryServiceSpec.groovy new file mode 100755 index 0000000..7e7864b --- /dev/null +++ b/test/unit/JQueryServiceSpec.groovy @@ -0,0 +1,33 @@ +import grails.plugin.spock.* + +class JQueryServiceSpec extends UnitSpec { + // I think this is a _stateful_ service whose sole purpose in life is to provide + // properties to JQueryResource... :/ + // it looks like exist() and cleanPath() are the only publicly accessible methods + // cleanPath() appears to mean appending a trailing slash if necessary. In which case, it should be renamed + // (used in jQueryResource resource()), the other helper methods should probably be private + // seems like there's lots of duplication of implementation here too + + JQueryService toTest = new JQueryService() + + def "verify that paths are correctly 'cleaned' by adding a trailing slash"(){ + when: "we try to clean a path without a trailing slash" + def test = toTest.cleanPath("foo") + then: "the result contains a trailing slash" + test == "foo/" + } + + def "verify that paths while already contain a trailing slash are unmodified"(){ + when: "we try to clean a path containing a trailing slash" + def test = toTest.cleanPath("foo/") + then: "the result does not have another slash added to it" + test == "foo/" + } + + def "verify that empty strings as paths are unmodified"(){ + when: "we try to clean a path that's the empty string" + def test = toTest.cleanPath("") + then: "the result is the empty string" + test == "" + } +} diff --git a/test/unit/JQueryServiceTests.groovy b/test/unit/JQueryServiceTests.groovy deleted file mode 100755 index 967694c..0000000 --- a/test/unit/JQueryServiceTests.groovy +++ /dev/null @@ -1,15 +0,0 @@ -import grails.test.* - -class JQueryServiceTests extends GrailsUnitTestCase { - protected void setUp() { - super.setUp() - } - - protected void tearDown() { - super.tearDown() - } - - void testSomething() { - - } -} diff --git a/test/unit/JQueryTagLibSpec.groovy b/test/unit/JQueryTagLibSpec.groovy new file mode 100755 index 0000000..7712710 --- /dev/null +++ b/test/unit/JQueryTagLibSpec.groovy @@ -0,0 +1,62 @@ +import grails.plugin.spock.* + +class JQueryTagLibSpec extends TagLibSpec { + def "verify that using the jQuery tag adds to the jQuery ready function"(){ + when: "a piece of Javascript to be executed on ready is passed to jQuery" + def test = jquery(attrs: []) { "alert('Hello world');" } + then: "the code is wrapped in jQuery" + test == '' + } + + def "verify that we can toggle an item using defaults"(){ + when: "we pass toggle, giving the html id of the element, and the element to be toggled" + def test = toggle(sourceId:"foo", targetId:"bar") + then: "we get jQuery output that toggles the element" + test == /jQuery("#foo").click(function(){jQuery("#bar").toggle("normal"); return false; });/ + } + + // if toggleelement is deprecated, it should be removed. + // until then, since it appears to do the same thing with a different API, + // it should redirect to toggle internally with the correct parameters rather than duplicating implementation + + def "verify that we can toggle an item with a custom event"(){ + when: "we pass toggle, giving the html id of the element, the element to be toggled, and an event" + def test = toggle(sourceId:"foo", targetId:"bar", event:"hover") + then: "we get jQuery output that toggles the element on the event" + test == /jQuery("#foo").hover(function(){jQuery("#bar").toggle("normal"); return false; });/ + } + + def "verify that we can toggle an item with custom speed"(){ + when: "we pass toggle, giving the html id of the element, the element to be toggled, and custom speed" + def test = toggle(sourceId:"foo", targetId:"bar", speed:"fast") + then: "we get jQuery output that toggles the element at the custom speed" + test == /jQuery("#foo").click(function(){jQuery("#bar").toggle("fast"); return false; });/ + } + + def "verify that we can toggle an item with custom speed and custom event"(){ + when: "we pass toggle, giving the html id of the element, the element to be toggled, a custom event, and custom speed" + def test = toggle(sourceId:"foo", targetId:"bar", event:"hover", speed:"fast") + then: "we get jQuery output that toggles the element on the custom event at the custom speed" + test == /jQuery("#foo").hover(function(){jQuery("#bar").toggle("fast"); return false; });/ + } + + def "verify that we can get the field value for an attribute selector"(){ + when: "we try to select for an attribute" + def test = fieldValue(selector:'input[name*="man"]') + then: "we get jQuery output that gets the field Value" + test == /jQuery('input[name*="man"]').fieldValue()[0]/ + } + + def "verify that we can get the field value for an element id"(){ + when: "we try to select for an element" + def test = fieldValue(elementId:'foo') + then: "we get jQuery output that gets the field Value" + test == /jQuery('#foo').fieldValue()[0]/ + } + + // note that the body of the closure implies that if _both_ the attribute selector + // and an element id are specified, the closure chooses the selector silently and + // ignores the elementId. While such usage may seem stupid, it may be worth refactoring + // to alert the developer that it should be one OR the other, NOT both + // since this is just wrapping a jQuery call in javascript, I'm not sure how much value this adds +} diff --git a/test/unit/JQueryTagLibTests.groovy b/test/unit/JQueryTagLibTests.groovy deleted file mode 100755 index caca054..0000000 --- a/test/unit/JQueryTagLibTests.groovy +++ /dev/null @@ -1,15 +0,0 @@ -import grails.test.* - -class JQueryTagLibTests extends TagLibUnitTestCase { - protected void setUp() { - super.setUp() - } - - protected void tearDown() { - super.tearDown() - } - - void testSomething() { - - } -} From b196816a78a317109264c9b77cc6457a8499adf3 Mon Sep 17 00:00:00 2001 From: Nick Vaidyanathan Date: Sat, 26 Nov 2011 18:22:37 -0700 Subject: [PATCH 2/2] added more tests --- .../jquery/JQueryProviderIntegrationSpec.groovy | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryProviderIntegrationSpec.groovy b/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryProviderIntegrationSpec.groovy index bc3d3ee..d61f531 100644 --- a/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryProviderIntegrationSpec.groovy +++ b/test/integration/org/codehaus/groovy/grails/plugins/jquery/JQueryProviderIntegrationSpec.groovy @@ -24,7 +24,13 @@ class JQueryProviderIntegrationSpec extends IntegrationSpec { } // the buildCallback() helper method should probably be private - def "verify that remote function works in happy case"(){ - + // I have no idea what taglib to pass, as line 186 of + // groovy/org/codehaus/groovy/grails/plugins/web/taglib/JavascriptTagLib.groovy + // references an "owner" that is apparently referenced nowhere else in the document + def "verify that remote function works in happy case -- INCOMPLETE"(){ + when: "we try to execute a remote function" + def test = new JQueryProvider().doRemoteFunction() + then: "the resultant jQuery should look like standard AJAX" + test == "" } }