packages/PackageTestCases.st
changeset 1226 adff4760750f
child 1243 e1c598aad240
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/packages/PackageTestCases.st	Wed Apr 09 13:23:18 2003 +0200
@@ -0,0 +1,738 @@
+"{ Package: 'stx:libbasic3' }"
+
+"{ NameSpace: Packages }"
+
+AbstractTestCases subclass:#PackageTestCases
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Package'
+!
+
+!PackageTestCases class methodsFor:'documentation'!
+
+documentation
+"
+    documentation to be added.
+
+    [author:]
+         (james@miraculix)
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+
+"
+!
+
+history
+    "Created: / 24.1.2003 / 16:15:21 / james"
+! !
+
+!PackageTestCases methodsFor:'initialize / release'!
+
+setUp
+    "common setup - invoked before testing"
+    | class |
+    (class := Smalltalk at:#QWERTZ) ifNil:[
+        self createClassNamed:#QWERTZ.
+        self createMethodFor:QWERTZ source:'aDummyMethod 1 + 1.'.
+        self createMethodFor:QWERTZ source:'aDummyMethod2 1 + 1.'.
+        self createMethodFor:QWERTZ source:'aDummyMethod3 1 + 1.'.
+        self createMethodFor:QWERTZ source:'aDummyMethodToGo 1 + 1.'.
+        self createMethodFor:QWERTZ source:'aDummyMethodToGo2 1 + 1.'.
+        self createMethodFor:QWERTZ source:'aDummyMethodToGo3 1 + 1.'.
+        self createMethodFor:QWERTZ source:'aDummyMethodToGo4 1 + 1.'.
+        self createMethodFor:QWERTZ source:'aDummyMethodThatShouldStay 1 + 1.'.
+        self createMethodFor:QWERTZ source:'looseMethodForTest_addMethod1 1 + 1.'.
+        self createMethodFor:QWERTZ source:'looseMethodForTest_addMethod2 1 + 1.'.
+    ].
+
+    (class := Smalltalk at:#QWERTY) ifNil:[
+        self createClassNamed:#QWERTY.
+        self createMethodFor:QWERTY source:'aDummyMethod 1 + 1.'.
+        self createMethodFor:QWERTY source:'aDummyMethod2 1 + 1.'.
+        self createMethodFor:QWERTY source:'aDummyMethod3 1 + 1.'.
+    ].
+    super setUp
+!
+
+tearDown
+    "common cleanup - invoked after testing"
+    self removeClassNamed:#QWERTY.
+    self removeClassNamed:#QWERTZ.
+
+    super tearDown
+! !
+
+!PackageTestCases methodsFor:'test - accessing'!
+
+test_classNames
+    |aPackage|
+    [
+        aPackage := self packageManager newPackageNamed:'PackageTestCases_ThisBelongsToATestCase'.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+
+        self assert:(aPackage classNames includesAll:#(#QWERTZ #QWERTY)).
+        self assert:(aPackage isDirty).
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_isDirty
+    |aPackage|
+    [
+        aPackage := self packageManager newPackageNamed:'PackageTestCases_ThisBelongsToATestCase'.
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self assert:(aPackage isDirty).
+
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+! !
+
+!PackageTestCases methodsFor:'test - adding and removing'!
+
+test_addClass
+    |aPackage|
+    [
+        aPackage := self packageManager newPackageNamed:'PackageTestCases_ThisBelongsToATestCase'.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+
+        self assert:(aPackage isDirty).
+        self assert:(aPackage isInstalled).
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_addMethod
+    |aPackage method1 method2|
+    [
+        aPackage := self packageManager newPackageNamed:'PackageTestCases_ThisBelongsToATestCase'.
+
+        method1 := (QWERTZ methodDictionary at:#looseMethodForTest_addMethod1).
+        method2 := (QWERTZ methodDictionary at:#looseMethodForTest_addMethod2).
+
+        self packageManager addMethod:method1 toPackage:aPackage.
+        self packageManager addMethod:method2 toPackage:aPackage.
+
+        self assert:(aPackage isDirty).
+        self assert:(aPackage isInstalled).
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_addMethod2
+    |aPackage|
+    [
+        aPackage := self packageManager newPackageNamed:'Bob the builder test cases'.
+
+        self packageManager moveClass:QWERTZ toPackage:aPackage.
+        aPackage isDirty:false.   "i am telling it a fib here "
+
+        self shouldnt:(aPackage isDirty).
+        self assert:(aPackage isInstalled).
+
+        self createMethodFor:QWERTZ source:'aDummyMethodTest_addClass2 1 + 1.'.   
+
+        self assert:((aPackage blockedMethodsAt:#QWERTZ) size == 1).
+        self assert:(aPackage isInstalled).
+        self shouldnt:(aPackage isDirty).
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_removeClass
+    |aPackage|
+    [
+        aPackage := self packageManager newPackageNamed:'Bob the builder test cases'.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager removeClass:QWERTZ fromPackage:aPackage.
+
+        self assert:(Smalltalk at:#QWERTZ) notNil.
+        self assert:(aPackage isDirty).
+        self assert:(aPackage isInstalled).
+        self shouldnt:(aPackage includesClassNamed:#QWERTZ).
+
+        self assert:(self packageManager workingPackage includesClassNamed:#QWERTZ).
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_removeMethod
+    |aPackage aFilename method1 method2|
+    [
+        aFilename := self testCaseDirectory filenameFor:'Test_removeMethod.pac'.    "clear up"
+        self createTestCaseDirectory.
+
+        aPackage := self packageManager newPackageNamed:'PackageTestCases_ThisBelongsToATestCase'.
+        aPackage packageHandler filename:aFilename.
+
+        method1 := (QWERTZ methodDictionary at:#looseMethodForTest_addMethod1).
+        method2 := (QWERTZ methodDictionary at:#looseMethodForTest_addMethod2).
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+
+        self packageManager addMethod:method1 toPackage:aPackage.
+        self packageManager addMethod:method2 toPackage:aPackage.
+
+        self packageManager savePackage:aPackage.
+        self shouldnt:(aPackage isDirty).
+
+        self packageManager removeMethod:method2 fromPackage:aPackage.
+
+        self assert:(Smalltalk at:#QWERTZ) notNil.
+        self assert:(aPackage isDirty).
+        self assert:(aPackage isInstalled).
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+! !
+
+!PackageTestCases methodsFor:'test - install/uninstall'!
+
+test_install
+    |aPackage aFilename|
+    [
+        aFilename := self testCaseDirectory filenameFor:'test_install.pac'.    "clear up"
+        self createTestCaseDirectory.
+        aPackage := self packageManager newPackageNamed:'PackageTestCases_ThisBelongsToATestCase'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+
+        self packageManager savePackage:aPackage as:aFilename.
+        self packageManager uninstallPackage:aPackage.
+        "--------- the method tested --------- "
+        self packageManager installPackage:aPackage. 
+
+        "tests"
+        self assert:(aPackage isInstalled).    
+        self assert:(aPackage name = 'PackageTestCases_ThisBelongsToATestCase').    
+        self assertSmalltalkIncludesAllClassNames:aPackage classNames.
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_install1
+    "test uninstalling a package with just loose methods"
+
+    |aPackage aFilename mthd1 mthd2 mthd3|
+    [
+        aFilename := self testCaseDirectory filenameFor:'TestLoad.pac'.
+        self createTestCaseDirectory.    "clear up"
+        aPackage := self packageManager newPackageNamed:'Dummy test case package'.
+        aPackage packageHandler filename:aFilename.
+        mthd1 := (QWERTZ methodDictionary at:#aDummyMethodToGo).
+        mthd2 := (QWERTZ methodDictionary at:#aDummyMethodToGo2).
+        mthd3 := (QWERTZ methodDictionary at:#aDummyMethodToGo3).
+
+        self packageManager addMethod:mthd1 toPackage:aPackage.
+        self packageManager addMethod:mthd2 toPackage:aPackage.
+        self packageManager addMethod:mthd3 toPackage:aPackage.
+
+
+        self packageManager uninstallPackage:aPackage.
+        self packageManager installPackage:aPackage.  "<--------- the method tested"
+
+        "/        aPackage fileOutIn: aFilename. 
+
+        "tests"
+        self assert:(self packageManager includesPackage:aPackage). 
+        self assert:(aPackage isInstalled).                      
+        self shouldnt:(QWERTZ methodDictionary includes:#aDummyMethodToGo).                      
+        self shouldnt:(QWERTZ methodDictionary includes:#aDummyMethodToGo2).                      
+        self shouldnt:(QWERTZ methodDictionary includes:#aDummyMethodToGo3).                      
+        self shouldnt:(QWERTZ methodDictionary includes:#aDummyMethodToGo4).
+
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_uninstall
+    |aPackage aFilename|
+    [
+        aFilename := self testCaseDirectory filenameFor:'TestLoad.pac'.    "clear up"
+        self createTestCaseDirectory.
+        aPackage := self packageManager 
+                    newPackageNamed:'Dummy test case package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+
+        "--------- the method tested----------------"
+        self packageManager uninstallPackage:aPackage. 
+
+        "/        aPackage fileOutIn: aFilename. 
+        self assert:(self packageManager includesPackage:aPackage).    
+
+        "tests"
+        self shouldnt:(aPackage isInstalled).
+        self shouldntSmalltalkIncludesAllClassNames:aPackage classNames.
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_uninstall1
+    "test uninstalling a package with just loose methods"
+
+    |aPackage aFilename mthd1 mthd2 mthd3|
+    [
+        aFilename := self testCaseDirectory filenameFor:'TestLoad.pac'.
+        self createTestCaseDirectory.    "clear up"
+
+        aPackage := self packageManager 
+                    newPackageNamed:'Dummy test case package'.
+        aPackage packageHandler filename:aFilename.
+
+        mthd1 := (QWERTZ compiledMethodAt:#aDummyMethodToGo).
+        mthd2 := (QWERTZ compiledMethodAt:#aDummyMethodToGo2).
+        mthd3 := (QWERTZ compiledMethodAt:#aDummyMethodToGo3).
+
+        self packageManager addMethod:mthd1 toPackage:aPackage.
+        self packageManager addMethod:mthd2 toPackage:aPackage.
+        self packageManager addMethod:mthd3 toPackage:aPackage.
+        "--------- the method tested-------------"
+        self packageManager uninstallPackage:aPackage.
+
+        "/        aPackage fileOutIn: aFilename. 
+
+        "tests"
+        self assert:(self packageManager includesPackage:aPackage). 
+        self assert:(QWERTZ methodDictionary keys includes:#aDummyMethodThatShouldStay).
+        self shouldnt:(aPackage isInstalled).                      
+        self shouldnt:(QWERTZ methodDictionary includes:#aDummyMethodToGo).                      
+        self shouldnt:(QWERTZ methodDictionary includes:#aDummyMethodToGo2).                      
+        self shouldnt:(QWERTZ methodDictionary includes:#aDummyMethodToGo3).                      
+        self shouldntSmalltalkIncludesAllLooseMethods:aPackage looseMethods.
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+! !
+
+!PackageTestCases methodsFor:'test - saving'!
+
+test_save
+    |aPackage aFilename|
+    [
+        aFilename := self createTestCaseFilenameFor:'TestFileOut.pac'.    "clear up"
+        self createTestCaseDirectory.
+        aPackage := self packageManager 
+                    newPackageNamed:'Dummy test case package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+
+        self assert:(aPackage isDirty).
+        self packageManager savePackage:aPackage.
+
+        "tests"
+        self shouldnt:(aPackage isDirty).
+
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_save1
+    "saves a package just with loose methods"
+    |aPackage aFilename mth1 mth2 |
+    [
+        aFilename := self createTestCaseFilenameFor:'TestFileOut.pac'.    "clear up"
+        self createTestCaseDirectory.
+        aPackage := self packageManager newPackageNamed:'Dummy test case package'.
+
+        mth1 := (QWERTZ methodDictionary at:#aDummyMethod).
+        mth2 := (QWERTZ methodDictionary at:#aDummyMethod2).
+
+        self packageManager addMethod:mth1 toPackage:aPackage.
+        self packageManager addMethod:mth2 toPackage:aPackage.
+        
+        self assert:(aPackage isDirty).
+
+        self packageManager savePackage:aPackage as:aFilename.
+
+        self shouldnt:(aPackage isDirty).
+
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_saveAs
+    |aPackage aFilename|
+    [
+        aFilename := self testCaseDirectory filenameFor:'TestFileOutIn.pac'.    "clear up"
+        self createTestCaseDirectory.
+        aPackage := self packageManager 
+                    newPackageNamed:'Dummy test case package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+        self assert:(aPackage isDirty).
+
+        "tests"
+        self packageManager savePackage:aPackage as:aFilename.
+        self shouldnt:(aPackage isDirty).
+
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+! !
+
+!PackageTestCases methodsFor:'test - scripts'!
+
+test_postInstallScript
+    "tests if the postInstallScript is evaluated after installation"
+    |aPackage aFilename wasCalled|
+
+    aFilename := self testCaseDirectory filenameFor:'Test_postInstallScript.pac'.    "clear up"
+    self createTestCaseDirectory.
+    [
+        aPackage := self packageManager newPackageNamed:'Testcase dummy package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+
+        "setting method tested"
+        aPackage postInstallScriptString:'        
+            self isInstalled ifTrue:[
+                self error:#thisWorked
+            ] ifFalse:[
+                self error:#thisFailed
+            ].
+        '. 
+
+        self packageManager savePackage:aPackage.
+        self packageManager uninstallPackage:aPackage.
+
+        wasCalled := false.     
+
+        Error handle:[:ex |
+            wasCalled := true.
+            self assert:(ex errorString = #thisWorked).
+        ] do:[
+            self packageManager installPackage:aPackage.    "<--------- where it will be invoked" 
+            self assert:(false).
+        ].
+        self assert:(wasCalled).
+
+        "tests"
+        self assert:(aPackage isInstalled).    
+        self assertSmalltalkIncludesAllClassNames:aPackage classNames.
+        self assertSmalltalkIncludesAllLooseMethods:aPackage looseMethods.
+    ] 
+            ensure:[
+
+        self clearUpFiles ifTrue:[
+            aFilename remove
+        ].
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_postUninstallScript
+    "tests if the postUninstall script is evaluated after installation"
+    |aPackage aFilename wasCalled|
+    [
+        aPackage := self packageManager newPackageNamed:'Testcase dummy package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+
+        "setting method tested"
+        aPackage postUninstallScriptString:'        
+                self isInstalled ifTrue:[
+                    self error:#thisFailed
+                ] ifFalse:[
+                    self error:#thisWorked
+                ].
+        '. 
+        wasCalled := false.
+        Error handle:[:ex |
+            wasCalled := true.
+            self assert:(ex errorString = #thisWorked).
+        ] do:[
+            "--------- where it will be invoked--------------" 
+            self packageManager uninstallPackage:aPackage
+        ].
+        self assert:(wasCalled).
+        "tests"
+        self shouldnt:(aPackage isInstalled).    
+        self shouldntSmalltalkIncludesAllClassNames:aPackage classNames.
+    ] ensure:[
+        self packageManager unloadPackage:aPackage.
+    ]
+!
+
+test_preInstallScript
+    "tests if the preinstall script is evaluated before installation"
+    |createdPackage aFilename loadedPackage|
+
+    aFilename := self testCaseDirectory filenameFor:'Test_preInstallScript.pac'.    "clear up"
+    self createTestCaseDirectory.
+    [
+        createdPackage := self packageManager newPackageNamed:'Testcase dummy package'.  
+
+        self packageManager addClass:QWERTZ toPackage:createdPackage.
+        self packageManager addClass:QWERTY toPackage:createdPackage.
+
+        createdPackage preInstallScriptString:'#thisWorked'. "<--------- the method tested"
+    
+        self packageManager savePackage:createdPackage as:aFilename.
+        self packageManager unloadPackage:createdPackage.
+
+        loadedPackage := self packageManager loadPackageFromFile:aFilename.
+        self packageManager installPackage:loadedPackage.
+
+        "tests"
+        self assert:(loadedPackage preInstallScript evaluate) == #thisWorked.    
+        self assert:(loadedPackage isInstalled).    
+        self assertSmalltalkIncludesAllClassNames:loadedPackage classNames.
+        loadedPackage packagedClasses do:[:aPackagedClass |
+            "Does the class exists but the package has not backup?"
+            self assert:(aPackagedClass classDefinition notNil)
+        ].
+
+    ] ensure:[
+        self clearUpFiles ifTrue:[
+            aFilename remove
+        ].
+        loadedPackage ifNotNil:[
+            self packageManager unloadPackage:loadedPackage.
+        ].
+    ]
+!
+
+test_preInstallScript1
+    "tests if the preinstall script is evaluated before installation"
+    |aPackage aFilename|
+
+    aFilename := self testCaseDirectory filenameFor:'Test_preInstallScript1.pac'.    "clear up"
+    self createTestCaseDirectory.
+    [
+        aPackage := self packageManager newPackageNamed:'Testcase dummy package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+        "setting method tested"
+        aPackage preInstallScriptString:'        
+            self isInstalled ifTrue:[
+                self error:#thisFailed
+            ] ifFalse:[
+                self error:#thisWorked
+            ].
+        '. 
+        self packageManager savePackage:aPackage.
+        self packageManager uninstallPackage:aPackage.
+        Error handle:[:ex |
+            self assert:(ex errorString = #thisWorked).
+        ] do:[
+            "--------- where it will be invoked-------------" 
+            self packageManager installPackage:aPackage.
+        ].
+
+        "tests"
+        self shouldnt:(aPackage isInstalled).    
+        self shouldntSmalltalkIncludesAllClassNames:aPackage classNames
+    ] ensure:[
+        self clearUpFiles ifTrue:[
+            aFilename remove
+        ].
+        self packageManager unloadPackage:aPackage.
+
+    ]
+!
+
+test_preUninstallScript
+    "tests if the preUninstall script is evaluated before uninstallation"
+    |aPackage aFilename wasCalled|
+
+    aFilename := self testCaseDirectory filenameFor:'Test_preUninstallScript.pac'.    "clear up"
+    self createTestCaseDirectory.
+    [
+        aPackage := self packageManager newPackageNamed:'Testcase dummy package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+        "setting method tested"
+        aPackage preUninstallScriptString:'
+            self isInstalled ifTrue:[
+                self error:#thisWorked
+            ] ifFalse:[
+                self error:#thisFailed
+            ].
+        '. 
+        wasCalled := false.
+        Error handle:[:ex |
+            wasCalled := true.
+            self assert:(ex errorString = #thisWorked).
+        ] do:[
+            "--------- where it will be invoked-------------" 
+            self packageManager uninstallPackage:aPackage.
+        ].
+        self assert:(wasCalled).
+        "tests"
+        self assert:(aPackage isInstalled).    
+        self assertSmalltalkIncludesAllClassNames:aPackage classNames
+    ] ensure:[
+        self clearUpFiles ifTrue:[
+            aFilename remove
+        ].
+        aPackage preUninstallScriptString:''.
+        self packageManager unloadPackage:aPackage.
+
+    ]
+! !
+
+!PackageTestCases methodsFor:'test_package prerequisites'!
+
+test_classPrerequisite
+    "tests if the classPrerequisite is evaluated before installation"
+    "
+    | inst |
+    inst := self basicNew.
+    inst setUp.
+    inst test_classPrerequisite.
+    inst tearDown
+    "
+    |aPackage aFilename |
+    aFilename := self testCaseDirectory filenameFor:'Test_classPrerequisite.pac'.    "clear up"
+    self createTestCaseDirectory.
+    [
+        aPackage := self packageManager newPackageNamed:'Testcase dummy package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+
+        "setting method tested"
+        aPackage addClassNamePrerequisite:#Object
+                 ifFailString:'Packages::AbstractTestCase::PackageTestCaseNotification raiseErrorString:#thisWasCalled'.
+        self packageManager savePackage:aPackage. 
+
+        self packageManager uninstallPackage:aPackage.
+        self packageTestCaseNotification handle:[:ex |
+            self assert:(ex errorString = #failed).
+        ] do:[
+            self packageManager installPackage:aPackage. "<--------- where it will be invoked"
+           "this should never be called. The prerequisite was never called or the class
+            ClassThatDoesNotExist does indeed exist!!"
+        ].
+
+        "tests"
+        self assert:(aPackage isInstalled).    
+        self assertSmalltalkIncludesAllClassNames:aPackage classNames
+    ] ensure:[
+        self clearUpFiles ifTrue:[
+            aFilename remove
+        ].
+    ]
+!
+
+test_classPrerequisite1
+    "tests if the packagePrerequisite is evaluated before installation"
+    |aPackage aFilename |
+
+    aFilename := self testCaseDirectory filenameFor:'Test_classPrerequisite1.pac'.    "clear up"
+    self createTestCaseDirectory.
+    [
+        aPackage := self packageManager newPackageNamed:'Testcase dummy package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+        self packageManager addClass:QWERTY toPackage:aPackage.
+
+        "setting method tested"
+        aPackage addClassNamePrerequisite:#ClassThatDoesNotExist
+                 ifFailString:'Packages::AbstractTestCases::PackageTestCaseNotification raiseErrorString:#thisWorked'.
+
+        self packageManager savePackage:aPackage.
+        self packageManager uninstallPackage:aPackage.
+
+        self packageTestCaseNotification handle:[:ex |
+            self assert:(ex errorString = #thisWorked).
+        ] do:[
+
+            self packageManager installPackage:aPackage. "<--------- where it will be invoked"
+           "this should never be called. The prerequisite was never called or the class
+            ClassThatDoesNotExist does indeed exist!!"
+            self assert:(false).
+        ].
+
+        "tests"
+        self shouldnt:(aPackage isInstalled).    
+        self shouldntSmalltalkIncludesAllClassNames:aPackage classNames
+    ] ensure:[
+        self clearUpFiles ifTrue:[
+            aFilename remove
+        ].
+    ]
+!
+
+test_packagePrerequisite1
+    "tests if the packagePrerequisite is evaluated before installation"
+    |aPackage aFilename |
+    aFilename := self testCaseDirectory filenameFor:'Test_packagePrerequisite1.pac'.    "clear up"
+    self createTestCaseDirectory.
+    [
+        aPackage := self packageManager newPackageNamed:'Testcase dummy package'.
+        aPackage packageHandler filename:aFilename.
+
+        self packageManager addClass:QWERTY toPackage:aPackage.
+        self packageManager addClass:QWERTZ toPackage:aPackage.
+
+        "setting method tested"
+        aPackage addPackageNamePrerequisite:#PackageThatDoesNotExist
+                 ifFailString:'Packages::AbstractTestCases::PackageTestCaseNotification raiseErrorString:#thisWorked'.
+        self packageManager savePackage:aPackage.
+        self packageManager uninstallPackage:aPackage.
+
+        self packageTestCaseNotification handle:[:ex |
+            self assert:(ex errorString = #thisWorked).
+        ] do:[        
+            self packageManager installPackage:aPackage."<--------- where it will be invoked"
+
+           "this should never be called. The prerequisite was never called or the class
+            PackageThatDoesNotExist does indeed exist!!"
+            self assert:(false).
+        ].
+
+        "tests"
+        self shouldnt:(aPackage isInstalled).    
+        self shouldntSmalltalkIncludesAllClassNames:aPackage classNames
+    ] ensure:[
+        self clearUpFiles ifTrue:[
+            aFilename remove
+        ].
+        self packageManager unloadPackage:aPackage.
+    ]
+! !
+
+!PackageTestCases class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libbasic3/packages/PackageTestCases.st,v 1.1 2003-04-09 11:23:18 james Exp $'
+! !