Initial set of tests for GroovyCompletionEngineSimple (along with some fixes)
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 23 May 2014 12:58:31 +0100
changeset 234 97857872ee47
parent 233 fb33bd6466a4
child 235 d64b82134e97
Initial set of tests for GroovyCompletionEngineSimple (along with some fixes)
Make.proto
SmallSense__AbstractJavaCompletionEngine.st
SmallSense__AbstractJavaCompletionEngineSimple.st
SmallSense__AbstractJavaCompletionEngineTests.st
SmallSense__BaseTestClass.st
SmallSense__CompletionEngine.st
SmallSense__CompletionEngineTests.st
SmallSense__EditSupport.st
SmallSense__FinderTests.st
SmallSense__GroovyCompletionEngineSimple.st
SmallSense__GroovyCompletionEngineSimpleTests.st
SmallSense__JavaCompletionEngineEnvironmentResource.st
SmallSense__MethodPO.st
SmallSense__RecognizerTests.st
SmallSense__SmalltalkCompletionEngine.st
SmallSense__SmalltalkEditSupport.st
SmallSense__SmalltalkParserTests.st
SmallSense__SnippetPO.st
SmallSense__TestCase.st
abbrev.stc
bc.mak
jv_smallsense.st
smallsense.rc
--- a/Make.proto	Thu May 22 16:15:30 2014 +0100
+++ b/Make.proto	Fri May 23 12:58:31 2014 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint -I$(INCLUDE_TOP)/stx/goodies/regex -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp -I$(INCLUDE_TOP)/stx/libhtml -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint -I$(INCLUDE_TOP)/stx/goodies/regex -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp -I$(INCLUDE_TOP)/stx/libhtml -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
 
 
 # if you need any additional defines for embedded C code,
@@ -138,6 +138,7 @@
 	cd $(TOP)/libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/goodies/refactoryBrowser/browser && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd $(TOP)/goodies/sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/libwidg && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/goodies/refactoryBrowser/lint && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/libhtml && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
--- a/SmallSense__AbstractJavaCompletionEngine.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__AbstractJavaCompletionEngine.st	Fri May 23 12:58:31 2014 +0100
@@ -73,6 +73,9 @@
 addFieldsForType: type
     | seen |
 
+    type isUnknownType ifTrue:[ 
+        ^ self.
+    ].
     seen := Set new.
     type classesDo:[:initialCls |
         (seen includes: initialCls) ifFalse:[
@@ -89,6 +92,7 @@
     ].
 
     "Created: / 17-05-2014 / 20:37:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-05-2014 / 17:36:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 addImportsStartingWith: prefix
--- a/SmallSense__AbstractJavaCompletionEngineSimple.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__AbstractJavaCompletionEngineSimple.st	Fri May 23 12:58:31 2014 +0100
@@ -66,8 +66,7 @@
 patternDefinitionsForAnalysis
     ^ { 
         #analyzeImport:                 . '[[:import:]] [[:Identifier:]] ( \. ([[:Identifier:]] | \*) )* ;' .
-        #analyzeLocalDef:              . '( ', PatternPrimitiveType , ' | ' , PatternReferenceType , ') [[:Identifier:]] ( = | ; )' .
-
+        #analyzeLocalDecl:              .  '( ', PatternPrimitiveType , ' | ' , PatternReferenceType , ') [[:Identifier:]] ( = | ; )' .
     }
 
     "
@@ -75,7 +74,7 @@
     "
 
     "Created: / 19-05-2014 / 11:56:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 19-05-2014 / 16:32:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-05-2014 / 10:23:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 patternDefinitionsForCompletion
@@ -167,7 +166,7 @@
     "Created: / 19-05-2014 / 13:43:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-analyzeLocalDef: match
+analyzeLocalDecl: match
     | typename name |
 
     self assert: match size >= 3.
@@ -177,7 +176,7 @@
 
     locals at: name put: typename.
 
-    "Created: / 19-05-2014 / 16:37:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 23-05-2014 / 10:23:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !AbstractJavaCompletionEngineSimple methodsFor:'completion-individual'!
@@ -476,9 +475,12 @@
 !
 
 guessTypeOfThis
-    ^ Type withClass: class.
+    ^ class isNil 
+        ifTrue:[ Type unknown ]
+        ifFalse: [ Type withClass: class ]
 
     "Created: / 17-05-2014 / 10:52:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-05-2014 / 17:34:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !AbstractJavaCompletionEngineSimple class methodsFor:'documentation'!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__AbstractJavaCompletionEngineTests.st	Fri May 23 12:58:31 2014 +0100
@@ -0,0 +1,29 @@
+"{ Package: 'jv:smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+CompletionEngineTests subclass:#AbstractJavaCompletionEngineTests
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Tests'
+!
+
+!AbstractJavaCompletionEngineTests class methodsFor:'accessing'!
+
+resources
+    ^ Array with: JavaCompletionEngineEnvironmentResource
+
+    "Created: / 22-05-2014 / 17:18:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractJavaCompletionEngineTests class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == AbstractJavaCompletionEngineTests.
+! !
+
--- a/SmallSense__BaseTestClass.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__BaseTestClass.st	Fri May 23 12:58:31 2014 +0100
@@ -6,7 +6,7 @@
 	instanceVariableNames:'u v'
 	classVariableNames:''
 	poolDictionaries:''
-	category:'SmallSense-Tests'
+	category:'SmallSense-Tests-Obsolete'
 !
 
 
--- a/SmallSense__CompletionEngine.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__CompletionEngine.st	Fri May 23 12:58:31 2014 +0100
@@ -75,19 +75,6 @@
     ^ self complete.
 
     "Created: / 21-01-2014 / 23:07:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-completeFor: aCodeView2OrTextEditView
-    "Compute completion for given codeView, taking all the information
-     from it. Returns a CompletionResult with computed completions"
-
-    codeView := aCodeView2OrTextEditView.
-    result := CompletionResult new.
-
-    ^ self complete.
-
-    "Created: / 02-10-2013 / 13:24:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 03-10-2013 / 16:42:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CompletionEngine methodsFor:'completion-individual'!
@@ -145,12 +132,13 @@
     ].
 
 
