class: RegressionTests::CompilerTests2
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 26 Sep 2014 16:10:52 +0200
changeset 1212 8429b2bff582
parent 1211 d271e7a8d085
child 1213 0de4acfc2597
class: RegressionTests::CompilerTests2 Context tests refactored and more checks added.
RegressionTests__CompilerTests2.st
--- a/RegressionTests__CompilerTests2.st	Fri Sep 26 15:35:44 2014 +0200
+++ b/RegressionTests__CompilerTests2.st	Fri Sep 26 16:10:52 2014 +0200
@@ -3,7 +3,9 @@
 "{ NameSpace: RegressionTests }"
 
 TestCase subclass:#CompilerTests2
-	instanceVariableNames:'methods enabledJIT argAndVarNames argAndVarNamesContext'
+	instanceVariableNames:'methods enabledJIT savedContext savedContextArgAndVarNames
+		savedContextArgAndVarValues savedContextArgAndVarValuesUsingEval
+		savedContextLine'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'tests-Regression-Compilers'
@@ -73,6 +75,43 @@
 
     "Created: / 12-04-2013 / 21:20:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 13-04-2013 / 10:12:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+saveContext
+    self saveContext: thisContext sender.
+
+    "Created: / 26-09-2014 / 12:49:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+saveContext: aContext
+    savedContext := aContext.
+    savedContextArgAndVarNames := savedContext argAndVarNames asArray.
+    savedContextArgAndVarValues := savedContext argsAndVars.
+    savedContextArgAndVarValuesUsingEval := savedContextArgAndVarNames 
+        collect:[ :each | 
+            Compiler evaluate:each
+                             in:savedContext
+                             receiver:savedContext receiver
+                             notifying:nil
+                             logged:false
+                             ifFail:[ '*Error when evaluating*'].
+        ].
+    savedContextLine := savedContext lineNumber.
+
+    self assert: savedContextArgAndVarNames size == savedContextArgAndVarValues size.
+    self assert: savedContextArgAndVarNames size == savedContextArgAndVarValuesUsingEval size.
+
+    1 to: savedContextArgAndVarValues size do:[:i | 
+        | v1 v2 |
+
+        v1 := savedContextArgAndVarValues at: i.
+        v2 := savedContextArgAndVarValuesUsingEval at: i.
+
+        self assert: v1 == v2. "HAS to be IDENTICAL"
+    ].
+
+    "Created: / 26-09-2014 / 12:49:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 14:58:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CompilerTests2 methodsFor:'private-mock methods'!
@@ -82,10 +121,11 @@
         | isEven |
 
         isEven := each even.
-        argAndVarNames := thisContext argAndVarNames asArray.
+        self saveContext.
     ].
 
     "Created: / 20-08-2013 / 09:04:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 13:00:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 method_argAndVarNames_02
@@ -98,21 +138,22 @@
             someOtherLocal := char == $1.
         ].
         isEven := each even.
-        argAndVarNames := thisContext argAndVarNames asArray.
+        self saveContext.
     ].
 
     "Created: / 20-08-2013 / 09:17:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 13:00:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 method_argAndVarNames_03
     "Reported by Stefan"
 
-    argAndVarNames := 1.
-    (Smalltalk isStandAloneApp | (argAndVarNames == 1)) ifTrue:[
+    savedContextArgAndVarNames := 1.
+    (Smalltalk isStandAloneApp | (savedContextArgAndVarNames == 1)) ifTrue:[
         | ttt |
 
         ttt := 123.
-        argAndVarNames := (argAndVarNamesContext := thisContext) argAndVarNames asArray.    
+        self saveContext.
     ].
     self halt.
     
@@ -122,7 +163,7 @@
     "
 
     "Created: / 20-08-2013 / 09:22:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 25-06-2014 / 14:27:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 13:01:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 method_argAndVarNames_04
@@ -134,11 +175,12 @@
             | isOddNot |
 
             isOddNot := each odd not.
-            argAndVarNames := thisContext argAndVarNames asArray.
+            self saveContext.
         ]
     ].
 
     "Created: / 20-08-2013 / 10:11:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 13:01:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 method_argAndVarNames_05
@@ -152,7 +194,7 @@
             local2 := 42.
 
             i == 1 ifTrue:[
-                argAndVarNames := thisContext argAndVarNames asArray.
+                self saveContext.
             ]
         ]
     ].
@@ -164,6 +206,7 @@
     "
 
     "Created: / 22-08-2013 / 15:48:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 13:01:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 method_argAndVarNames_06
@@ -179,7 +222,7 @@
 
                     superDef := ProjectDefinition definitionClassForPackage: cls superclass package.
                     superNm := cls superclass name.
-                    argAndVarNames := thisContext argAndVarNames asArray.    
+                    self saveContext.
                     ^ self
                 ].
             ].
@@ -191,6 +234,7 @@
     "
 
     "Created: / 20-09-2013 / 11:44:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 13:01:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 method_lineno_002
