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
108
109
110
111
112
113
114
115
116
117
118
|
#import "MGLStyleLayerTests.h"
#import "NSString+MGLAdditions.h"
#define TEST_STRICT_NAMING_CONVENTIONS 0
@implementation MGLStyleLayerTests
@dynamic layerType;
- (void)testProperties {
MGLPointFeature *feature = [[MGLPointFeature alloc] init];
MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil];
MGLFillStyleLayer *layer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"layerID" source:source];
XCTAssertEqualObjects(layer.identifier, @"layerID");
XCTAssertEqualObjects(layer.sourceIdentifier, source.identifier);
XCTAssertTrue(layer.visible);
layer.visible = NO;
XCTAssertFalse(layer.visible);
layer.visible = YES;
XCTAssertTrue(layer.visible);
XCTAssertEqual(layer.minimumZoomLevel, -INFINITY);
layer.minimumZoomLevel = 22;
XCTAssertEqual(layer.minimumZoomLevel, 22);
XCTAssertEqual(layer.maximumZoomLevel, INFINITY);
layer.maximumZoomLevel = 0;
XCTAssertEqual(layer.maximumZoomLevel, 0);
}
- (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
@implementation NSValue (MGLStyleLayerTestAdditions)
+ (instancetype)valueWithMGLVector:(CGVector)vector {
#if TARGET_OS_IPHONE
return [self valueWithCGVector:vector];
#else
return [self value:&vector withObjCType:@encode(CGVector)];
#endif
}
- (CGVector)MGLVectorValue {
#if TARGET_OS_IPHONE
return self.CGVectorValue;
#else
CGVector vector;
[self getValue:&vector];
return vector;
#endif
}
@end
|