RegressionTests__ChangeSetTests.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 30 Apr 2013 12:43:28 +0200
changeset 924 f0ec0d58eebe
parent 912 8705b4ee9a6f
child 925 d7ba2b279ffd
permissions -rw-r--r--
class: RegressionTests::ChangeSetTests added tests for ChangeSet::ClassSourceWriter and java extension source container.

"{ Encoding: utf8 }"

"{ Package: 'exept:regression' }"

"{ NameSpace: RegressionTests }"

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


!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|
        Smalltalk removeClass: each
    ].

    #(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>"
! !

!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'
    "

    "Created: / 30-04-2013 / 11:28:01 / 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_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_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 second className = '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>"
!

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_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.
    ].
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass') name ==  #'Mocks::MockClass'.

    "Created: / 20-11-2012 / 15:08:53 / 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.
    ].
    self assert: (Smalltalk at: #'Mocks::MockClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass') name ==  #'Mocks::MockClass'.

    "Created: / 20-11-2012 / 15:14:45 / 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_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.
    ].
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') notNil.
    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') name ==  #'Mocks::MockClass::PrivateClass'.

    "Created: / 20-11-2012 / 15:25:56 / 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.
    ].
    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:33 / 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_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>"
! !

!ChangeSetTests methodsFor:'tests - MethodDefinitionChange'!

test_MethodDefinitionChange_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: / 25-01-2013 / 20:44:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified (comment): / 30-04-2013 / 11:42:21 / 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.

    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>"
! !

!ChangeSetTests class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
!

version_SVN
    ^ '§Id:: RegressionTests__ChangeSetTests.st 508 2012-11-20 15:55:20Z vranyj1                                                    §'
! !