@@ -558,13 +602,19 @@
 setUp
     methods := Set new.
     enabledJIT := ObjectMemory justInTimeCompilation:true.
-    argAndVarNames := nil.
+    savedContext := savedContextArgAndVarNames 
+    := savedContextArgAndVarValues := savedContextArgAndVarValuesUsingEval 
+    := savedContextLine := '* Not assigned *'.
 
     "Created: / 25-04-2013 / 15:20:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 20-08-2013 / 09:05:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 13:00:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 tearDown
+    savedContext := savedContextArgAndVarNames 
+    := savedContextArgAndVarValues := savedContextArgAndVarValuesUsingEval 
+    := savedContextLine := nil.
+
     ObjectMemory justInTimeCompilation: enabledJIT.
     Class withoutUpdatingChangesDo:[
         | classesToRemove |
@@ -590,7 +640,7 @@
     ]
 
     "Created: / 26-10-2012 / 11:32:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 24-06-2013 / 14:12:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 12:59:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CompilerTests2 methodsFor:'tests'!
@@ -801,73 +851,93 @@
 test_argAndVarNames_01
 
     #(bc jit stc) do:[:mode |
-        argAndVarNames := nil.
+        savedContextArgAndVarNames := nil.
         self compile: (self class >> #method_argAndVarNames_01) source mode: mode.
         self perform: (mode , '_method_argAndVarNames_01') asSymbol.
-        self assert: argAndVarNames = #(each isEven)
+        self assert: savedContextArgAndVarNames  = #(each isEven).
+        self assert: savedContextArgAndVarValues = #(4 true)
+        
     ]
 
     "Created: / 20-08-2013 / 09:05:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 15:02:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 test_argAndVarNames_02
 
     #(bc jit stc) do:[:mode |
-        argAndVarNames := nil.
+        savedContextArgAndVarNames := nil.
         self compile: (self class >> #method_argAndVarNames_02) source mode: mode.
         self perform: (mode , '_method_argAndVarNames_02') asSymbol.
-        self assert: argAndVarNames = #(each isEven)
+        self assert: savedContextArgAndVarNames  = #(each isEven).
+        self assert: savedContextArgAndVarValues = #(4 true)    
     ]
 
     "Created: / 20-08-2013 / 09:17:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 15:02:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 test_argAndVarNames_03
 
     #(bc jit stc) do:[:mode |
-        argAndVarNames := nil.
+        savedContextArgAndVarNames := nil.
         self compile: (self class >> #method_argAndVarNames_03) source mode: mode.
         self perform: (mode , '_method_argAndVarNames_03') asSymbol.
-        self assert: argAndVarNames = #(ttt)
+        self assert: savedContextArgAndVarNames = #(ttt).
+        self assert: savedContextArgAndVarValues = #(123)   
     ]
 
     "Created: / 20-08-2013 / 09:23:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 15:03:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 test_argAndVarNames_04
 
     #(bc jit stc) do:[:mode |
-        argAndVarNames := nil.
+        savedContextArgAndVarNames := nil.
         self compile: (self class >> #method_argAndVarNames_04) source mode: mode.
         self perform: (mode , '_method_argAndVarNames_04') asSymbol.
-        self assert: argAndVarNames = #(each isEven isOddNot)
+        self assert: savedContextArgAndVarNames = #(each isEven isOddNot).
+        self assert: savedContextArgAndVarValues = #(4 true true).  
     ]
 
     "Created: / 20-08-2013 / 10:12:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 15:04:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 test_argAndVarNames_05
 
     #(bc jit stc) do:[:mode |
-        argAndVarNames := nil.
+        savedContextArgAndVarNames := nil.
         self compile: (self class >> #method_argAndVarNames_05) source mode: mode.
         self perform: (mode , '_method_argAndVarNames_05') asSymbol.
-        self assert: argAndVarNames = #(len i local1 local2)
+        self assert: savedContextArgAndVarNames = #(len i local1 local2).
+        self assert: savedContextArgAndVarValues = #(5 1 #local1 42)  
     ]
 
     "Created: / 22-08-2013 / 15:49:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 15:05:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 test_argAndVarNames_06
 
     #(bc jit stc) do:[:mode |
-        argAndVarNames := nil.
+        savedContextArgAndVarNames := nil.
         self compile: (self class >> #method_argAndVarNames_06) source mode: mode.
         self perform: (mode , '_method_argAndVarNames_06') asSymbol.
-        self assert: argAndVarNames = #(clsnm attributes cls superDef superNm)
+        self assert: savedContextArgAndVarNames = #(clsnm attributes cls superDef superNm).
+        self assert: savedContextArgAndVarValues = {
+            self class name.
+            #(#autoload).
+            self class.
+            Smalltalk at: #stx_goodies_sunit.
+            self class superclass name.
+        }
+
     ]
 
     "Created: / 20-09-2013 / 11:44:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-09-2014 / 15:09:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CompilerTests2 methodsFor:'tests - line numbers'!