-    selectors keysAndValuesDo: [:selector :classes|
+    selectors keysAndValuesDo: [:selector :classes |
         result add:(PO forClasses: classes selector: selector prefix: stripoffPrefix)
-    ]
+    ].
+    ^ self
 
     "Created: / 08-04-2014 / 21:34:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 20-05-2014 / 10:45:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-05-2014 / 11:54:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CompletionEngine methodsFor:'completion-private'!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__CompletionEngineTests.st	Fri May 23 12:58:31 2014 +0100
@@ -0,0 +1,87 @@
+"{ Encoding: utf8 }"
+
+"{ Package: 'jv:smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+Smalltalk::TestCase subclass:#CompletionEngineTests
+	instanceVariableNames:'engine context result'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Tests'
+!
+
+!CompletionEngineTests class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == SmallSense::CompletionEngineTests.
+! !
+
+!CompletionEngineTests methodsFor:'accessing'!
+
+environment
+   ^ Smalltalk
+
+    "Created: / 22-05-2014 / 16:50:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CompletionEngineTests methodsFor:'accessing-classes'!
+
+completionEngineClass
+    ^ self subclassResponsibility
+
+    "Created: / 22-05-2014 / 16:38:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CompletionEngineTests methodsFor:'running'!
+
+setUp
+    | service support codeView |
+    engine := self completionEngineClass new.
+
+    codeView := Tools::CodeView2 new.
+    service := EditService new.
+    service registerIn: codeView.  
+    support := GenericEditSupport new.
+    service updateSupport: support.  
+    context := CompletionContext new.
+    context support: support.
+    context environment: self environment.
+
+    "Created: / 22-05-2014 / 16:50:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+tearDown
+    engine := context := nil
+
+    "Created: / 22-05-2014 / 16:51:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CompletionEngineTests methodsFor:'utilities'!
+
+complete: aString
+     | list textView |
+
+    list := aString asStringCollection.
+    textView := context codeView textView.
+    textView list: list.
+    1 to: list size do:[:i |  
+        | line cursorCol |
+
+        line := list at: i.
+        cursorCol := line indexOf: '┃' first.
+        cursorCol ~~ 0 ifTrue:[ 
+            line := (line copyTo: cursorCol - 1) , (line copyFrom: cursorCol + 1).
+            list at: i put: line.
+            textView setCursorLine: i; setCursorCol: cursorCol.
+        ].
+    ].
+    ^ result := engine complete: context
+
+    "Created: / 22-05-2014 / 16:56:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/SmallSense__EditSupport.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__EditSupport.st	Fri May 23 12:58:31 2014 +0100
@@ -371,34 +371,6 @@
     "Modified: / 01-04-2014 / 18:00:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!EditSupport methodsFor:'private-completion'!
-
-computeCompletion
-    | completionEngineClass view result |
-
-    completionEngineClass := self completionEngineClass.
-    completionEngineClass isNil ifTrue: [ ^ nil ].
-
-    view := codeView.
-    UserInformation 
-        handle: [:ex | 
-            view showInfo: (ex messageText).
-            ex proceed.
-        ]
-        do: [
-            | context |
-
-            context := CompletionContext new.
-            context environment: self environment.
-            context support: self.
-            result := completionEngineClass new complete: context
-        ].
-    ^ result.
-
-    "Created: / 27-09-2013 / 13:21:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 18-05-2014 / 11:46:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
 !EditSupport methodsFor:'private-scanning'!
 
 scanLineAt: lineNumber 
--- a/SmallSense__FinderTests.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__FinderTests.st	Fri May 23 12:58:31 2014 +0100
@@ -6,7 +6,7 @@
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
-	category:'SmallSense-Tests'
+	category:'SmallSense-Tests-Obsolete'
 !
 
 
--- a/SmallSense__GroovyCompletionEngineSimple.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__GroovyCompletionEngineSimple.st	Fri May 23 12:58:31 2014 +0100
@@ -12,6 +12,18 @@
 
 !GroovyCompletionEngineSimple class methodsFor:'accessing-definitions'!
 
