RegressionTests__ChangeSetTests.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 26 Mar 2014 18:41:43 +0100
changeset 1108 f00efe9de213
parent 1107 8d4a3e77f905
child 1111 15a933b0f58b
permissions -rw-r--r--
class: RegressionTests::ChangeSetTests added: #test_ClassInitializeChange_05

"{ Encoding: utf8 }"

"{ Package: 'exept:regression' }"

"{ NameSpace: RegressionTests }"

TestCase subclass:#ChangeSetTests
	instanceVariableNames:'classes'
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression-System-Changes'
!

Object subclass:#ExistingPrivateClass
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	privateIn:ChangeSetTests
!

ReadWriteStream subclass:#NonPositionableReadWriteStream
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	privateIn:ChangeSetTests
!


!ChangeSetTests methodsFor:'change & update'!

update: aspect with: param from: sender

    aspect == #newClass ifTrue:[
        classes add: param.
    ].

    "Created: / 20-11-2012 / 14:47:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests methodsFor:'private'!

performTest
    ^Class withoutUpdatingChangesDo:[
        super performTest
    ]

    "Created: / 20-11-2012 / 15:08:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests methodsFor:'running'!

setUp
    Smalltalk addDependent: self.
    classes := Set new.

    "Created: / 20-11-2012 / 14:46:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

tearDown
    | ns |

    Smalltalk removeDependent: self.
    classes do:[:each|
        (each fullName startsWith: 'Mock') ifTrue:[
            | clsVarSym |
            Smalltalk removeClass: each.
            clsVarSym := (each fullName , ':MockVar') asSymbolIfInterned.
            (clsVarSym notNil and:[ Smalltalk includesKey: clsVarSym]) ifTrue:[ 
                Smalltalk at: clsVarSym put: nil.
            ].
        ].
    ].

    #(Mocks Mocks2 Mocks3) do:[:nsName|
        (ns := Smalltalk at:nsName) notNil ifTrue:[
            Smalltalk removeClass: ns
        ].
    ].

    "Created: / 20-11-2012 / 14:46:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 21-03-2014 / 18:29:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests methodsFor:'tests - ChangeSet'!

