-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathClassTests.m
107 lines (82 loc) · 3.11 KB
/
ClassTests.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//
// STLogExpressionParserDelegateTests.m
// StoryTeller
//
// Created by Derek Clarkson on 25/06/2015.
// Copyright © 2015 Derek Clarkson. All rights reserved.
//
@import XCTest;
@import ObjectiveC;
@import OCMock;
@import StoryTeller;
@import StoryTeller.Private;
#import "MainClass.h"
#import "SubClass.h"
#import "AProtocol.h"
@interface ClassTests : XCTestCase
@end
@implementation ClassTests {
STLogExpressionParserDelegate *_factory;
id _mockStoryTeller;
}
-(void) setUp {
_factory = [[STLogExpressionParserDelegate alloc] init];
_mockStoryTeller = OCMClassMock([STStoryTeller class]);
}
-(void) testRuntimeConforms {
XCTAssertFalse(class_conformsToProtocol([NSString class], @protocol(NSObject)));
}
#pragma mark - Classes
-(void) testClassMatches {
id<STMatcher> matcher = [_factory parseExpression:@"[NSString]"];
XCTAssertTrue([matcher storyTeller:_mockStoryTeller matches:@"abc"]);
}
-(void) testClassMatchesSwiftName {
// Create a fake class.
Class newClass = objc_allocateClassPair([NSObject class], "MyProject.MyClass", 0);
objc_registerClassPair(newClass);
id obj = [[newClass alloc] init];
id<STMatcher> matcher = [_factory parseExpression:@"[MyProject.MyClass]"];
XCTAssertTrue([matcher storyTeller:_mockStoryTeller matches:obj]);
}
-(void) testClassMatchesSwiftNameWithSpacesInProjectName {
// Create a fake class.
Class newClass = objc_allocateClassPair([NSObject class], "MyProject_Name.MyClass", 0);
objc_registerClassPair(newClass);
id obj = [[newClass alloc] init];
id<STMatcher> matcher = [_factory parseExpression:@"[MyProject_Name.MyClass]"];
XCTAssertTrue([matcher storyTeller:_mockStoryTeller matches:obj]);
}
-(void) testInvalidClassNameFromPointsMaster {
XCTAssertThrowsSpecificNamed([_factory parseExpression:@"Points_Master.Calculator"], NSException, @"StoryTellerParseException");
}
-(void) testClassIsUnknown {
@try {
[_factory parseExpression:@"[Abc]"];
XCTFail(@"Exception not thrown");
}
@catch (NSException *e) {
XCTAssertEqualObjects(@"Invalid expression: [Abc], error: Failed to match next input token", e.description);
}
}
-(void) testClassFailsMatch {
id<STMatcher> matcher = [_factory parseExpression:@"[NSString]"];
XCTAssertFalse([matcher storyTeller:_mockStoryTeller matches:@12]);
}
-(void) testClassFailsMatchWhenDifferentClass {
id<STMatcher> matcher = [_factory parseExpression:@"[NSString]"];
XCTAssertFalse([matcher storyTeller:_mockStoryTeller matches:[NSNumber class]]);
}
-(void) testClassFailsMatchWhenClass {
id<STMatcher> matcher = [_factory parseExpression:@"[NSString]"];
XCTAssertTrue([matcher storyTeller:_mockStoryTeller matches:[NSString class]]);
}
-(void) testIsaClassMatches {
id<STMatcher> matcher = [_factory parseExpression:@"is [MainClass]"];
XCTAssertTrue([matcher storyTeller:_mockStoryTeller matches:[MainClass class]]);
}
-(void) testIsaClassFailsMatch {
id<STMatcher> matcher = [_factory parseExpression:@"is [MainClass]"];
XCTAssertFalse([matcher storyTeller:_mockStoryTeller matches:[NSString class]]);
}
@end