RegressionTests__CharacterTests.st
author Claus Gittinger <cg@exept.de>
Fri, 05 Aug 2011 18:59:31 +0200
changeset 613 572fbd9909a8
parent 612 12959005a2fd
child 1050 c199e5675276
permissions -rw-r--r--
comment/format in: #test01CaseTesting

"{ Package: 'exept:regression' }"

"{ NameSpace: RegressionTests }"

TestCase subclass:#CharacterTests
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression'
!


!CharacterTests methodsFor:'tests'!

test01CaseTesting
    "test lower/uppercase return value for all unicode characters up to 16r1C6FF (i.e. Unicode 3.2)"

    |unicodeDataFile|

    unicodeDataFile := self class packageDirectory construct:'testData/UnicodeData-4.0.0.txt'.

    CharacterEncoderCodeGenerator isNil ifTrue:[
        Smalltalk fileInClass:'CharacterEncoderCodeGenerator' package:'stx:goodies'
    ].

    CharacterEncoderCodeGenerator new
        readingUnicodeDataFrom:(unicodeDataFile readStream)
        do:[:codePoint :name :category :canOrd :bidiCat :decMap
            :decDigitValue :digitValue :numValue
            :mirrored :unicodeName :comment :ucValue :lcValue :tcValue |
                |ch ucCh lcCh tcCh isUppercase isLowercase isTitlecase isLetter dToUc dToLc|

                "/ for now, do not check above 1C6FF (i.e. only Uniode 3.2)
                codePoint <= 16r1C6FF ifTrue:[
                    isUppercase := category = 'Lu'.
                    isLowercase := category = 'Ll'.
                    isTitlecase := category = 'Lt'.
                    isLetter := isUppercase | isLowercase | isTitlecase
                                or:[(category = 'Lm') or:[(category = 'Lo')]].

                    ch := Character value:codePoint.
                    self assert:(ch isUppercase == isUppercase).
                    self assert:(ch isLowercase == isLowercase).
                    "/ self assert:(ch isTitlecase == isTitlecase).
                    self assert:(ch isNationalLetter == isLetter).

                    ucValue notNil ifTrue:[
                        ucCh := Character value:ucValue.
                        self assert:(ch asUppercase = ucCh).
                    ] ifFalse:[
                        self assert:(ch asUppercase = ch).
                    ].
                    lcValue notNil ifTrue:[
                        lcCh := Character value:lcValue.
                        self assert:(ch asLowercase = lcCh).
                    ] ifFalse:[
                        self assert:(ch asLowercase = ch).
                    ].
                    tcValue notNil ifTrue:[
                        tcCh := Character value:tcValue.
                        self assert:(ch asTitlecase = tcCh).
                    ] ifFalse:[
                        self assert:(ch asTitlecase = ch).
                    ].
                ].
        ].

    "
     self new test01CaseTesting
    "

    "Modified (comment): / 05-08-2011 / 18:59:24 / cg"
! !

!CharacterTests class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !