From VisualWorks® Personal Use Edition, Pre-Release 7.10.1 (aug13.1) of August 1, 2013 on December 5, 2013 at 3:40:44 PM
Assignment5Tests package
Assignment5Tests package
packageName 'Assignment5Tests'
Assignment5Tests package
parcelName 'Assignment5Tests'
TestsForSudentCode
Smalltalk
SUnit.TestCase
false
none
Assignment5Tests
TestsForSudentCode
The following comment was copied from the original comments of BankAccountSampleTests
==========================================================
TestsForSudentCode test data
cashDepositsWithdrawals
"The \ characters are converted to tabs when data is written to file"
^'1\', (self today - 3 days) printString ,'\NewAccount\Roger Whitney\Normal\$10.00
3\', (self today - 2 days) printString ,'\Deposit\Cash\$30.00
4\', (self today - 1 days) printString ,'\Withdrawal\$15.00'.
overdraftNormal
"The \ characters are converted to tabs when data is written to file"
^'9\', (self today - 15 days) printString ,' \NewAccount\Roger Whitney\Normal\$100.00
4\', (self today - 4 days) printString ,'\Withdrawal\$150.00'.
wrongOrder
"The \ characters are converted to tabs when data is written to file"
^'9\', (self today - 3 days) printString ,' \NewAccount\Roger Whitney\Normal\$10.00
4\', (self today - 1 days) printString ,'\Withdrawal\$15.00
3\', (self today - 2 days) printString ,'\Deposit\Cash\$30.00'.
cancelCheckDeposit
"The \ characters are converted to tabs when data is written to file"
^'9\', (self today - 15 days) printString ,'\NewAccount\Roger Whitney\Normal\$100.00
5\', (self today - 10 days) printString ,' \Deposit\Check\2\$10.00
8\', (self today - 9 days) printString ,'\Cancel\5'.
futureAction
"The \ characters are converted to tabs when data is written to file"
^'9\', (self today - 5 days) printString ,'\NewAccount\Roger Whitney\Normal\$100.00
2\', (self today - 2 days) printString ,'\Deposit\Check\3\$20.00
4\', (self today - 1 days) printString ,'\Withdrawal\$15.00'.
dataFiles
^#( 'simpleCreate' 'cashDepositsWithdrawals' 'wrongOrder' 'checkDeposits' 'futureAction' 'overdraftNormal' 'overdraftPreferred' 'cancelCheckDeposit')
simpleCreate
^'1\' , (self today - 2 days) printString
, '\NewAccount\Roger Whitney\Normal\$10.00' replaceAll: $\
with: Character tab
overdraftPreferred
"The \ characters are converted to tabs when data is written to file"
^'9\', (self today - 15 days) printString ,' \NewAccount\Roger Whitney\Preferred\$100.00
4\', (self today - 4 days) printString ,'\Withdrawal\$200.00
5\', (self today - 1 days) printString ,'\Withdrawal\$1000.00'.
checkDeposits
"The \ characters are converted to tabs when data is written to file"
^'9\', (self today - 15 days) printString ,'\NewAccount\Roger Whitney\Normal\$100.00
5\', (self today - 10 days) printString ,'\Deposit\Check\2\$10.00
2\', (self today - 6 days) printString ,'\Deposit\Check\5\$20.00
7\', (self today - 5 days) printString ,'\Deposit\Cash\$30.00
4\', (self today - 4 days) printString ,'\Withdrawal\$15.00'.
TestsForSudentCode initialize-release
tearDown
self dataFiles do:
[:each |
| file |
file := each asFilename.
file exists ifTrue: [file delete]]
TestsForSudentCode Currency tests
testAdd
| sum |
sum := Currency fromString: '0.00'.
1000 timesRepeat: [
sum := sum + (Currency fromString: '0.33')].
self assert: sum = (Currency fromString: '330.00')
testSubtactALot
| sum |
sum := Currency fromString: '330.00'.
1000 timesRepeat: [
sum := sum - (Currency fromString: '0.33')].
self assert: sum = (Currency fromString: '0.00')
testSubtract
| a b difference |
a := Currency fromString: '1.00'.
b := Currency fromNumber: 3.00.
difference := b - a.
self assert: difference = (Currency fromString: '2.00')
testCompare
| small middle larger |
small := Currency fromString: '1.00'.
middle := Currency fromString: '1.01'.
larger := Currency fromString: '1.02'.
self deny: small = middle.
self
assert: small < middle;
assert: middle <= larger;
assert: larger > small;
assert: middle >= small
TestsForSudentCode tests
testCancelCheckDepositsAvailableBalance
| account |
self createFile: 'cancelCheckDeposit'.
account := BankAccount fromFile: 'cancelCheckDeposit' asFilename.
self
assert: (account availableBalanceIn: -15 days) = 100 asCurrency;
assert: (account availableBalanceIn: -10 days) = 100 asCurrency;
assert: (account availableBalanceIn: -5 days) = 100 asCurrency.
testOverdraftNormal
| account |
self createFile: 'overdraftNormal'.
account := BankAccount fromFile: 'overdraftNormal' asFilename.
self assert: account balance = (Currency fromString: '95.00')
testCashDepositsWithdrawals
| account |
self createFile: 'cashDepositsWithdrawals'.
account := BankAccount fromFile: 'cashDepositsWithdrawals' asFilename.
self
assert: (account balanceIn: -3 days) = '10.00' asCurrency;
assert: (account balanceIn: -2 days) = '40.00' asCurrency;
assert: (account balanceIn: -0 days) = '25.00' asCurrency
testFutureAction
| account |
self createFile: 'futureAction'.
account := BankAccount fromFile: 'futureAction' asFilename.
self
assert: (account balanceIn: -5 days) = 100 asCurrency;
assert: (account balanceIn: -2 days) = 120 asCurrency;
assert: (account balanceIn: -1 days + 1 minutes) = 105 asCurrency;
assert: (account balanceIn: 5 days ) = 105 asCurrency;
assert: account balance = 105 asCurrency.
testCancelCheckDeposits
| account |
self createFile: 'cancelCheckDeposit'.
account := BankAccount fromFile: 'cancelCheckDeposit' asFilename.
self
assert: (account balanceIn: -15 days) = 100 asCurrency;
assert: (account balanceIn: -10 days) = 110 asCurrency;
assert: (account balanceIn: -9 days + 1 minutes) = 100 asCurrency.
testCheckDepositsAvailableBalance
| account |
self createFile: 'checkDeposits'.
account := BankAccount fromFile: 'checkDeposits' asFilename.
self
assert: (account availableBalanceIn: -15 days) = 100 asCurrency;
assert: (account availableBalanceIn: -9 days) = 100 asCurrency;
assert: (account availableBalanceIn: -8 days) = 110 asCurrency;
assert: (account availableBalanceIn: -6 days + 1 minutes) = 110 asCurrency;
assert: (account availableBalanceIn: -5 days + 1 minutes) = 140 asCurrency;
assert: (account availableBalanceIn: -4 days + 1 minutes) = 125 asCurrency;
assert: account availableBalance = 145 asCurrency
testTwoAccounts
| simpleAccount cashAccount |
self createFile: 'simpleCreate'.
self createFile: 'cashDepositsWithdrawals'.
simpleAccount := BankAccount fromFile: 'simpleCreate' asFilename.
cashAccount := BankAccount fromFile: 'cashDepositsWithdrawals' asFilename.
self
assert: simpleAccount balance = '10.00' asCurrency;
assert: simpleAccount availableBalance = '10.00' asCurrency;
assert: cashAccount balance = '25.00' asCurrency.
self
assert: (cashAccount balanceIn: -3 days) = '10.00' asCurrency;
assert: (cashAccount balanceIn: -2 days) = '40.00' asCurrency;
assert: (cashAccount balanceIn: -1 days) = '25.00' asCurrency;
assert: cashAccount balance = '25.00' asCurrency
testSimpleCreate
| account |
self createFile: 'simpleCreate'.
account := BankAccount fromFile: 'simpleCreate' asFilename.
self
assert: account balance = '10.00' asCurrency;
assert: account availableBalance = '10.00' asCurrency
testCheckDeposits
| account |
self createFile: 'checkDeposits'.
account := BankAccount fromFile: 'checkDeposits' asFilename.
self
assert: (account balanceIn: -15 days) = 100 asCurrency;
assert: (account balanceIn: -9 days) = 110 asCurrency;
assert: (account balanceIn: -6 days + 1 minutes) = 130 asCurrency;
assert: (account balanceIn: -5 days + 1 minutes) = 160 asCurrency;
assert: account balance = 145 asCurrency.
testFileRead
| readStream line |
self createFile: 'simpleCreate'.
readStream := 'simpleCreate' asFilename readStream.
line := readStream upTo: Character tab.
self assert: line = '1'
testCashDepositsWithdrawalsWrongOrder
| account |
self createFile: 'wrongOrder'.
account := BankAccount fromFile: 'wrongOrder' asFilename.
self
assert: (account balanceIn: -3 days) = '10.00' asCurrency;
assert: (account balanceIn: -2 days) = '40.00' asCurrency;
assert: (account balanceIn: -1 days) = '25.00' asCurrency;
assert: account balance = '25.00' asCurrency.
testCashDepositsWithdrawalsWrongOrderAvailableBalance
| account |
self createFile: 'wrongOrder'.
account := BankAccount fromFile: 'wrongOrder' asFilename.
self
assert: (account availableBalanceIn: -3 days) = '10.00' asCurrency;
assert: (account availableBalanceIn: -2 days) = '40.00' asCurrency;
assert: (account availableBalanceIn: -1 days) = '25.00' asCurrency;
assert: account availableBalance = '25.00' asCurrency
testFutureActionAvailableBalance
| account |
self createFile: 'futureAction'.
account := BankAccount fromFile: 'futureAction' asFilename.
self
assert: (account availableBalanceIn: -5 days) = 100 asCurrency;
assert: (account availableBalanceIn: -2 days) = 100 asCurrency;
assert: (account availableBalanceIn: -1 days - 1 minutes) = 100 asCurrency;
assert: (account availableBalanceIn: -1 days) = 85 asCurrency;
assert: (account availableBalanceIn: 1 days + 1 minutes) = 105 asCurrency;
assert: account availableBalance = 85 asCurrency
testOverdraftPreferred
| account |
self createFile: 'overdraftPreferred'.
account := BankAccount fromFile: 'overdraftPreferred' asFilename.
self
assert: (account balanceIn: -2 days) = (Currency fromString: '-100.00');
assert: account balance = (Currency fromString: '-103.00')
TestsForSudentCode private
createFile: aStringName
| file fileWrite contents |
file := aStringName asFilename.
fileWrite := file writeStream.
[contents := self perform: aStringName asSymbol.
contents replaceAll: $\ with: Character tab.
fileWrite nextPutAll: contents]
ensure: [fileWrite close.]
today
^Timestamp now
Core.String error handling
doesNotUnderstand: aMessage
aMessage selector = #asCurrency ifTrue: [^Currency fromString: self].
aMessage selector = #lines ifTrue: [^self tokensBasedOn: Character cr].
aMessage selector = #notContainingCharacter ifTrue: [^nil].
aMessage selector = #onlyDecimal ifTrue: [^nil].
aMessage selector = #upTo: ifTrue: [^self readStream upTo: aMessage arguments first].
super doesNotUnderstand: aMessage
Core.Number error handling
doesNotUnderstand: aMessage
aMessage selector = #asCurrency ifTrue:[^Currency fromNumber: self]
Core.Stream error handling
doesNotUnderstand: aMessage
aMessage selector = #lines ifTrue:[^self contents lines].
aMessage selector = #nextLine ifTrue:[^self upTo: Character cr].
super doesNotUnderstand: aMessage