test_saveToStream_format_nil_01
    | cs output chunks |

    cs := ChangeSet forExistingClass: ChangeSetTests.
    cs := cs select:[:each | each isMethodChange and:[ each selector = #setUp ]].
    output := (String streamContents:[ :s | cs saveToStream: s  format: nil ]) readStream.
    chunks := OrderedCollection streamContents:[ :s |
        [ output atEnd ] whileFalse:[ 
            s nextPut: output nextChunk.
        ].
    ].

    self assert: chunks size == 6.

    self assert: (chunks at: 1) = ('"{ NameSpace: RegressionTests }"', Character cr, Character cr).
    self assert: (chunks at: 2) = ''.
    self assert: (chunks at: 3) = 'ChangeSetTests methodsFor: ''running'''.
    self assert: (chunks at: 4) = (self class compiledMethodAt: #setUp) source.
    self assert: (chunks at: 5) = ''.
    self assert: (chunks at: 6) = ''.

    "Created: / 04-02-2014 / 11:51:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 06-03-2014 / 12:46:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_saveToStream_format_nil_02
    | cs output chunks |

    cs := ChangeSet forExistingClass: ChangeSetTests::ExistingPrivateClass.
    cs := cs select:[:each | each isMethodChange and:[ each selector = #foo ]].
    output := (String streamContents:[ :s | cs saveToStream: s  format: nil ]) readStream.
    chunks := OrderedCollection streamContents:[ :s |
        [ output atEnd ] whileFalse:[ 
            s nextPut: output nextChunk.
        ].
    ].

    self assert: chunks size == 6.

    self assert: (chunks at: 1) = ('"{ NameSpace: RegressionTests }"', Character cr, Character cr).
    self assert: (chunks at: 2) = ''.
    self assert: (chunks at: 3) = 'ChangeSetTests::ExistingPrivateClass methodsFor: ''methods'''.
    self assert: (chunks at: 4) = (ChangeSetTests::ExistingPrivateClass compiledMethodAt: #foo) source.
    self assert: (chunks at: 5) = ''.
    self assert: (chunks at: 6) = ''.

    "Created: / 04-02-2014 / 12:08:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 06-03-2014 / 12:45:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests methodsFor:'tests - ChangeSet::ClassSourceWriter'!

test_ClassSourceWriter_01
    | sourceFileout cs sourceChangeset|

    sourceFileout := String streamContents:[:s|
        AbstractSourceCodeManager fileOutSourceCodeOf:ChangeSet on:s
    ].

    cs := ChangeSet fromStream: sourceFileout readStream.

    sourceChangeset := String streamContents:[:s|
        cs saveToStream:s format:#classSource
    ].
    self assert: sourceFileout asByteArray = sourceChangeset asByteArray.
    "
    Tools::TextDiff2Tool openOn: sourceFileout label: 'sourceFileout' and: sourceChangeset label: 'sourceChangeset'
    '/tmp/sourceFileout.st' asFilename writingFileDo:[:s|s binary; nextPutAll:  sourceFileout asByteArray].
    '/tmp/sourceChangeset.st' asFilename writingFileDo:[:s|s binary; nextPutAll:  sourceChangeset asByteArray].
    "

    "Created: / 30-04-2013 / 11:28:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified (comment): / 01-05-2013 / 08:55:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassSourceWriter_02
    | sourceFileout cs sourceChangeset|

    sourceFileout := String streamContents:[:s|
        AbstractSourceCodeManager fileOutSourceCodeOf:Tools::HierarchicalPackageFilterList on:s
    ].

    cs := ChangeSet fromStream: sourceFileout readStream.

    sourceChangeset := String streamContents:[:s|
        cs saveToStream:s format:#classSource
    ].
    self assert: sourceFileout asByteArray = sourceChangeset asByteArray.
    "
    Tools::TextDiff2Tool openOn: sourceFileout label: 'sourceFileout' and: sourceChangeset label: 'sourceChangeset'
    "

    "Created: / 30-04-2013 / 11:35:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests methodsFor:'tests - ClassDefinitionChange'!

test_ClassDefinitionChange_01

    | cs |

    cs := ChangeSet fromStream:'
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    self assert: cs size == 1.
    self assert: cs first className = 'MockClass'.
    self assert: (Smalltalk at: #MockClass) isNil.
    cs apply.
    self assert: (Smalltalk at: #MockClass) notNil.

    "Created: / 20-11-2012 / 14:23:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_01_fileIn

    | changefile |

    changefile :='
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.



    self assert: (Smalltalk at: #MockClass) isNil.
    changefile readStream fileIn.
    self assert: (Smalltalk at: #MockClass) notNil.

    "Created: / 20-11-2012 / 14:23:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_02

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    self assert: cs size == 1.
    self assert: cs first className = 'MockClass'.
    self assert: cs first fullClassName = 'Mocks::MockClass'.
    self assert: cs first nameSpaceName = 'Mocks'.
    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.
    cs apply.
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.

    "Created: / 20-11-2012 / 14:50:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_02_fileIn

    | changefile |

    changefile :='
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.





    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.
    changefile readStream fileIn.
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.

    "Created: / 20-11-2012 / 14:50:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_03a

    | cs |

    cs := ChangeSet fromStream:'
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''

!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass

' readStream.

    self assert: cs size == 2.
    self assert: cs first  className = 'MockClass'.
    self assert: cs first fullClassName = 'MockClass'.
    self assert: cs second className = 'MockClass::PrivateClass'.
    self assert: cs second fullClassName = 'MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'MockClass') isNil.
    cs apply.
    self assert: (Smalltalk at: #'MockClass') notNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') name == #'MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') isPrivate

    "Created: / 20-11-2012 / 14:54:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 09-05-2013 / 14:41:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_03a_fileIn

    | changefile |

    changefile :='
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''

!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass

' readStream.






    self assert: (Smalltalk at: #'MockClass') isNil.
    changefile readStream fileIn.
    self assert: (Smalltalk at: #'MockClass') notNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') name == #'MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') isPrivate

    "Created: / 20-11-2012 / 14:54:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 09-05-2013 / 14:41:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_03b

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''

!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass

' readStream.

    self assert: cs size == 2.
    self assert: cs first  className = 'MockClass'.
    self assert: cs first  fullClassName = 'Mocks::MockClass'.
    self assert: cs second className = 'MockClass::PrivateClass'.
    self assert: cs second fullClassName = 'Mocks::MockClass::PrivateClass'.
    self assert: cs second nameSpaceName = 'Mocks'.
    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.
    cs apply.
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass') isPrivate not.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') name == #'Mocks::MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') isPrivate

    "Created: / 20-11-2012 / 15:04:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_03b_fileIn

    | changefile |

    changefile :='
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''

!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass

' readStream.







    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.
    changefile readStream fileIn.
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass') isPrivate not.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') name == #'Mocks::MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') isPrivate

    "Created: / 20-11-2012 / 15:04:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_04a

    | cs |

    cs := ChangeSet fromStream:'
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        cs apply.
    ].
    "Responding to a nameSpaceQuerySignal should no longer affect change's namespace.
     Use #nameSpaceOverride: or #applyWithNameSpaceOverride: to apply a change in given 
     namespace "

    self assert: (Smalltalk at: #'MockClass') notNil.
    self assert: (Smalltalk at: #'MockClass') name ==  #'MockClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass') isNil

    "Created: / 20-11-2012 / 15:08:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 04-02-2014 / 20:10:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_04a_fileIn

    | changefile |

    changefile :='
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        changefile readStream fileIn.
    ].
    "Responding to a nameSpaceQuerySignal should no longer affect change's namespace.
     Use #nameSpaceOverride: or #applyWithNameSpaceOverride: to apply a change in given
     namespace "

    self assert: (Smalltalk at: #'MockClass') notNil.
    self assert: (Smalltalk at: #'MockClass') name ==  #'MockClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass') isNil

    "Created: / 20-11-2012 / 15:08:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 04-02-2014 / 20:10:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_04b

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks2 }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        cs apply.
    ].
    "Responding to a nameSpaceQuerySignal should no longer affect change's namespace.
     Use #nameSpaceOverride: or #applyWithNameSpaceOverride: to apply a change in given 
     namespace "

    self assert: (Smalltalk at: #'Mocks2::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks2::MockClass') name ==  #'Mocks2::MockClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.

    "Created: / 20-11-2012 / 15:14:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 04-02-2014 / 20:09:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_04b_fileIn

    | changefile |

    changefile :='
"{ NameSpace: Mocks2 }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        changefile readStream fileIn.
    ].
    "Responding to a nameSpaceQuerySignal should no longer affect change's namespace.
     Use #nameSpaceOverride: or #applyWithNameSpaceOverride: to apply a change in given
     namespace "

    self assert: (Smalltalk at: #'Mocks2::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks2::MockClass') name ==  #'Mocks2::MockClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.

    "Created: / 20-11-2012 / 15:14:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 04-02-2014 / 20:09:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_04c

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        cs apply.
    ].
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass') name ==  #'Mocks::MockClass'.

    "Created: / 20-11-2012 / 15:16:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_04c_fileIn

    | changefile |

    changefile :='
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        changefile readStream fileIn.
    ].
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass') name ==  #'Mocks::MockClass'.

    "Created: / 20-11-2012 / 15:16:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_04d

    | cs |

    cs := ChangeSet fromStream:'
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    cs first nameSpaceOverride: (NameSpace name: #Mocks).
    cs apply.

    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass') name ==  #'Mocks::MockClass'.

    "Created: / 20-11-2012 / 15:21:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_04e

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks2 }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    cs first nameSpaceOverride: (NameSpace name: #Mocks).
    cs apply.

    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass') name ==  #'Mocks::MockClass'.

    "Created: / 20-11-2012 / 15:22:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_05a

    | cs |

    cs := ChangeSet fromStream:'
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass


' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        cs apply.
    ].
    "Responding to a nameSpaceQuerySignal should no longer affect change's namespace.
     Use #nameSpaceOverride: or #applyWithNameSpaceOverride: to apply a change in given 
     namespace "

    self assert: (Smalltalk at: #'MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') name ==  #'MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') isNil.

    "Created: / 20-11-2012 / 15:25:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 04-02-2014 / 20:10:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_05a_fileIn

    | changefile |

    changefile :='
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass


' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        changefile readStream fileIn.
    ].
    "Responding to a nameSpaceQuerySignal should no longer affect change's namespace.
     Use #nameSpaceOverride: or #applyWithNameSpaceOverride: to apply a change in given
     namespace "

    self assert: (Smalltalk at: #'MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') name ==  #'MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') isNil.

    "Created: / 20-11-2012 / 15:25:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 04-02-2014 / 20:10:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_05b

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks2 }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass


' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        cs apply.
    ].
    "Responding to a nameSpaceQuerySignal should no longer affect change's namespace.
     Use #nameSpaceOverride: or #applyWithNameSpaceOverride: to apply a change in given 
     namespace "

    self assert: (Smalltalk at: #'Mocks2::MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'Mocks2::MockClass::PrivateClass') name ==  #'Mocks2::MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') isNil.

    "Created: / 20-11-2012 / 15:26:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 04-02-2014 / 20:11:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_05b_fileIn

    | changefile |

    changefile :='
"{ NameSpace: Mocks2 }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass


' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        changefile readStream fileIn.
    ].
    "Responding to a nameSpaceQuerySignal should no longer affect change's namespace.
     Use #nameSpaceOverride: or #applyWithNameSpaceOverride: to apply a change in given
     namespace "

    self assert: (Smalltalk at: #'Mocks2::MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'Mocks2::MockClass::PrivateClass') name ==  #'Mocks2::MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') isNil.

    "Created: / 20-11-2012 / 15:26:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 04-02-2014 / 20:11:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_05c

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass


' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        cs apply.
    ].
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') name ==  #'Mocks::MockClass::PrivateClass'.

    "Created: / 20-11-2012 / 15:33:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_05c_fileIn

    | changefile |

    changefile :='
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass


' readStream.

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
        changefile readStream fileIn.
    ].
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') name ==  #'Mocks::MockClass::PrivateClass'.

    "Created: / 20-11-2012 / 15:33:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_05d

    | cs |

    cs := ChangeSet fromStream:'
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass


' readStream.

    cs first nameSpaceOverride: (NameSpace name: #Mocks).
    cs second nameSpaceOverride: (NameSpace name: #Mocks).
    cs apply.

    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') name ==  #'Mocks::MockClass::PrivateClass'.

    "Created: / 20-11-2012 / 15:26:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_05e

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks2 }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass


' readStream.

    cs first  nameSpaceOverride: (NameSpace name: #Mocks).
    cs second nameSpaceOverride: (NameSpace name: #Mocks).
    cs apply.

    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') name ==  #'Mocks::MockClass::PrivateClass'.

    "Created: / 20-11-2012 / 15:26:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_06a
    | cs |

    "Test nil superclass"

    cs := ChangeSet fromStream:'
nil subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    cs apply.

    self assert: (Smalltalk at: #MockClass) superclass isNil

    "Created: / 10-06-2013 / 16:48:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_06a_fileIn
    | changefile |

    "Test nil superclass"

    changefile :='
nil subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
' readStream.

    changefile readStream fileIn.

    self assert: (Smalltalk at: #MockClass) superclass isNil

    "Created: / 10-06-2013 / 16:48:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_07a
    | cs |

    "Test nil superclass"

    cs := ChangeSet fromStream:'
Object subclass:#ExistingPrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:RegressionTests::ChangeSetTests     
' readStream.


    self assert: cs size == 1.
    self assert: cs anElement isClassDefinitionChange.
    self assert: cs anElement changeClass == ExistingPrivateClass.

    "Created: / 12-11-2013 / 17:53:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_07b
    | cs |

    "Test nil superclass"

    cs := ChangeSet fromStream:'
"{ NameSpace: RegressionTests }"

Object subclass:#ExistingPrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:ChangeSetTests     
' readStream.


    self assert: cs size == 1.
    self assert: cs anElement isClassDefinitionChange.
    self assert: cs anElement changeClass == ExistingPrivateClass.

    "Created: / 12-11-2013 / 17:54:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_08a
    | cs |

    "Test nil superclass"

    cs := ChangeSet fromStream:'
"{ NameSpace: RegressionTests }"

TestCase subclass:#ChangeSetTests
        instanceVariableNames:''classes''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-System-Changes''      
' readStream.


    self assert: cs size == 1.
    self assert: cs anElement isClassDefinitionChange.
    self assert: cs anElement changeClass == ChangeSetTests.
    self assert: cs anElement delta == #'='

    "Created: / 13-11-2013 / 17:41:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_08b
    | cs |

    "Test nil superclass"

    cs := ChangeSet fromStream:'
"{ NameSpace: RegressionTests }"

TestCase subclass:#ChangeSetTests
        instanceVariableNames:''classes someMoreData''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-System-Changes''      
' readStream.


    self assert: cs size == 1.
    self assert: cs anElement isClassDefinitionChange.
    self assert: cs anElement delta == #'~'

    "Created: / 13-11-2013 / 17:43:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_08c
    | cs |

    "Test nil superclass"

    cs := ChangeSet fromStream:'
"{ NameSpace: RegressionTests }"

Object subclass:#ExistingPrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:ChangeSetTests     
' readStream.


    self assert: cs size == 1.
    self assert: cs anElement isClassDefinitionChange.
    self assert: cs anElement delta == #'='

    "Created: / 13-11-2013 / 17:44:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_08d
    | cs |

    "Test nil superclass"

    cs := ChangeSet fromStream:'
"{ NameSpace: RegressionTests }"

Object subclass:#ExistingPrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''somePool''
        privateIn:ChangeSetTests     
' readStream.


    self assert: cs size == 1.
    self assert: cs anElement isClassDefinitionChange.
    self assert: cs anElement delta == #'~'

    "Created: / 13-11-2013 / 17:44:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_08e
    | cs |

    "Test nil superclass"

    cs := ChangeSet fromStream:'
"{ NameSpace: RegressionTests }"

TestCase subclass:#ChangeSetTests2
        instanceVariableNames:''classes someMoreData''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-System-Changes''      
' readStream.


    self assert: cs size == 1.
    self assert: cs anElement isClassDefinitionChange.
    self assert: cs anElement delta == #'+'

    "Created: / 13-11-2013 / 17:44:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassDefinitionChange_08f
    | cs |

    "Test nil superclass"

    cs := ChangeSet fromStream:'
"{ NameSpace: RegressionTests }"

Object subclass:#ExistingPrivateClass2
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:ChangeSetTests     
' readStream.


    self assert: cs size == 1.
    self assert: cs anElement isClassDefinitionChange.
    self assert: cs anElement delta == #'+'

    "Created: / 13-11-2013 / 17:44:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests methodsFor:'tests - ClassInitializeChange'!

test_ClassInitializeChange_01

    | cs |

    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:'MockVar'
        poolDictionaries:''
        category:'tests-Regression-Mocks'.
    (Smalltalk at: #MockClass) class
        compile: 'initialize MockVar := 1234';
        compile: 'mockVar ^MockVar'.

    cs := ChangeSet fromStream:'
MockClass initialize!!

' readStream.

    self assert: cs size == 1.
    self assert: cs first class == ClassInitializeChange.
    self assert: cs first className = 'MockClass'.

    self assert: (Smalltalk at: #MockClass) mockVar isNil.
    cs apply.
    self assert: (Smalltalk at: #MockClass) mockVar == 1234.

    "Created: / 21-03-2014 / 17:48:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassInitializeChange_02

    | cs |

    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:'MockVar'
        poolDictionaries:''
        category:'tests-Regression-Mocks'.

    Object subclass:#PrivateClass
        instanceVariableNames:''
        classVariableNames:'MockVar'
        poolDictionaries:''
        privateIn:(Smalltalk at: #'MockClass').

    (Smalltalk at: #'MockClass::PrivateClass') class
        compile: 'initialize MockVar := 1234';
        compile: 'mockVar ^MockVar'.

    cs := ChangeSet fromStream:'
MockClass::PrivateClass initialize!!

' readStream.

    self assert: cs size == 1.
    self assert: cs first class == ClassInitializeChange.
    self assert: cs first className = 'MockClass::PrivateClass'.

    self assert: (Smalltalk at: #'MockClass::PrivateClass') mockVar isNil.
    cs apply.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') mockVar == 1234.

    "Created: / 21-03-2014 / 18:04:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassInitializeChange_03a

    | cs |

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:'MockVar'
        poolDictionaries:''
        category:'tests-Regression-Mocks'.
    ].
    (Smalltalk at: #'Mocks::MockClass') class
        compile: 'initialize MockVar := 1234';
        compile: 'mockVar ^MockVar'.


    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

MockClass initialize!!

' readStream.

    self assert: cs size == 1.
    self assert: cs first class == ClassInitializeChange.
    self assert: cs first className = 'MockClass'.
    self assert: cs first fullClassName = 'Mocks::MockClass'.

    self assert: (Smalltalk at: #'Mocks::MockClass') mockVar isNil.
    cs apply.
    self assert: (Smalltalk at: #'Mocks::MockClass') mockVar == 1234.

    "Created: / 21-03-2014 / 18:02:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassInitializeChange_03b

    | cs |

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:'MockVar'
        poolDictionaries:''
        category:'tests-Regression-Mocks'.
    ].
    (Smalltalk at: #'Mocks::MockClass') class
        compile: 'initialize MockVar := 1234';
        compile: 'mockVar ^MockVar'.


    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

!!
!!MockClass methodsFor:''methods''!!

foo     

!! !!

MockClass initialize!!

' readStream.

    self assert: cs size == 2.
    self assert: cs second class == ClassInitializeChange.
    self assert: cs second className = 'MockClass'.
    self assert: cs second fullClassName = 'Mocks::MockClass'.

    self assert: (Smalltalk at: #'Mocks::MockClass') mockVar isNil.
    cs apply.
    self assert: (Smalltalk at: #'Mocks::MockClass') mockVar == 1234.

    "Created: / 21-03-2014 / 18:04:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassInitializeChange_04a

    | cs |

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:'MockVar'
        poolDictionaries:''
        category:'tests-Regression-Mocks'.

    Object subclass:#PrivateClass
        instanceVariableNames:''
        classVariableNames:'MockVar'
        poolDictionaries:''
        privateIn:(Smalltalk at: #'Mocks::MockClass').  

    ].
    (Smalltalk at: #'Mocks::MockClass::PrivateClass') class
        compile: 'initialize MockVar := 1234';
        compile: 'mockVar ^MockVar'.


    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

MockClass::PrivateClass initialize!!

' readStream.

    self assert: cs size == 1.
    self assert: cs first class == ClassInitializeChange.
    self assert: cs first className = 'MockClass::PrivateClass'.
    self assert: cs first fullClassName = 'Mocks::MockClass::PrivateClass'.

    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') mockVar isNil.
    cs apply.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') mockVar == 1234.

    "Created: / 21-03-2014 / 18:09:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassInitializeChange_04b

    | cs |

    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:'MockVar'
        poolDictionaries:''
        category:'tests-Regression-Mocks'.

    Object subclass:#PrivateClass
        instanceVariableNames:''
        classVariableNames:'MockVar'
        poolDictionaries:''
        privateIn:(Smalltalk at: #'Mocks::MockClass').  

    ].
    (Smalltalk at: #'Mocks::MockClass::PrivateClass') class
        compile: 'initialize MockVar := 1234';
        compile: 'mockVar ^MockVar'.


    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

!!
!!MockClass methodsFor:''methods''!!

foo   

!! !!

MockClass::PrivateClass initialize!!

' readStream.

    self assert: cs size == 2.
    self assert: cs second class == ClassInitializeChange.
    self assert: cs second className = 'MockClass::PrivateClass'.
    self assert: cs second fullClassName = 'Mocks::MockClass::PrivateClass'.

    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') mockVar isNil.
    cs apply.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') mockVar == 1234.

    "Created: / 21-03-2014 / 18:09:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_ClassInitializeChange_05
    | cs1 cs2 diff |

    cs1 := ChangeSet fromStream:'
MockClass initialize!!

' readStream.

    cs2 := ChangeSet fromStream:'
MockClass initialize!!

' readStream.

    diff := cs1 diffSetsAgainst:cs2.

    self assert: diff changed isEmpty.
    self assert: diff onlyInReceiver isEmpty.
    self assert: diff onlyInArg isEmpty.

    "Created: / 26-03-2014 / 17:37:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests methodsFor:'tests - MethodDefinitionChange'!

test_MethodDefinitionChange_01

    | cs |

    cs := ChangeSet fromStream:'
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

!!MockClass methodsFor:''methods''!!

foo

!! !!

' readStream.

    self assert: cs size == 2.
    self assert: cs second className = 'MockClass'.
    self assert: cs second fullClassName = 'MockClass'.
    self assert: (Smalltalk at: #MockClass) isNil.
    cs apply.
    self assert: (Smalltalk at: #MockClass) notNil.
    self assert:((Smalltalk at: #MockClass) methodDictionary includesKey: #foo)

    "Created: / 01-05-2013 / 09:40:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_01_fileIn

    | changefile |

    changefile :='
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

!!MockClass methodsFor:''methods''!!

foo

!! !!

' readStream.

    self assert: (Smalltalk at: #MockClass) isNil.
    changefile readStream fileIn.
    self assert: (Smalltalk at: #MockClass) notNil.
    self assert:((Smalltalk at: #MockClass) methodDictionary includesKey: #foo)

    "Created: / 01-05-2013 / 09:40:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified (format): / 06-03-2014 / 17:04:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_02

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

!!MockClass methodsFor:''methods''!!

foo

!! !!

' readStream.

    self assert: cs size == 2.
    self assert: cs second className = 'MockClass'.
    self assert: cs second fullClassName = 'Mocks::MockClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.
    cs apply.
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert:((Smalltalk at: #'Mocks::MockClass') methodDictionary includesKey: #foo)

    "Created: / 01-05-2013 / 09:42:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_02_fileIn

    | changefile |

    changefile :='
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

!!MockClass methodsFor:''methods''!!

foo

!! !!

' readStream.

    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.
    changefile readStream fileIn.
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert:((Smalltalk at: #'Mocks::MockClass') methodDictionary includesKey: #foo)

    "Created: / 01-05-2013 / 09:42:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified (format): / 06-03-2014 / 17:04:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_02a
    "Tests whether all method changes have package properly set when reading
     extension container"

    | cs |                                       

    cs := ChangeSet fromStream:'"{ Package: ''stx:libtool'' }"!!

!!AbstractSyntaxHighlighter class methodsFor:''api highlighting''!!

formatExpression:aString in:aClass elementsInto:elementsCollection

    ^self formatExpression:aString in:aClass

!! !!

!!AbstractSyntax class methodsFor:''xxx highlighting''!!

xxx:aString in:aClass elementsInto:elementsCollection

    ^self formatExpression:aString in:aClass

!! !!

' readStream.

    self assert: cs size = 2.
    self assert: cs first package = 'stx:libtool'.
    self assert: cs second package = 'stx:libtool'.

    "Created: / 29-01-2013 / 19:05:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 30-01-2013 / 10:09:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_03a

    | cs |

    cs := ChangeSet fromStream:'
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass
!!

!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
' readStream.

    self assert: cs size == 3.
    self assert: cs third className = 'MockClass::PrivateClass'.
    self assert: cs third fullClassName = 'MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'MockClass') isNil.
    cs apply.
    self assert:((Smalltalk at: #'MockClass::PrivateClass') methodDictionary includesKey: #foo)

    "Created: / 01-05-2013 / 09:50:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 09-05-2013 / 15:18:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_03a_fileIn

    | changefile |

    changefile :='
Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass
!!

!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
' readStream.




    self assert: (Smalltalk at: #'MockClass') isNil.
    changefile readStream fileIn.
    self assert:((Smalltalk at: #'MockClass::PrivateClass') methodDictionary includesKey: #foo)

    "Created: / 01-05-2013 / 09:50:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 09-05-2013 / 15:18:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_03b

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass
!!

!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
' readStream.

    self assert: cs size == 3.
    self assert: cs third className = 'MockClass::PrivateClass'.
    self assert: cs third fullClassName = 'Mocks::MockClass::PrivateClass'.
    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.
    cs apply.
    self assert:((Smalltalk at: #'Mocks::MockClass::PrivateClass') methodDictionary includesKey: #foo)

    "Created: / 01-05-2013 / 09:52:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"

!

test_MethodDefinitionChange_03b_fileIn

    | changefile |

    changefile :='
"{ NameSpace: Mocks }"

Object subclass:#MockClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        category:''tests-Regression-Mocks''
!!

Object subclass:#PrivateClass
        instanceVariableNames:''''
        classVariableNames:''''
        poolDictionaries:''''
        privateIn:MockClass
!!

!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
' readStream.




    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.
    changefile readStream fileIn.
    self assert:((Smalltalk at: #'Mocks::MockClass::PrivateClass') methodDictionary includesKey: #foo)

    "Created: / 01-05-2013 / 09:52:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"

!

test_MethodDefinitionChange_04a

    | cs |

    cs := ChangeSet fromStream:'
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
' readStream.

    self assert: cs size == 1.
    self assert: cs first className = 'MockClass::PrivateClass'.
    self assert: cs first fullClassName = 'MockClass::PrivateClass'.

    "Created: / 06-03-2014 / 10:50:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_04a_fileIn

    | changefile |

    self assert: (Smalltalk at: #'MockClass') isNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') isNil.


    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:''
        poolDictionaries:''
        category:'tests-Regression-System-Changes'.

    Object subclass: #PrivateClass
        instanceVariableNames: ''
        classVariableNames: ''
        poolDictionaries: ''
        privateIn: (Smalltalk at: #'MockClass').


    changefile :='
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
' readStream.
    changefile readStream fileIn.  

    self assert: (Smalltalk at: #'MockClass') notNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') notNil.
    self assert: ((Smalltalk at: #'MockClass::PrivateClass') methodDictionary includesKey:#foo)

    "Created: / 06-03-2014 / 10:50:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 06-03-2014 / 17:11:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_04b

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks }"

!!
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
' readStream.

    self assert: cs size == 1.
    self assert: cs first className = 'MockClass::PrivateClass'.
    self assert: cs first fullClassName = 'Mocks::MockClass::PrivateClass'.

    "Created: / 06-03-2014 / 10:50:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_04b_fileIn

    | changefile |

    self assert: (Smalltalk at: #'Mocks::MockClass') isNil.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') isNil.

    Class nameSpaceQuerySignal answer: (NameSpace name: #'Mocks') do:[

    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:''
        poolDictionaries:''
        category:'tests-Regression-System-Changes'.

    Object subclass: #PrivateClass
        instanceVariableNames: ''
        classVariableNames: ''
        poolDictionaries: ''
        privateIn: (Smalltalk at: #'Mocks::MockClass').
    ].


    changefile :='
"{ NameSpace: Mocks }"

!!       
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
' readStream.
    changefile readStream fileIn.  

    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') notNil.
    self assert: ((Smalltalk at: #'Mocks::MockClass::PrivateClass') methodDictionary includesKey:#foo)

    "Created: / 06-03-2014 / 10:50:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 06-03-2014 / 17:10:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_05a

    | cs |

    cs := ChangeSet fromStream:'
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
"{ NameSpace: Mocks }"

!!
!!MockClass2::PrivateClass methodsFor:''methods''!!

bar

!! !!       

' readStream.

    self assert: cs size == 2.
    self assert: cs first className = 'MockClass::PrivateClass'.
    self assert: cs first fullClassName = 'MockClass::PrivateClass'.
    self assert: cs second className = 'MockClass2::PrivateClass'.
    self assert: cs second fullClassName = 'Mocks::MockClass2::PrivateClass'.

    "Created: / 06-03-2014 / 10:51:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_05a_fileIn

    | changefile |

    self assert: (Smalltalk at: #'MockClass') isNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') isNil.


    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:''
        poolDictionaries:''
        category:'tests-Regression-System-Changes'.

    Object subclass: #PrivateClass
        instanceVariableNames: ''
        classVariableNames: ''
        poolDictionaries: ''
        privateIn: (Smalltalk at: #'MockClass').      

    Class nameSpaceQuerySignal answer: (NameSpace name: #'Mocks') do:[

    Object subclass:#MockClass2
        instanceVariableNames:''
        classVariableNames:''
        poolDictionaries:''
        category:'tests-Regression-System-Changes'.

    Object subclass: #PrivateClass
        instanceVariableNames: ''
        classVariableNames: ''
        poolDictionaries: ''
        privateIn: (Smalltalk at: #'Mocks::MockClass2').
    ].             

    changefile :='
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
"{ NameSpace: Mocks }"

!!
!!MockClass2::PrivateClass methodsFor:''methods''!!

bar

!! !!

' readStream.

    changefile readStream fileIn.
     self assert: (Smalltalk at: #'MockClass') notNil.
    self assert: (Smalltalk at: #'MockClass::PrivateClass') notNil.
    self assert: ((Smalltalk at: #'MockClass::PrivateClass') methodDictionary includesKey:#foo).
    self assert: (Smalltalk at: #'Mocks::MockClass2') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass2::PrivateClass') notNil.
    self assert: ((Smalltalk at: #'Mocks::MockClass2::PrivateClass') methodDictionary includesKey:#bar)

    "Created: / 06-03-2014 / 10:51:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 06-03-2014 / 17:16:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_05b

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks2 }"

!!
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
"{ NameSpace: Mocks }"

!!
!!MockClass2::PrivateClass methodsFor:''methods''!!

bar

!! !!       

' readStream.

    self assert: cs size == 2.
    self assert: cs first className = 'MockClass::PrivateClass'.
    self assert: cs first fullClassName = 'Mocks2::MockClass::PrivateClass'.
    self assert: cs second className = 'MockClass2::PrivateClass'.
    self assert: cs second fullClassName = 'Mocks::MockClass2::PrivateClass'.

    "Created: / 06-03-2014 / 10:53:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_05b_fileIn

    | changefile |

    Class nameSpaceQuerySignal answer: (NameSpace name: #'Mocks2') do:[

    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:''
        poolDictionaries:''
        category:'tests-Regression-System-Changes'.

    Object subclass: #PrivateClass
        instanceVariableNames: ''
        classVariableNames: ''
        poolDictionaries: ''
        privateIn: (Smalltalk at: #'Mocks2::MockClass').      

    ].

    Class nameSpaceQuerySignal answer: (NameSpace name: #'Mocks') do:[

    Object subclass:#MockClass2
        instanceVariableNames:''
        classVariableNames:''
        poolDictionaries:''
        category:'tests-Regression-System-Changes'.

    Object subclass: #PrivateClass
        instanceVariableNames: ''
        classVariableNames: ''
        poolDictionaries: ''
        privateIn: (Smalltalk at: #'Mocks::MockClass2').
    ].             


    changefile :='
"{ NameSpace: Mocks2 }"

!!
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
"{ NameSpace: Mocks }"

!!
!!MockClass2::PrivateClass methodsFor:''methods''!!

bar

!! !!

' readStream.

    changefile readStream fileIn.

    self assert: (Smalltalk at: #'Mocks2::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks2::MockClass::PrivateClass') notNil.
    self assert: ((Smalltalk at: #'Mocks2::MockClass::PrivateClass') methodDictionary includesKey:#foo).
    self assert: (Smalltalk at: #'Mocks::MockClass2') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass2::PrivateClass') notNil.
    self assert: ((Smalltalk at: #'Mocks::MockClass2::PrivateClass') methodDictionary includesKey:#bar)

    "Created: / 06-03-2014 / 10:53:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 06-03-2014 / 17:22:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_05c

    | cs |

    cs := ChangeSet fromStream:'
"{ NameSpace: Mocks2 }"

!!
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
"{ NameSpace: Smalltalk }"

!!
!!MockClass2::PrivateClass methodsFor:''methods''!!

bar

!! !!       

' readStream.

    self assert: cs size == 2.
    self assert: cs first className = 'MockClass::PrivateClass'.
    self assert: cs first fullClassName = 'Mocks2::MockClass::PrivateClass'.
    self assert: cs second className = 'MockClass2::PrivateClass'.
    self assert: cs second fullClassName = 'MockClass2::PrivateClass'.

    "Created: / 06-03-2014 / 10:54:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_05c_fileIn

    | changefile |

    Class nameSpaceQuerySignal answer: (NameSpace name: #'Mocks2') do:[

    Object subclass:#MockClass
        instanceVariableNames:''
        classVariableNames:''
        poolDictionaries:''
        category:'tests-Regression-System-Changes'.

    Object subclass: #PrivateClass
        instanceVariableNames: ''
        classVariableNames: ''
        poolDictionaries: ''
        privateIn: (Smalltalk at: #'Mocks2::MockClass').      
    ].             

    Object subclass:#MockClass2
        instanceVariableNames:''
        classVariableNames:''
        poolDictionaries:''
        category:'tests-Regression-System-Changes'.

    Object subclass: #PrivateClass
        instanceVariableNames: ''
        classVariableNames: ''
        poolDictionaries: ''
        privateIn: (Smalltalk at: #'MockClass2').

 

    changefile :='
"{ NameSpace: Mocks2 }"

!!
!!MockClass::PrivateClass methodsFor:''methods''!!

foo

!! !!
"{ NameSpace: Smalltalk }"

!!
!!MockClass2::PrivateClass methodsFor:''methods''!!

bar

!! !!

' readStream.

    changefile readStream fileIn.
    self assert: (Smalltalk at: #'Mocks2::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks2::MockClass::PrivateClass') notNil.
    self assert: ((Smalltalk at: #'Mocks2::MockClass::PrivateClass') methodDictionary includesKey:#foo).
    self assert: (Smalltalk at: #'MockClass2') notNil.
    self assert: (Smalltalk at: #'MockClass2::PrivateClass') notNil.
    self assert: ((Smalltalk at: #'MockClass2::PrivateClass') methodDictionary includesKey:#bar)

    "Created: / 06-03-2014 / 10:54:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 06-03-2014 / 17:25:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_jextension_01a
    "Tests Java extensios - used by stx:libjava (see stx/libjava/java/extensions/**/*.st"

    | cs |                                       

    cs := ChangeSet fromStream:'
!!(Java classForName:''java.lang.Long'') class methodsFor:''queries''!!

javaWrap: object
        |inst|
    inst := self basicNew.
    inst perform: #''<init>(J)V'' with: object with: nil.
        ^ inst.
!! !!
' readStream.

    self assert: cs size == 1.

    "Created: / 01-05-2013 / 17:38:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_MethodDefinitionChange_jextension_01b
    "Tests Java extensios - used by stx:libjava (see stx/libjava/java/extensions/**/*.st"

    | cs |                                       

    cs := ChangeSet fromStream:'
!!(Java classForName:''java.lang.Long'') methodsFor:''queries''!!

javaWrap: object
        |inst|
    inst := self basicNew.
    inst perform: #''<init>(J)V'' with: object with: nil.
        ^ inst.
!! !!
' readStream.

    self assert: cs size == 1.

    "Created: / 01-05-2013 / 17:38:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests methodsFor:'tests - utf8'!

test_reading_utf8_01
    "
    Test reading of changeset with non-ASCII/non-ISO8859-1 chars
    "
    | file cs |

    file := (Smalltalk getPackageDirectoryForPackage: self class package) / 'testData' / 'packages' / 'p1utf8' / 'ProjectDefinitionTestsP1UTF8Bar.st'.
    self assert: file exists.
    "
    file contents asString
    "
    cs := ChangeSet fromFile: file.
    self assert: cs size == 4.
    self assert: (cs second source size = 127).
    self assert: (cs second source includesString: 'Příliš žluťoučký kůň úpěl ďábelské ódy').

    "Created: / 26-03-2013 / 09:54:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified (comment): / 04-02-2014 / 20:24:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_reading_utf8_02
    "
    Test reading of changeset with non-ASCII/non-ISO8859-1 chars from non-positionable stream
    "
    | file stream cs |

    file := (Smalltalk getPackageDirectoryForPackage: self class package) / 'testData' / 'packages' / 'p1utf8' / 'ProjectDefinitionTestsP1UTF8Bar.st'.
    self assert: file exists.
    "
    file contents asString
    "
    stream := NonPositionableReadWriteStream with: file contents asString.
    cs := ChangeSet fromStream: stream.
    self assert: cs size == 4.
    self assert: (cs second source size = 127).
    self assert: (cs second source includesString: 'Příliš žluťoučký kůň úpěl ďábelské ódy').

    "Created: / 14-03-2014 / 15:42:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_write_utf8_01
    | cs output expected got |

    cs := ChangeSet forExistingClass: ChangeSetTests::ExistingPrivateClass.
    output := String streamContents:[ :s | cs saveToStream: s  format: nil ].
    got := output asStringCollection first.

    expected := '"{ Encoding: utf8 }"'.

    self assert: expected = got.

    "Created: / 04-02-2014 / 12:10:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 04-02-2014 / 20:13:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests::ExistingPrivateClass methodsFor:'methods'!

bar
    ^ 'Příliš žluťoučký kůň úpěl ďábelské ódy'

    "Created: / 04-02-2014 / 11:43:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

foo
    ^ self bar

    "Created: / 04-02-2014 / 11:43:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests::NonPositionableReadWriteStream methodsFor:'positioning'!

position
    "{ Pragma: +optSpace }"

    "catch position - there is none here"

    ^ self positionError
!

position:aPosition
    "{ Pragma: +optSpace }"

    "catch position - there is none here"

    ^ self positionError
!

skip:numberToSkip
    "skip count bytes/characters, return the receiver.
     Re-redefined since PositionableStream redefined it."

    "don't know how to unread ..."
    numberToSkip < 0 ifTrue:[
        PositionError raiseRequest.
        ^ self
    ].
    numberToSkip timesRepeat:[self next].

    "Modified: / 30.7.1999 / 12:42:12 / cg"
! !

!ChangeSetTests::NonPositionableReadWriteStream methodsFor:'testing'!

isPositionable
    ^ false

    "Created: / 14-03-2014 / 16:21:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ChangeSetTests class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !