diff --git a/MonsterCards.xcodeproj/project.pbxproj b/MonsterCards.xcodeproj/project.pbxproj index 75325fe..a256839 100644 --- a/MonsterCards.xcodeproj/project.pbxproj +++ b/MonsterCards.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ E25BD60125036BF8007B04EF /* Language.m in Sources */ = {isa = PBXBuildFile; fileRef = E25BD60025036BF8007B04EF /* Language.m */; }; E25BD60425036CF0007B04EF /* Ability.m in Sources */ = {isa = PBXBuildFile; fileRef = E25BD60325036CF0007B04EF /* Ability.m */; }; E25BD60725036CFA007B04EF /* Action.m in Sources */ = {isa = PBXBuildFile; fileRef = E25BD60625036CFA007B04EF /* Action.m */; }; + E2ECA8F32504AC3300C1FFA5 /* SkillTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E2ECA8F22504AC3300C1FFA5 /* SkillTests.m */; }; E2F7247525005E89007D87ED /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F7247425005E89007D87ED /* AppDelegate.m */; }; E2F7247825005E89007D87ED /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F7247725005E89007D87ED /* SceneDelegate.m */; }; E2F7248125005E89007D87ED /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E2F7247F25005E89007D87ED /* Main.storyboard */; }; @@ -91,6 +92,7 @@ E25BD60525036CFA007B04EF /* Action.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Action.h; sourceTree = ""; }; E25BD60625036CFA007B04EF /* Action.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Action.m; sourceTree = ""; }; E265EE24B2C8E81E1B559306 /* Pods-MonsterCards-MonsterCardsUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MonsterCards-MonsterCardsUITests.debug.xcconfig"; path = "Target Support Files/Pods-MonsterCards-MonsterCardsUITests/Pods-MonsterCards-MonsterCardsUITests.debug.xcconfig"; sourceTree = ""; }; + E2ECA8F22504AC3300C1FFA5 /* SkillTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SkillTests.m; sourceTree = ""; }; E2F7247025005E89007D87ED /* Monster Cards.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Monster Cards.app"; sourceTree = BUILT_PRODUCTS_DIR; }; E2F7247325005E89007D87ED /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; E2F7247425005E89007D87ED /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -283,6 +285,7 @@ E2FD91E72504832A00D5E935 /* DamageTypeTests.m */, E2FD91E9250493C000D5E935 /* LanguageTests.m */, E2FD91EB250496B000D5E935 /* SavingThrowTests.m */, + E2ECA8F22504AC3300C1FFA5 /* SkillTests.m */, ); path = Models; sourceTree = ""; @@ -553,6 +556,7 @@ E2FD91E82504832A00D5E935 /* DamageTypeTests.m in Sources */, E2FD91EC250496B000D5E935 /* SavingThrowTests.m in Sources */, E2FD91E6250481F300D5E935 /* ActionTests.m in Sources */, + E2ECA8F32504AC3300C1FFA5 /* SkillTests.m in Sources */, E2FD91E425047C4400D5E935 /* AbilityTests.m in Sources */, E2F7249625005E8A007D87ED /* MonsterCardsTests.m in Sources */, ); diff --git a/MonsterCards/Models/Skill.m b/MonsterCards/Models/Skill.m index 73c1b51..a7eb595 100644 --- a/MonsterCards/Models/Skill.m +++ b/MonsterCards/Models/Skill.m @@ -10,6 +10,16 @@ @implementation Skill +-(id)init { + self = [super init]; + + self.name = @""; + self.abilityScoreName = @""; + self.notes = @""; + + return self; +} + -(id)initWithName: (NSString*)name abilityScoreName:(NSString*)abilityScoreName andNotes:(NSString*)notes{ self = [super init]; @@ -33,7 +43,8 @@ -(NSString*)textForMonster: (Monster*)monster { int bonus = [self skillBonusForMonster:monster]; - return [NSString stringWithFormat:@"%@%@ %d", [self.name substringToIndex:1], [self.name substringFromIndex:1], bonus]; +// [self.name localizedUppercaseString] + return [NSString stringWithFormat:@"%@%@ %d", [[self.name substringToIndex:1] localizedUppercaseString], [self.name substringFromIndex:1], bonus]; } @end diff --git a/MonsterCardsTests/Models/SkillTests.m b/MonsterCardsTests/Models/SkillTests.m new file mode 100644 index 0000000..a1975ad --- /dev/null +++ b/MonsterCardsTests/Models/SkillTests.m @@ -0,0 +1,106 @@ +// +// SkillTests.m +// MonsterCardsTests +// +// Created by Tom Hicks on 9/5/20. +// Copyright © 2020 Tom Hicks. All rights reserved. +// + +#import +@import OCMockito; +@import OCHamcrest; +#import "Skill.h" + +@interface SkillTests : XCTestCase + +@end + +@implementation SkillTests { + Skill *_skill; + NSString *_name; + NSString *_abilityScoreName; + NSString *_notes; +} + +- (void)setUp { + _skill = [[Skill alloc] init]; + _name = @"pranking"; + _abilityScoreName = @"str"; + _notes = @"some notes"; +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} + +- (void)testDefaultInitializer { + XCTAssertNotNil(_skill); + XCTAssertEqualObjects(@"", _skill.name); + XCTAssertEqualObjects(@"", _skill.abilityScoreName); + XCTAssertEqualObjects(@"", _skill.notes); +} + +- (void)testInitWithNameAbilityScoreNameAndNotes { + _skill = [[Skill alloc] initWithName:_name abilityScoreName:_abilityScoreName andNotes:_notes]; + XCTAssertNotNil(_skill); + XCTAssertEqualObjects(_name, _skill.name); + XCTAssertEqualObjects(_abilityScoreName, _skill.abilityScoreName); + XCTAssertEqualObjects(_notes, _skill.notes); +} + +- (void)testNameGetterAndSetter { + _skill.name = _name; + XCTAssertEqualObjects(_name, _skill.name); +} + +- (void)testAbilityScoreNameGetterAndSetter { + _skill.abilityScoreName = _abilityScoreName; + XCTAssertEqualObjects(_abilityScoreName, _skill.abilityScoreName); +} + +- (void)testNotesGetterAndSetter { + _skill.notes = _notes; + XCTAssertEqualObjects(_notes, _skill.notes); +} + +- (void)testSkillBonusForMonster { + Monster *monster = mock([Monster class]); + [given([monster abilityModifierForAbilityScoreName:_abilityScoreName]) willReturnInt:1]; + stubProperty(monster, proficiencyBonus, @2); + + _skill = [[Skill alloc] initWithName:_name abilityScoreName:_abilityScoreName andNotes:_notes]; + + XCTAssertEqual(3, [_skill skillBonusForMonster:monster]); +} + +- (void)testSkillBonusForMonsterWithExpertise { + Monster *monster = mock([Monster class]); + [given([monster abilityModifierForAbilityScoreName:_abilityScoreName]) willReturnInt:1]; + stubProperty(monster, proficiencyBonus, @2); + + _skill = [[Skill alloc] initWithName:_name abilityScoreName:_abilityScoreName andNotes:@" (ex)"]; + + XCTAssertEqual(5, [_skill skillBonusForMonster:monster]); +} + +- (void)testTextForMonster { + Monster *monster = mock([Monster class]); + [given([monster abilityModifierForAbilityScoreName:_abilityScoreName]) willReturnInt:1]; + stubProperty(monster, proficiencyBonus, @2); + + _skill = [[Skill alloc] initWithName:_name abilityScoreName:_abilityScoreName andNotes:_notes]; + + XCTAssertEqualObjects(@"Pranking 3", [_skill textForMonster:monster]); +} + +- (void)testTextForMonsterWithExpertise { + Monster *monster = mock([Monster class]); + [given([monster abilityModifierForAbilityScoreName:_abilityScoreName]) willReturnInt:1]; + stubProperty(monster, proficiencyBonus, @2); + + _skill = [[Skill alloc] initWithName:_name abilityScoreName:_abilityScoreName andNotes:@" (ex)"]; + + XCTAssertEqualObjects(@"Pranking 5", [_skill textForMonster:monster]); +} + +@end