MetacelloPackagesSpecTestCase.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 05 Sep 2012 16:35:54 +0000
changeset 7 759ff40b4754
parent 1 9e312de5f694
permissions -rw-r--r--
- stx_goodies_metacello_stx added: #extensionMethodNames changed: #classNamesAndAttributes #preRequisites

"{ Package: 'stx:goodies/metacello' }"

MetacelloSpecTestCase subclass:#MetacelloPackagesSpecTestCase
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Metacello-TestsCore-Specs'
!


!MetacelloPackagesSpecTestCase methodsFor:'tests'!

testAddGroupA
    "used by MetacelloAbstractVersionConstructor>>group:overrides:"

    | packages group |
    packages := self packagesSpec.
    packages
        add:
            (self groupSpec
                name: 'Platform';
                includes: 'Core';
                yourself).
    packages
        add:
            (self groupSpec
                name: 'Platform';
                includes: 'Tests';
                yourself).
    group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    self deny: (group includes includes: 'Core').
    self assert: (group includes includes: 'Tests')
!

testAddGroupB
    "used by MetacelloAbstractVersionConstructor>>group:overrides:"

    | packages group |
    packages := self packagesSpec.
    packages
        add:
            {(self groupSpec
                name: 'Platform';
                includes: 'Core';
                yourself).
            (self groupSpec
                name: 'Platform';
                includes: 'Tests';
                yourself)}.
    group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    self deny: (group includes includes: 'Core').
    self assert: (group includes includes: 'Tests')
!