+patternDefinitionsForAnalysis
+    ^ super patternDefinitionsForAnalysis , { 
+        #analyzeLocalDef1:              .  '[[:def:]] [[:Identifier:]] ( = | ; )' .
+    }
+
+    "
+    self flush; patternsForAnalysis
+    "
+
+    "Created: / 23-05-2014 / 10:24:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 patternDefinitionsForCompletion
     
     ^super patternDefinitionsForCompletion , { 
@@ -36,6 +48,23 @@
     "Created: / 13-05-2014 / 17:46:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!GroovyCompletionEngineSimple methodsFor:'analysis'!
+
+analyzeLocalDef1: match
+    "Analyze:
+
+    def <identifier> ;
+
+    "
+    | name |
+
+    self assert: match size = 3.
+    name := (match at: match size - 1) value.
+    locals at: name put: nil.
+
+    "Created: / 23-05-2014 / 10:26:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GroovyCompletionEngineSimple class methodsFor:'documentation'!
 
 version_HG
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__GroovyCompletionEngineSimpleTests.st	Fri May 23 12:58:31 2014 +0100
@@ -0,0 +1,401 @@
+"{ Encoding: utf8 }"
+
+"{ Package: 'jv:smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+AbstractJavaCompletionEngineTests subclass:#GroovyCompletionEngineSimpleTests
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Tests'
+!
+
+!GroovyCompletionEngineSimpleTests methodsFor:'accessing-classes'!
+
+completionEngineClass
+    ^ GroovyCompletionEngineSimple
+
+    "Created: / 22-05-2014 / 16:39:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GroovyCompletionEngineSimpleTests methodsFor:'tests - analysis'!
+
+test_analyze_01a
+
+    self complete:'import java.util.Array;┃'.
+
+    self assert: (engine instVarNamed: #imports) size == 1.
+    self assert: (engine instVarNamed: #imports) first = 'java.util.Array'
+
+    "Created: / 22-05-2014 / 17:08:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_01b
+
+    self complete:'import java.util.*;┃'.
+
+    self assert: (engine instVarNamed: #imports) size == 1.
+    self assert: (engine instVarNamed: #imports) first = 'java.util.*'
+
+    "Created: / 22-05-2014 / 17:08:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_01c
+
+    self complete:'import java.util.*;
+                   import java.lang.reflect.Field;┃'.
+
+    self assert: (engine instVarNamed: #imports) size == 2.
+    self assert: (engine instVarNamed: #imports) first = 'java.util.*'.
+    self assert: (engine instVarNamed: #imports) second = 'java.lang.reflect.Field'.
+
+    "Created: / 22-05-2014 / 17:09:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_boolean
+
+    self complete:'boolean  var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'boolean' .
+
+    "Created: / 23-05-2014 / 09:24:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_byte
+
+    self complete:'byte var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'byte' .
+
+    "Created: / 23-05-2014 / 09:23:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_char
+
+    self complete:'char  var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'char' .
+
+    "Created: / 23-05-2014 / 09:24:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_def
+
+    self complete:'def var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') isNil .
+
+    "Created: / 23-05-2014 / 09:26:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_double
+
+    self complete:'double  var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'double' .
+
+    "Created: / 23-05-2014 / 09:24:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_float
+
+    self complete:'float  var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'float' .
+
+    "Created: / 23-05-2014 / 09:24:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_int_1
+
+    self complete:'int var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'int' .
+
+    "Created: / 23-05-2014 / 09:19:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_int_2
+
+    self complete:'int var = 10; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'int' .
+
+    "Created: / 23-05-2014 / 09:22:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_long
+
+    self complete:'long var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'long' .
+
+    "Created: / 23-05-2014 / 09:23:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_ref_full
+
+    self complete:'java.util.ArrayList var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'java.util.ArrayList' .
+
+    "Created: / 23-05-2014 / 09:27:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_ref_short
+
+    self complete:'ArrayList var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'ArrayList' .
+
+    "Created: / 23-05-2014 / 09:26:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_02_short
+
+    self complete:'short var; ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 1.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var') .
+    self assert: ((engine instVarNamed: #locals) at: 'var') = 'short' .
+
+    "Created: / 23-05-2014 / 09:23:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_analyze_03a
+
+    self complete:' int var1; 
+                    def var2 = var1 + ┃'.
+
+    self assert: (engine instVarNamed: #locals) size == 2.
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var1') .
+    self assert: ((engine instVarNamed: #locals) at: 'var1') = 'int' .
+
+    self assert: ((engine instVarNamed: #locals) includesKey: 'var2') .
+    self assert: ((engine instVarNamed: #locals) at: 'var2') = nil .
+
+    "Created: / 23-05-2014 / 10:32:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GroovyCompletionEngineSimpleTests methodsFor:'tests - completion'!
+
+test_complete_01a
+
+    self complete:'import java.uti┃'.
+
+    self assert: result notEmpty.
+    self assert: (result allSatisfy:[:each | each class == JavaImportPO ]).
+    self assert: (result contains:[:each | each import = 'java.util.*' ]).
+    self assert: (result contains:[:each | each import = 'java.util.zip.*' ]).
+    self assert: (result contains:[:each | each import = 'java.util.ArrayList' ]).
+
+    "Created: / 22-05-2014 / 17:28:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_02a
+
+    self complete:'im┃'.
+
+    self assert: result notEmpty.
+    self assert: (result contains:[:each | each isSmallSenseSnippetPO and:[each value = 'import '] ]).
+
+    "Created: / 22-05-2014 / 17:33:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_03a
+    "
+    Test variable completion"
+
+    self complete:'int  ival = 10;
+                   List ilist = new ArrayList();
+                   il┃'.
+
+    self assert: result size >= 2.
+    self assert: (result contains:[:each | each isSmallSenseVariablePO and:[each name = 'ilist']]).
+    self assert: (result contains:[:each | each isSmallSenseVariablePO and:[each name = 'ival']]) .
+
+    "Created: / 23-05-2014 / 10:30:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_03b
+    "
+    Test variable completion"
+
+    self complete:'int  ival = 10;
+                   List ilist = new ArrayList();
+                   i┃'.
+
+    self assert: result size >= 2.
+    self assert: (result contains:[:each | each isSmallSenseVariablePO and:[each name = 'ilist'] ]).
+    self assert: (result contains:[:each | each isSmallSenseVariablePO and:[each name = 'ival'] ]).
+
+    "Created: / 23-05-2014 / 10:36:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_03c
+    "
+    Test variable completion"
+
+    self complete:'int  ival = 10;
+                   List ilist = new ArrayList();
+                   ilist.add( i┃ )'.
+
+    self assert: result size >= 2.
+    self assert: (result contains:[:each | each isSmallSenseVariablePO and:[each name = 'ilist'] ]).
+    self assert: (result contains:[:each | each isSmallSenseVariablePO and:[each name = 'ival'] ]).
+
+    "Created: / 23-05-2014 / 10:38:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_03d
+    "
+    Test pseudo-variable completion"
+
+    self complete:'th┃'.
+
+    self assert: result size >= 1.
+    self assert: (result contains:[:each | each isSmallSenseSnippetPO and:[each value = 'this '] ]).
+
+    "Created: / 23-05-2014 / 10:39:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_04a
+    "
+    Test class completion
+    "
+
+    | java_lang_ArrayList ctors pos |
+
+    self complete:'def list = new Arr┃'.
+
+    java_lang_ArrayList := context environment == Smalltalk 
+                            ifTrue:[ context environment classNamed: #'JAVA::java::util::ArrayList'  ]
+                            ifFalse:[ context environment classNamed: #'java/util/ArrayList'].
+    ctors := java_lang_ArrayList methodDictionary values select:[:e | e selector startsWith: '<init>' ].
+    pos := result select:[:each | each class == JavaConstructorPO and:[ each classes anElement == java_lang_ArrayList ] ].
+
+    self assert: result size >= ctors size.
+    ctors do:[:ctor |  
+        self assert: (pos contains:[:po | po selector == ctor selector ]).
+    ].
+
+    "Created: / 23-05-2014 / 11:12:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_04b
+    "
+    Test class completion
+    "
+
+    | java_lang_ArrayList ctors pos |
+
+    self complete:'def list = new java.util.Arr┃'.
+
+    java_lang_ArrayList := context environment == Smalltalk 
+                            ifTrue:[ context environment classNamed: #'JAVA::java::util::ArrayList'  ]
+                            ifFalse:[ context environment classNamed: #'java/util/ArrayList'].
+    ctors := java_lang_ArrayList methodDictionary values select:[:e | e selector startsWith: '<init>' ].
+    pos := result select:[:each | each class == JavaConstructorPO and:[ each classes anElement == java_lang_ArrayList ] ].
+
+    self assert: result size >= ctors size.
+    ctors do:[:ctor |  
+        self assert: (pos contains:[:po | po selector == ctor selector ]).
+    ].
+
+    "Created: / 23-05-2014 / 11:32:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_04c
+    "
+    Test class completion
+    "
+
+    | java_lang_ArrayList ctors pos |
+
+    self complete:'def list = new java.util.┃'.
+
+    java_lang_ArrayList := context environment == Smalltalk 
+                            ifTrue:[ context environment classNamed: #'JAVA::java::util::ArrayList'  ]
+                            ifFalse:[ context environment classNamed: #'java/util/ArrayList'].
+    ctors := java_lang_ArrayList methodDictionary values select:[:e | e selector startsWith: '<init>' ].
+    pos := result select:[:each | each class == JavaConstructorPO and:[ each classes anElement == java_lang_ArrayList ] ].
+
+    self assert: result size >= ctors size.
+    ctors do:[:ctor |  
+        self assert: (pos contains:[:po | po selector == ctor selector ]).
+    ].
+
+    "Created: / 23-05-2014 / 11:33:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_04d
+    "
+    Test class completion
+    "
+
+    | java_lang_ArrayList ctors pos |
+
+    self complete:'def list = new java.ut┃'.
+
+    java_lang_ArrayList := context environment == Smalltalk 
+                            ifTrue:[ context environment classNamed: #'JAVA::java::util::ArrayList'  ]
+                            ifFalse:[ context environment classNamed: #'java/util/ArrayList'].
+    ctors := java_lang_ArrayList methodDictionary values select:[:e | e selector startsWith: '<init>' ].
+    pos := result select:[:each | each class == JavaConstructorPO and:[ each classes anElement == java_lang_ArrayList ] ].
+
+    self assert: result size >= ctors size.
+    ctors do:[:ctor |  
+        self assert: (pos contains:[:po | po selector == ctor selector ]).
+    ].
+
+    "Created: / 23-05-2014 / 11:41:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_complete_05a
+    "
+    Test method completion
+    "
+
+    | java_lang_ArrayList methods pos |
+
+    self complete:'def list = new java.util.ArrayList();
+                   list.addA┃'.
+
+    java_lang_ArrayList := context environment == Smalltalk 
+                            ifTrue:[ context environment classNamed: #'JAVA::java::util::ArrayList'  ]
+                            ifFalse:[ context environment classNamed: #'java/util/ArrayList'].
+
+    methods := java_lang_ArrayList methodDictionary values select:[:e | e selector startsWith: 'addA' ].
+    pos := result select:[:each | each isSmallSenseMethodPO and:[ each selector startsWith: 'addA' ] ].
+
+    self assert: result size >= methods size.
+    methods do:[:method |  
+        self assert: (pos contains:[:po | po selector == method selector ]).
+    ].
+
+    "Created: / 23-05-2014 / 11:43:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__JavaCompletionEngineEnvironmentResource.st	Fri May 23 12:58:31 2014 +0100
@@ -0,0 +1,39 @@
+"{ Package: 'jv:smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+TestResource subclass:#JavaCompletionEngineEnvironmentResource
+	instanceVariableNames:'booted'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Tests'
+!
+
+!JavaCompletionEngineEnvironmentResource methodsFor:'running'!
+
+setUp
+    JavaVM isNil ifTrue:[ 
+        self signalInitializationError.
+    ].
+    
+    booted := JavaVM booted.
+
+    JavaVM booted ifFalse:[ 
+        [
+            JavaVM boot.                            
+        ] on: Error do:[:ex | 
+            self signalInitializationError.
+        ].
+    ].
+
+    "Created: / 22-05-2014 / 17:21:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+tearDown
+    booted ifFalse:[ 
+        Java flushAllJavaResources
+    ].
+
+    "Created: / 22-05-2014 / 17:21:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/SmallSense__MethodPO.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__MethodPO.st	Fri May 23 12:58:31 2014 +0100
@@ -10,15 +10,11 @@
 !
 
 
-!MethodPO class methodsFor:'Instance creation'!
-
-
-
- !
-
 !MethodPO methodsFor:'accessing'!
 
-
+classes
+    ^ classes
+!
 
 cursorColumnAfterComplete
 
@@ -73,6 +69,10 @@
     "Modified: / 20-05-2014 / 10:28:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+selector
+    ^ selector
+!
+
 stringToCompleteForLanguage: language
     | someClass |
 
@@ -104,12 +104,6 @@
     "Modified: / 20-05-2014 / 10:29:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!MethodPO methodsFor:'displaying'!
-
-
-
- !
-
 !MethodPO methodsFor:'initialization'!
 
 initializeWithClass: aClass selector: aSymbol
--- a/SmallSense__RecognizerTests.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__RecognizerTests.st	Fri May 23 12:58:31 2014 +0100
@@ -6,7 +6,7 @@
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
-	category:'SmallSense-Tests'
+	category:'SmallSense-Tests-Obsolete'
 !
 
 
--- a/SmallSense__SmalltalkCompletionEngine.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__SmalltalkCompletionEngine.st	Fri May 23 12:58:31 2014 +0100
@@ -382,10 +382,10 @@
     class isNil ifTrue:[
         class := UndefinedObject.
     ].
-    ^ self complete: codeView codeAspect source: codeView contents class: class line: codeView cursorLine column: codeView cursorCol
+    ^ self complete: codeView codeAspect source: codeView contents string class: class line: codeView cursorLine column: codeView cursorCol
 
     "Created: / 02-10-2013 / 13:32:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 21-01-2014 / 23:20:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-05-2014 / 17:00:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 complete: mode source: source class: class line: lineNrArg column: colNrArg
--- a/SmallSense__SmalltalkEditSupport.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__SmalltalkEditSupport.st	Fri May 23 12:58:31 2014 +0100
@@ -143,7 +143,7 @@
 
                         eachName := 'each'.
                         tokens size > 4 ifTrue:[
-                            (collectionName := (tokens at:tokens size - 6) last = $s) ifTrue:[
+                            ((collectionName := tokens at:tokens size - 6) last = $s) ifTrue:[
                                 (collectionName endsWith:'ses') ifTrue:[
                                     eachName := collectionName copyButLast:2
                                 ] ifFalse:[
@@ -161,7 +161,7 @@
     ^ false.
 
     "Created: / 22-10-2013 / 03:00:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 22-10-2013 / 12:00:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-05-2014 / 11:28:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !SmalltalkEditSupport methodsFor:'event handling'!
--- a/SmallSense__SmalltalkParserTests.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__SmalltalkParserTests.st	Fri May 23 12:58:31 2014 +0100
@@ -6,7 +6,7 @@
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
-	category:'SmallSense-Tests'
+	category:'SmallSense-Tests-Obsolete'
 !
 
 
--- a/SmallSense__SnippetPO.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__SnippetPO.st	Fri May 23 12:58:31 2014 +0100
@@ -29,6 +29,10 @@
     "Created: / 20-05-2014 / 11:33:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+value
+    ^ value
+!
+
 value:aString
     value := aString.
 
--- a/SmallSense__TestCase.st	Thu May 22 16:15:30 2014 +0100
+++ b/SmallSense__TestCase.st	Fri May 23 12:58:31 2014 +0100
@@ -6,7 +6,7 @@
 	instanceVariableNames:'u v'
 	classVariableNames:''
 	poolDictionaries:''
-	category:'SmallSense-Tests'
+	category:'SmallSense-Tests-Obsolete'
 !
 
 
--- a/abbrev.stc	Thu May 22 16:15:30 2014 +0100
+++ b/abbrev.stc	Fri May 23 12:58:31 2014 +0100
@@ -1,17 +1,20 @@
 # automagically generated by the project definition
 # this file is needed for stc to be able to compile modules independently.
 # it provides information about a classes filename, category and especially namespace.
+SmallSense::BaseTestClass SmallSense__BaseTestClass jv:smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::CodeHighlightingService SmallSense__CodeHighlightingService jv:smallsense 'SmallSense-Core-Services' 0
 SmallSense::CodeNavigationService SmallSense__CodeNavigationService jv:smallsense 'SmallSense-Core-Services' 0
 SmallSense::CompletionContext SmallSense__CompletionContext jv:smallsense 'SmallSense-Core' 0
 SmallSense::CompletionController SmallSense__CompletionController jv:smallsense 'SmallSense-Core' 0
 SmallSense::CompletionEngine SmallSense__CompletionEngine jv:smallsense 'SmallSense-Core' 0
+SmallSense::CompletionEngineTests SmallSense__CompletionEngineTests jv:smallsense 'SmallSense-Tests' 1
 SmallSense::CompletionResult SmallSense__CompletionResult jv:smallsense 'SmallSense-Core' 0
 SmallSense::CompletionView SmallSense__CompletionView jv:smallsense 'SmallSense-Core-Interface' 2
 SmallSense::CriticsWindow SmallSense__CriticsWindow jv:smallsense 'SmallSense-Core-Interface' 1
 SmallSense::EditService SmallSense__EditService jv:smallsense 'SmallSense-Core-Services' 0
 SmallSense::EditSupport SmallSense__EditSupport jv:smallsense 'SmallSense-Core-Services' 0
 SmallSense::Info SmallSense__Info jv:smallsense 'SmallSense-Smalltalk-Types-Info' 0
+SmallSense::JavaCompletionEngineEnvironmentResource SmallSense__JavaCompletionEngineEnvironmentResource jv:smallsense 'SmallSense-Tests' 1
 SmallSense::Manager SmallSense__Manager jv:smallsense 'SmallSense-Smalltalk-Types-Info' 0
 SmallSense::PO SmallSense__PO jv:smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::ParseTreeIndex SmallSense__ParseTreeIndex jv:smallsense 'SmallSense-Core-Index' 0
@@ -29,7 +32,9 @@
 SmallSense::SmalltalkQuickFixer SmallSense__SmalltalkQuickFixer jv:smallsense 'SmallSense-Smalltalk-Lint' 0
 SmallSense::SmalltalkSyntaxHighlighter SmallSense__SmalltalkSyntaxHighlighter jv:smallsense 'SmallSense-Smalltalk' 3
 SmallSense::SmalltalkUnacceptedMethodEnvironment SmallSense__SmalltalkUnacceptedMethodEnvironment jv:smallsense 'SmallSense-Smalltalk-Lint' 0
+SmallSense::TestCase SmallSense__TestCase jv:smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::TokenPatternMatcher SmallSense__TokenPatternMatcher jv:smallsense 'SmallSense-Utils-Matcher' 0
+SmallSense::TokenPatternMatcherTests SmallSense__TokenPatternMatcherTests jv:smallsense 'SmallSense-Tests' 1
 SmallSense::TokenPatternParser SmallSense__TokenPatternParser jv:smallsense 'SmallSense-Utils-Matcher' 0
 SmallSense::TokenPatternToken SmallSense__TokenPatternToken jv:smallsense 'SmallSense-Utils-Matcher' 0
 SmallSense::TokenPatternTokenSet SmallSense__TokenPatternTokenSet jv:smallsense 'SmallSense-Utils-Matcher' 0
@@ -38,33 +43,32 @@
 SmallSense::TypeHolder SmallSense__TypeHolder jv:smallsense 'SmallSense-Smalltalk-Types' 0
 jv_smallsense jv_smallsense jv:smallsense '* Projects & Packages *' 3
 SmallSense::AbstractJavaCompletionEngine SmallSense__AbstractJavaCompletionEngine jv:smallsense 'SmallSense-Java' 0
+SmallSense::AbstractJavaCompletionEngineTests SmallSense__AbstractJavaCompletionEngineTests jv:smallsense 'SmallSense-Tests' 1
 SmallSense::ClassInfo SmallSense__ClassInfo jv:smallsense 'SmallSense-Smalltalk-Types-Info' 0
 SmallSense::ClassPO SmallSense__ClassPO jv:smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::ClassType SmallSense__ClassType jv:smallsense 'SmallSense-Smalltalk-Types' 0
 SmallSense::ConstantPO SmallSense__ConstantPO jv:smallsense 'SmallSense-Core-Interface-PO' 0
+SmallSense::FinderTests SmallSense__FinderTests jv:smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::GenericEditSupport SmallSense__GenericEditSupport jv:smallsense 'SmallSense-Core-Services' 0
 SmallSense::JavaEditSupport SmallSense__JavaEditSupport jv:smallsense 'SmallSense-Java' 0
 SmallSense::JavaImportPO SmallSense__JavaImportPO jv:smallsense 'SmallSense-Java-Interface-PO' 0
 SmallSense::MethodInfo SmallSense__MethodInfo jv:smallsense 'SmallSense-Smalltalk-Types-Info' 0
 SmallSense::MethodPO SmallSense__MethodPO jv:smallsense 'SmallSense-Core-Interface-PO' 0
+SmallSense::RecognizerTests SmallSense__RecognizerTests jv:smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::SmalltalkCompletionEngine SmallSense__SmalltalkCompletionEngine jv:smallsense 'SmallSense-Smalltalk' 0
 SmallSense::SmalltalkEditSupport SmallSense__SmalltalkEditSupport jv:smallsense 'SmallSense-Smalltalk' 0
 SmallSense::SmalltalkInferencer SmallSense__SmalltalkInferencer jv:smallsense 'SmallSense-Smalltalk-Types-Inference' 0
 SmallSense::SmalltalkParseNodeFinder SmallSense__SmalltalkParseNodeFinder jv:smallsense 'SmallSense-Smalltalk' 0
+SmallSense::SmalltalkParserTests SmallSense__SmalltalkParserTests jv:smallsense 'SmallSense-Tests-Obsolete' 1
 SmallSense::SnippetPO SmallSense__SnippetPO jv:smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::UnionType SmallSense__UnionType jv:smallsense 'SmallSense-Smalltalk-Types' 0
 SmallSense::UnknownType SmallSense__UnknownType jv:smallsense 'SmallSense-Smalltalk-Types' 1
 SmallSense::VariablePO SmallSense__VariablePO jv:smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::AbstractJavaCompletionEngineSimple SmallSense__AbstractJavaCompletionEngineSimple jv:smallsense 'SmallSense-Java' 2
+SmallSense::GroovyCompletionEngineSimpleTests SmallSense__GroovyCompletionEngineSimpleTests jv:smallsense 'SmallSense-Tests' 1
 SmallSense::GroovyEditSupport SmallSense__GroovyEditSupport jv:smallsense 'SmallSense-Groovy' 0
 SmallSense::JavaCompletionEngine SmallSense__JavaCompletionEngine jv:smallsense 'SmallSense-Java' 0
 SmallSense::JavaConstructorPO SmallSense__JavaConstructorPO jv:smallsense 'SmallSense-Java-Interface-PO' 0
 SmallSense::MethodKeywordRestPO SmallSense__MethodKeywordRestPO jv:smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::JavaCompletionEngineSimple SmallSense__JavaCompletionEngineSimple jv:smallsense 'SmallSense-Java' 2
 SmallSense::GroovyCompletionEngineSimple SmallSense__GroovyCompletionEngineSimple jv:smallsense 'SmallSense-Groovy' 2
-SmallSense::TestCase SmallSense__TestCase jv:smallsense 'SmallSense-Tests' 1
-SmallSense::BaseTestClass SmallSense__BaseTestClass jv:smallsense 'SmallSense-Tests' 1
-SmallSense::FinderTests SmallSense__FinderTests jv:smallsense 'SmallSense-Tests' 1
-SmallSense::RecognizerTests SmallSense__RecognizerTests jv:smallsense 'SmallSense-Tests' 1
-SmallSense::SmalltalkParserTests SmallSense__SmalltalkParserTests jv:smallsense 'SmallSense-Tests' 1
-SmallSense::TokenPatternMatcherTests SmallSense__TokenPatternMatcherTests jv:smallsense 'SmallSense-Tests' 1
--- a/bc.mak	Thu May 22 16:15:30 2014 +0100
+++ b/bc.mak	Fri May 23 12:58:31 2014 +0100
@@ -34,7 +34,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint -I$(INCLUDE_TOP)\stx\goodies\regex -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp -I$(INCLUDE_TOP)\stx\libhtml -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint -I$(INCLUDE_TOP)\stx\goodies\regex -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp -I$(INCLUDE_TOP)\stx\libhtml -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -61,6 +61,7 @@
 	pushd ..\..\stx\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\goodies\refactoryBrowser\browser & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\stx\goodies\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\libwidg & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\goodies\refactoryBrowser\lint & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\libhtml & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
--- a/jv_smallsense.st	Thu May 22 16:15:30 2014 +0100
+++ b/jv_smallsense.st	Fri May 23 12:58:31 2014 +0100
@@ -25,6 +25,23 @@
     "Modified: / 02-09-2013 / 12:29:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!jv_smallsense class methodsFor:'accessing - tests'!
+
+excludedFromTestSuite
+    "List of testcases and/or tests excluded from testsuite.
+     Entries maybe ClassName or #(ClassName testName)
+    "
+    ^ #(
+        #'SmallSense::BaseTestClass'
+        #'SmallSense::TestCase'
+        #'SmallSense::FinderTests'
+        #'SmallSense::RecognizerTests'
+        #'SmallSense::SmalltalkParserTests'
+    )
+
+    "Created: / 23-05-2014 / 12:49:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !jv_smallsense class methodsFor:'description'!
 
 excludedFromPreRequisites
@@ -47,7 +64,8 @@
         #'stx:goodies/refactoryBrowser/helpers'    "BrowserEnvironment - superclass of SmallSense::SmalltalkUnacceptedMethodEnvironment "
         #'stx:goodies/refactoryBrowser/lint'    "RBLintRule - extended "
         #'stx:goodies/regex'    "Regex::RxCharSetParser - superclass of SmallSense::TokenPatternParser::TokenSpecParser "
-        #'stx:libbasic'    "Autoload - superclass of SmallSense::BaseTestClass "
+        #'stx:goodies/sunit'    "TestAsserter - superclass of SmallSense::AbstractJavaCompletionEngineTests "
+        #'stx:libbasic'    "Collection - extended "
         #'stx:libcomp'    "AbstractSyntaxHighlighter - superclass of SmallSense::SmalltalkParser "
         #'stx:libhtml'    "HTMLDocumentFrame - extended "
         #'stx:libtool'    "AbstractSettingsApplication - superclass of SmallSense::SettingsAppl "
@@ -69,7 +87,7 @@
         #'stx:goodies/refactoryBrowser/parser'    "RBFormatter - referenced by SmallSense::SmalltalkEditSupport>>electricInsertSnippetAfterDoubleColon "
         #'stx:libbasic2'    "BackgroundQueueProcessingJob - referenced by SmallSense::Manager>>initialize "
         #'stx:libbasic3'    "ChangeSet - referenced by RBTransformationRule>>fixes: "
-        #'stx:libjava'    "JavaClass - referenced by SmallSense::CodeNavigationService::Navigator>>navigateToTypeReference: "
+        #'stx:libjava'    "Java - referenced by SmallSense::JavaCompletionEngineEnvironmentResource>>tearDown "
         #'stx:libjava/tools'    "GroovyScanner - referenced by SmallSense::GroovyCompletionEngineSimple>>scannerClass "
     )
 !
@@ -135,17 +153,20 @@
 
     ^ #(
         "<className> or (<className> attributes...) in load order"
+        (#'SmallSense::BaseTestClass' autoload)
         #'SmallSense::CodeHighlightingService'
         #'SmallSense::CodeNavigationService'
         #'SmallSense::CompletionContext'
         #'SmallSense::CompletionController'
         #'SmallSense::CompletionEngine'
+        (#'SmallSense::CompletionEngineTests' autoload)
         #'SmallSense::CompletionResult'
         #'SmallSense::CompletionView'
         #'SmallSense::CriticsWindow'
         #'SmallSense::EditService'
         #'SmallSense::EditSupport'
         #'SmallSense::Info'
+        (#'SmallSense::JavaCompletionEngineEnvironmentResource' autoload)
         #'SmallSense::Manager'
         #'SmallSense::PO'
         #'SmallSense::ParseTreeIndex'
@@ -163,7 +184,9 @@
         #'SmallSense::SmalltalkQuickFixer'
         #'SmallSense::SmalltalkSyntaxHighlighter'
         #'SmallSense::SmalltalkUnacceptedMethodEnvironment'
+        (#'SmallSense::TestCase' autoload)
         #'SmallSense::TokenPatternMatcher'
+        (#'SmallSense::TokenPatternMatcherTests' autoload)
         #'SmallSense::TokenPatternParser'
         #'SmallSense::TokenPatternToken'
         #'SmallSense::TokenPatternTokenSet'
@@ -172,39 +195,36 @@
         #'SmallSense::TypeHolder'
         #'jv_smallsense'
         #'SmallSense::AbstractJavaCompletionEngine'
+        (#'SmallSense::AbstractJavaCompletionEngineTests' autoload)
         #'SmallSense::ClassInfo'
         #'SmallSense::ClassPO'
         #'SmallSense::ClassType'
         #'SmallSense::ConstantPO'
+        (#'SmallSense::FinderTests' autoload)
         #'SmallSense::GenericEditSupport'
         #'SmallSense::JavaEditSupport'
         #'SmallSense::JavaImportPO'
         #'SmallSense::MethodInfo'
         #'SmallSense::MethodPO'
+        (#'SmallSense::RecognizerTests' autoload)
         #'SmallSense::SmalltalkCompletionEngine'
         #'SmallSense::SmalltalkEditSupport'
         #'SmallSense::SmalltalkInferencer'
         #'SmallSense::SmalltalkParseNodeFinder'
+        (#'SmallSense::SmalltalkParserTests' autoload)
         #'SmallSense::SnippetPO'
         #'SmallSense::UnionType'
         #'SmallSense::UnknownType'
         #'SmallSense::VariablePO'
         #'SmallSense::AbstractJavaCompletionEngineSimple'
+        (#'SmallSense::GroovyCompletionEngineSimpleTests' autoload)
         #'SmallSense::GroovyEditSupport'
         #'SmallSense::JavaCompletionEngine'
         #'SmallSense::JavaConstructorPO'
         #'SmallSense::MethodKeywordRestPO'
         #'SmallSense::JavaCompletionEngineSimple'
         #'SmallSense::GroovyCompletionEngineSimple'
-        (#'SmallSense::TestCase' autoload)
-        (#'SmallSense::BaseTestClass' autoload)
-        (#'SmallSense::FinderTests' autoload)
-        (#'SmallSense::RecognizerTests' autoload)
-        (#'SmallSense::SmalltalkParserTests' autoload)
-        (#'SmallSense::TokenPatternMatcherTests' autoload)
     )
-
-    "Modified: / 19-05-2014 / 12:44:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 extensionMethodNames
--- a/smallsense.rc	Thu May 22 16:15:30 2014 +0100
+++ b/smallsense.rc	Fri May 23 12:58:31 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.3.0\0"
-      VALUE "ProductDate", "Tue, 20 May 2014 11:29:12 GMT\0"
+      VALUE "ProductDate", "Fri, 23 May 2014 11:57:46 GMT\0"
     END
 
   END