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
|
#import "MGLStyleLayerTests.h"
#import "NSString+MGLAdditions.h"
#define TEST_STRICT_NAMING_CONVENTIONS 0
@implementation MGLStyleLayerTests {
XCTestExpectation *_styleLoadingExpectation;
}
@dynamic layerType;
- (void)setUp {
[super setUp];
[MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"];
NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"];
self.mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 256, 256) styleURL:styleURL];
self.mapView.delegate = self;
if (!self.mapView.style) {
_styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."];
[self waitForExpectationsWithTimeout:1 handler:nil];
}
}
- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style {
XCTAssertNotNil(mapView.style);
XCTAssertEqual(mapView.style, style);
XCTAssertNil(style.name);
[_styleLoadingExpectation fulfill];
}
- (void)tearDown {
_styleLoadingExpectation = nil;
_mapView = nil;
[super tearDown];
}
- (void)testPropertyName:(NSString *)name isBoolean:(BOOL)isBoolean {
NS_MUTABLE_ARRAY_OF(NSString *) *components = [name componentsSeparatedByString:@"-"].mutableCopy;
if (isBoolean) {
if ([components.firstObject isEqualToString:@"is"]) {
[components removeObjectAtIndex:0];
if (![components.lastObject.lexicalClasses containsObject:NSLinguisticTagAdjective]) {
XCTAssertTrue([components.lastObject.lexicalClasses containsObject:NSLinguisticTagVerb],
@"Boolean getter %@ that starts with “is” should contain an adjective, past participle, or verb.", name);
XCTAssertNotEqualObjects(components.lastObject.lemma, components.lastObject,
@"Boolean getter %@ should not have infinitive, imperative, or present tense verb.", name);
}
} else {
if ([components.firstObject isEqualToString:[self class].layerType]
|| [components.firstObject isEqualToString:@"icon"] || [components.firstObject isEqualToString:@"text"]) {
[components removeObjectAtIndex:0];
}
#if TEST_STRICT_NAMING_CONVENTIONS
XCTAssertTrue([components.firstObject.lexicalClasses containsObject:NSLinguisticTagVerb],
@"Boolean getter %@ that doesn’t start with “is” should contain a verb.", name);
XCTAssertNotEqualObjects(components.firstObject.lemma, components.lastObject);
#endif
}
} else {
XCTAssertFalse([components.firstObject isEqualToString:@"is"]);
#if TEST_STRICT_NAMING_CONVENTIONS
XCTAssertTrue([components.lastObject.lexicalClasses containsObject:NSLinguisticTagNoun],
@"Non-Boolean getter %@ should contain a noun.", name);
#endif
}
}
@end
@implementation NSString (MGLStyleLayerTestAdditions)
- (NS_ARRAY_OF(NSString *) *)lexicalClasses {
NSOrthography *orthography = [NSOrthography orthographyWithDominantScript:@"Latn"
languageMap:@{@"Latn": @[@"en"]}];
NSLinguisticTaggerOptions options = (NSLinguisticTaggerOmitPunctuation
| NSLinguisticTaggerOmitWhitespace
| NSLinguisticTaggerOmitOther);
return [self linguisticTagsInRange:self.mgl_wholeRange
scheme:NSLinguisticTagSchemeLexicalClass
options:options
orthography:orthography
tokenRanges:NULL];
}
- (NSString *)lemma {
NSOrthography *orthography = [NSOrthography orthographyWithDominantScript:@"Latn"
languageMap:@{@"Latn": @[@"en"]}];
NSLinguisticTaggerOptions options = (NSLinguisticTaggerOmitPunctuation
| NSLinguisticTaggerOmitWhitespace
| NSLinguisticTaggerOmitOther);
return [self linguisticTagsInRange:self.mgl_wholeRange
scheme:NSLinguisticTagSchemeLemma
options:options
orthography:orthography
tokenRanges:NULL].firstObject;
}
@end
|