testAddProjectA
    "used by MetacelloAbstractVersionConstructor>>project:overrides:"

    | packages project projectReferenceSpec |
    packages := self packagesSpec.
    packages
        add:
            (self projectSpec
                name: 'Project';
                className: 'ConfigurationOfProjectA';
                versionString: #'stable';
                loads: #('MyPackage' 'MyTests');
                preLoadDoIt: #'preLoadDoItB';
                postLoadDoIt: #'postLoadDoItB';
                yourself).
    packages
        add:
            (self projectSpec
                name: 'Project';
                className: 'ConfigurationOfProject';
                versionString: '1.0';
                operator: #'<';
                loads: #('MyPackage');
                preLoadDoIt: #'preLoadDoIt';
                postLoadDoIt: #'postLoadDoIt';
                yourself).
    projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ].
    self assert: projectReferenceSpec projectName = 'Project'.
    self assert: projectReferenceSpec versionString = '1.0'.
    self should: [ projectReferenceSpec includes: #() ] raise: Error.
    self should: [ projectReferenceSpec requires: #() ] raise: Error.
    self should: [ projectReferenceSpec answers: #() ] raise: Error.
    projectReferenceSpec
        projectDo: [ :prjct | self assert: projectReferenceSpec == prjct ]
        packageDo: [ :ignored | self assert: false ]
        groupDo: [ :ignored | self assert: false ].
    project := projectReferenceSpec referencedSpec.
    self assert: project name = 'Project'.
    self assert: project className = 'ConfigurationOfProject'.
    self assert: project versionString = '1.0'.
    self assert: project operator == #'<'.
    self assert: project loads = #('MyPackage').
    self assert: project preLoadDoIt value == #'preLoadDoIt'.
    self assert: project postLoadDoIt value == #'postLoadDoIt'.
    project
        projectDo: [ :prjct | self assert: project == prjct ]
        packageDo: [ :ignored | self assert: false ]
        groupDo: [ :ignored | self assert: false ]
!

testAddProjectB
    "used by MetacelloAbstractVersionConstructor>>project:overrides:"

    | packages project projectReferenceSpec |
    packages := self packagesSpec.
    packages
        add:
            {(self projectSpec
                name: 'Project';
                className: 'ConfigurationOfProjectA';
                versionString: #'stable';
                loads: #('MyPackage' 'MyTests');
                preLoadDoIt: #'preLoadDoItB';
                postLoadDoIt: #'postLoadDoItB';
                yourself).
            (self projectSpec
                name: 'Project';
                className: 'ConfigurationOfProject';
                versionString: '1.0';
                operator: #'<';
                loads: #('MyPackage');
                preLoadDoIt: #'preLoadDoIt';
                postLoadDoIt: #'postLoadDoIt';
                yourself)}.
    projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ].
    self assert: projectReferenceSpec projectName = 'Project'.
    self assert: projectReferenceSpec versionString = '1.0'.
    self should: [ projectReferenceSpec includes: #() ] raise: Error.
    self should: [ projectReferenceSpec requires: #() ] raise: Error.
    self should: [ projectReferenceSpec answers: #() ] raise: Error.
    projectReferenceSpec
        projectDo: [ :prjct | self assert: projectReferenceSpec == prjct ]
        packageDo: [ :ignored | self assert: false ]
        groupDo: [ :ignored | self assert: false ].
    project := projectReferenceSpec referencedSpec.
    self assert: project name = 'Project'.
    self assert: project className = 'ConfigurationOfProject'.
    self assert: project versionString = '1.0'.
    self assert: project operator == #'<'.
    self assert: project loads = #('MyPackage').
    self assert: project preLoadDoIt value == #'preLoadDoIt'.
    self assert: project postLoadDoIt value == #'postLoadDoIt'.
    project
        projectDo: [ :prjct | self assert: project == prjct ]
        packageDo: [ :ignored | self assert: false ]
        groupDo: [ :ignored | self assert: false ]
!

testCopyToGroup
    "not currently used by MetacelloAbstractVersionConstructor"

    | packages group |
    packages := self packagesSpec.
    packages
        add:
            (self groupSpec
                name: 'Platform';
                includes: 'Core';
                yourself).
    packages
        merge:
            (self groupSpec
                name: 'Platform';
                includes: 'Tests';
                yourself).
    group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    self assert: (group includes includes: 'Core').
    self assert: (group includes includes: 'Tests').
    group := self groupSpec
        name: 'PlatformCopy';
        includes: 'Copy';
        yourself.
    packages copy: 'Platform' to: group.
    group := packages packageNamed: 'PlatformCopy' ifAbsent: [ self assert: false ].
    self assert: (group includes includes: 'Core').
    self assert: (group includes includes: 'Copy').
    self assert: (group includes includes: 'Tests')
!

testCopyToProject
    "used by MetacelloAbstractVersionConstructor>>project:copyFrom:with:"

    | packages project referenceSpec |
    packages := self packagesSpec.
    packages
        add:
            (self projectSpec
                name: 'Project';
                className: 'ConfigurationOfProjectA';
                versionString: #'stable';
                loads: #('MyPackage' 'MyTests');
                preLoadDoIt: #'preLoadDoItB';
                postLoadDoIt: #'postLoadDoItB';
                yourself).
    project := self projectSpec
        name: 'ProjectCopy';
        yourself.
    referenceSpec := self project projectReferenceSpec
        name: 'ProjectCopy';
        projectReference: project;
        yourself.
    packages copy: 'Project' to: referenceSpec.
    project := (packages packageNamed: 'ProjectCopy' ifAbsent: [ self assert: false ]) referencedSpec.
    self assert: project name = 'ProjectCopy'.
    self assert: project className = 'ConfigurationOfProjectA'.
    self assert: project versionString = #'stable'.
    self assert: project operator == #'>='.
    self assert: project loads = #('MyPackage' 'MyTests').
    self assert: project preLoadDoIt value == #'preLoadDoItB'.
    self assert: project postLoadDoIt value == #'postLoadDoItB'
!

testMergeGroupA
    "used by MetacelloAbstractVersionConstructor>>group:with:"

    | packages group |
    packages := self packagesSpec.
    packages
        add:
            (self groupSpec
                name: 'Platform';
                includes: 'Core';
                yourself).
    packages
        merge:
            (self groupSpec
                name: 'Platform';
                includes: 'Tests';
                yourself).
    group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    self assert: (group includes includes: 'Core').
    self assert: (group includes includes: 'Tests')
!

testMergeGroupB
    "used by MetacelloAbstractVersionConstructor>>group:with:"

    | packages group |
    packages := self packagesSpec.
    packages
        add:
            (self groupSpec
                name: 'Platform';
                includes: 'Core';
                yourself).
    packages
        merge:
            {(self groupSpec
                name: 'Platform';
                includes: 'Tests';
                yourself)}.
    group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    self assert: (group includes includes: 'Core').
    self assert: (group includes includes: 'Tests')
!

testMergeProjectA
    "used by MetacelloAbstractVersionConstructor>>project:with:"

    | packages project projectReferenceSpec referenceSpec |
    packages := self packagesSpec.
    project := self projectSpec
        name: 'Project';
        className: 'ConfigurationOfProjectA';
        versionString: #'stable';
        loads: #('MyPackage' 'MyTests');
        preLoadDoIt: #'preLoadDoItB';
        postLoadDoIt: #'postLoadDoItB';
        yourself.
    referenceSpec := self project projectReferenceSpec
        name: project name;
        projectReference: project;
        yourself.
    packages add: referenceSpec.
    project := self projectSpec
        name: 'Project';
        className: 'ConfigurationOfProject';
        versionString: '1.0';
        operator: #'<';
        loads: #('MyPackage');
        preLoadDoIt: #'preLoadDoIt';
        postLoadDoIt: #'postLoadDoIt';
        yourself.
    referenceSpec := self project projectReferenceSpec
        name: project name;
        projectReference: project;
        yourself.
    packages merge: referenceSpec.
    projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ].
    project := projectReferenceSpec referencedSpec.
    self assert: project name = 'Project'.
    self assert: project className = 'ConfigurationOfProject'.
    self assert: project versionString = '1.0'.
    self assert: project operator == #'<'.
    self assert: project loads = #('MyPackage').
    self assert: project preLoadDoIt value == #'preLoadDoIt'.
    self assert: project postLoadDoIt value == #'postLoadDoIt'.
    project
        projectDo: [ :prjct | self assert: project == prjct ]
        packageDo: [ :ignored | self assert: false ]
        groupDo: [ :ignored | self assert: false ]
!

testMergeProjectB
    "used by MetacelloAbstractVersionConstructor>>project:with:"

    | packages project projectReferenceSpec referenceSpec |
    packages := self packagesSpec.
    project := self projectSpec
        name: 'Project';
        className: 'ConfigurationOfProjectA';
        versionString: #'stable';
        loads: #('MyPackage' 'MyTests');
        preLoadDoIt: #'preLoadDoItB';
        postLoadDoIt: #'postLoadDoItB';
        yourself.
    referenceSpec := self project projectReferenceSpec
        name: project name;
        projectReference: project;
        yourself.
    packages add: referenceSpec.
    project := self projectSpec
        name: 'Project';
        className: 'ConfigurationOfProject';
        versionString: '1.0';
        operator: #'<';
        loads: #('MyPackage');
        preLoadDoIt: #'preLoadDoIt';
        postLoadDoIt: #'postLoadDoIt';
        yourself.
    referenceSpec := self project projectReferenceSpec
        name: project name;
        projectReference: project;
        yourself.
    packages merge: {referenceSpec}.
    projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ].
    project := projectReferenceSpec referencedSpec.
    self assert: project name = 'Project'.
    self assert: project className = 'ConfigurationOfProject'.
    self assert: project versionString = '1.0'.
    self assert: project operator == #'<'.
    self assert: project loads = #('MyPackage').
    self assert: project preLoadDoIt value == #'preLoadDoIt'.
    self assert: project postLoadDoIt value == #'postLoadDoIt'.
    project
        projectDo: [ :prjct | self assert: project == prjct ]
        packageDo: [ :ignored | self assert: false ]
        groupDo: [ :ignored | self assert: false ]
!

testRemoveGroupA
    "used by MetacelloAbstractVersionConstructor>>removeGroup:"

    | packages group removed |
    packages := self packagesSpec.
    packages
        add:
            (self groupSpec
                name: 'Platform';
                includes: 'Core';
                yourself).
    packages
        merge:
            (self groupSpec
                name: 'Platform';
                includes: 'Tests';
                yourself).
    group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    self assert: (group includes includes: 'Core').
    self assert: (group includes includes: 'Tests').
    packages
        remove:
            (self groupSpec
                name: 'Platform';
                includes: 'Core';
                yourself).
    removed := false.
    packages packageNamed: 'Platform' ifAbsent: [ removed := true ].
    self assert: removed
!

testRemoveGroupB
    "used by MetacelloAbstractVersionConstructor>>removeGroup:"

    | packages group removed |
    packages := self packagesSpec.
    packages
        add:
            {(self groupSpec
                name: 'Platform';
                includes: 'Core';
                yourself).
            (self groupSpec
                name: 'Base';
                includes: 'Base';
                yourself).
            (self groupSpec
                name: 'Tests';
                includes: 'Tests';
                yourself)}.
    packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    packages packageNamed: 'Base' ifAbsent: [ self assert: false ].
    packages packageNamed: 'Tests' ifAbsent: [ self assert: false ].
    packages
        remove:
            {'Base'.
            'Tests'}.
    packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    removed := false.
    packages packageNamed: 'Base' ifAbsent: [ removed := true ].
    self assert: removed.
    removed := false.
    packages packageNamed: 'Tests' ifAbsent: [ removed := true ].
    self assert: removed
!

testRemoveGroupC
    "used by MetacelloAbstractVersionConstructor>>removeGroup:"

    | packages group removed |
    packages := self packagesSpec.
    packages
        add:
            {(self groupSpec
                name: 'Platform';
                includes: 'Core';
                yourself).
            (self groupSpec
                name: 'Base';
                includes: 'Base';
                yourself).
            (self groupSpec
                name: 'Tests';
                includes: 'Tests';
                yourself)}.
    packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    packages packageNamed: 'Base' ifAbsent: [ self assert: false ].
    packages packageNamed: 'Tests' ifAbsent: [ self assert: false ].
    packages remove: 'Tests'.
    packages packageNamed: 'Platform' ifAbsent: [ self assert: false ].
    packages packageNamed: 'Base' ifAbsent: [ self assert: false ].
    removed := false.
    packages packageNamed: 'Tests' ifAbsent: [ removed := true ].
    self assert: removed
!

testRemoveProjectA
    "used by MetacelloAbstractVersionConstructor>>removeProject:"

    | packages project projectReferenceSpec removed |
    packages := self packagesSpec.
    packages
        add:
            (self projectSpec
                name: 'Project';
                className: 'ConfigurationOfProject';
                versionString: '1.0';
                operator: #'<';
                loads: #('MyPackage');
                preLoadDoIt: #'preLoadDoIt';
                postLoadDoIt: #'postLoadDoIt';
                yourself).
    projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ].
    project := projectReferenceSpec referencedSpec.
    self assert: project name = 'Project'.
    self assert: project className = 'ConfigurationOfProject'.
    self assert: project versionString = '1.0'.
    self assert: project operator == #'<'.
    self assert: project loads = #('MyPackage').
    self assert: project preLoadDoIt value == #'preLoadDoIt'.
    self assert: project postLoadDoIt value == #'postLoadDoIt'.
    packages
        remove:
            (self projectReferenceSpec
                name: 'Project';
                yourself).
    removed := false.
    packages packageNamed: 'Project' ifAbsent: [ removed := true ].
    self assert: removed
!

testRemoveProjectB
    "used by MetacelloAbstractVersionConstructor>>removeProject:"

    | packages project projectReferenceSpec removed |
    packages := self packagesSpec.
    packages
        add:
            (self projectSpec
                name: 'Project';
                className: 'ConfigurationOfProject';
                versionString: '1.0';
                operator: #'<';
                loads: #('MyPackage');
                preLoadDoIt: #'preLoadDoIt';
                postLoadDoIt: #'postLoadDoIt';
                yourself).
    projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ].
    project := projectReferenceSpec referencedSpec.
    self assert: project name = 'Project'.
    self assert: project className = 'ConfigurationOfProject'.
    self assert: project versionString = '1.0'.
    self assert: project operator == #'<'.
    self assert: project loads = #('MyPackage').
    self assert: project preLoadDoIt value == #'preLoadDoIt'.
    self assert: project postLoadDoIt value == #'postLoadDoIt'.
    packages
        remove:
            {(self projectReferenceSpec
                name: 'Project';
                yourself)}.
    removed := false.
    packages packageNamed: 'Project' ifAbsent: [ removed := true ].
    self assert: removed
! !

!MetacelloPackagesSpecTestCase class methodsFor:'documentation'!

version_SVN
    ^ '$Id::                                                                                                                        $'
! !