mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 04:12:13 +00:00
122 lines
3.8 KiB
Objective-C
122 lines
3.8 KiB
Objective-C
#import <SenTestingKit/SenTestingKit.h>
|
|
#import "TennisTests.h"
|
|
#import "TennisGame1.h"
|
|
#import "TennisGame2.h"
|
|
#import "TennisGame3.h"
|
|
|
|
@interface TennisTests()
|
|
+ (NSArray*)parameters;
|
|
@end
|
|
|
|
@implementation TennisTests (Parametrized)
|
|
+ (id)defaultTestSuite {
|
|
SenTestSuite *testSuite = [[SenTestSuite alloc] initWithName:NSStringFromClass(self)];
|
|
|
|
NSArray *allScores = [self parameters];
|
|
for (NSArray *scores in allScores) {
|
|
[self addTestWithScores:scores toTestSuite:testSuite];
|
|
}
|
|
|
|
return testSuite;
|
|
}
|
|
+ (void)addTestWithScores:(NSArray *)scores toTestSuite:(SenTestSuite *)testSuite {
|
|
NSArray *testInvocations = [self testInvocations];
|
|
for (NSInvocation *testInvocation in testInvocations) {
|
|
SenTestCase *test = [[TennisTests alloc] initWithInvocation:testInvocation scores:scores];
|
|
[testSuite addTest:test];
|
|
}
|
|
}
|
|
@end
|
|
|
|
@implementation TennisTests {
|
|
int player1Score;
|
|
int player2Score;
|
|
NSString *expectedScore;
|
|
}
|
|
|
|
+ (NSArray*)parameters {
|
|
return @[
|
|
@[ @0, @0, @"Love-All"],
|
|
@[ @1, @1, @"Fifteen-All"],
|
|
@[ @2, @2, @"Thirty-All"],
|
|
@[ @3, @3, @"Forty-All"],
|
|
@[ @4, @4, @"Deuce"],
|
|
|
|
@[ @1, @0, @"Fifteen-Love"],
|
|
@[ @0, @1, @"Love-Fifteen"],
|
|
@[ @2, @0, @"Thirty-Love"],
|
|
@[ @0, @2, @"Love-Thirty"],
|
|
@[ @3, @0, @"Forty-Love"],
|
|
@[ @0, @3, @"Love-Forty"],
|
|
@[ @4, @0, @"Win for player1"],
|
|
@[ @0, @4, @"Win for player2"],
|
|
|
|
@[ @2, @1, @"Thirty-Fifteen"],
|
|
@[ @1, @2, @"Fifteen-Thirty"],
|
|
@[ @3, @1, @"Forty-Fifteen"],
|
|
@[ @1, @3, @"Fifteen-Forty"],
|
|
@[ @4, @1, @"Win for player1"],
|
|
@[ @1, @4, @"Win for player2"],
|
|
|
|
@[ @3, @2, @"Forty-Thirty"],
|
|
@[ @2, @3, @"Thirty-Forty"],
|
|
@[ @4, @2, @"Win for player1"],
|
|
@[ @2, @4, @"Win for player2"],
|
|
|
|
@[ @4, @3, @"Advantage player1"],
|
|
@[ @3, @4, @"Advantage player2"],
|
|
@[ @5, @4, @"Advantage player1"],
|
|
@[ @4, @5, @"Advantage player2"],
|
|
@[ @15, @14, @"Advantage player1"],
|
|
@[ @14, @15, @"Advantage player2"],
|
|
|
|
@[ @6, @4, @"Win for player1"],
|
|
@[ @4, @6, @"Win for player2"],
|
|
@[ @16, @14, @"Win for player1"],
|
|
@[ @14, @16, @"Win for player2"]
|
|
];
|
|
}
|
|
|
|
- (id)initWithInvocation:(NSInvocation *)invocation scores:(NSArray *)scores {
|
|
self = [super initWithInvocation:invocation];
|
|
if (self) {
|
|
player1Score = [scores[0] intValue];
|
|
player2Score = [scores[1] intValue];
|
|
expectedScore = scores[2];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (NSString *)name {
|
|
NSString *parametersDescription = [NSString stringWithFormat:@" (%d,%d,%@)]", player1Score, player2Score, expectedScore];
|
|
return [[super name] stringByReplacingOccurrencesOfString:@"]" withString:parametersDescription];
|
|
}
|
|
|
|
- (void)checkAllScoresForGame:(TennisGame *)game {
|
|
int highestScore = MAX(player1Score, player2Score);
|
|
for (int i = 0; i < highestScore; i++) {
|
|
if (i < player1Score)
|
|
[game wonPoint:@"player1"];
|
|
if (i < player2Score)
|
|
[game wonPoint:@"player2"];
|
|
}
|
|
STAssertEqualObjects([game score], expectedScore, @"");
|
|
}
|
|
|
|
- (void)testAllScoresTennisGame1 {
|
|
TennisGame1 * game = [[TennisGame1 alloc] initWithPlayer1:@"player1" player2:@"player2"];
|
|
[self checkAllScoresForGame:game];
|
|
}
|
|
|
|
- (void)testAllScoresTennisGame2 {
|
|
TennisGame2 * game = [[TennisGame2 alloc] initWithPlayer1:@"player1" player2:@"player2"];
|
|
[self checkAllScoresForGame:game];
|
|
}
|
|
|
|
- (void)testAllScoresTennisGame3 {
|
|
TennisGame3 * game = [[TennisGame3 alloc] initWithPlayer1:@"player1" player2:@"player2"];
|
|
[self checkAllScoresForGame:game];
|
|
}
|
|
|
|
@end
|