summaryrefslogtreecommitdiff
path: root/platform/darwin/test/MGLStyleLayerTests.mm.ejs
blob: 00842a5b4e64611d16948f7b21705d51cf36003b (plain)
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
<%
  const type = locals.type;
  const properties = locals.properties;
  const enumProperties = locals.enumProperties;
-%>
// This file is generated. 
// Edit platform/darwin/scripts/generate-style-code.js, then run `make style-code-darwin`.

#import "MGLStyleLayerTests.h"

#import "MGLStyleLayer_Private.h"

#include <mbgl/style/layers/<%- type %>_layer.hpp>

@interface MGL<%- camelize(type) %>LayerTests : MGLStyleLayerTests
@end

@implementation MGL<%- camelize(type) %>LayerTests

+ (NSString *)layerType {
    return @"<%- type %>";
}

<% if (type !== 'background' && type !== 'raster') { -%>
- (void)testPredicates {
    MGLPointFeature *feature = [[MGLPointFeature alloc] init];
    MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil];
    MGL<%- camelize(type) %>StyleLayer *layer = [[MGL<%- camelize(type) %>StyleLayer alloc] initWithIdentifier:@"layerID" source:source];
    
    XCTAssertNil(layer.sourceLayerIdentifier);
    layer.sourceLayerIdentifier = @"layerID";
    XCTAssertEqualObjects(layer.sourceLayerIdentifier, @"layerID");
    layer.sourceLayerIdentifier = nil;
    XCTAssertNil(layer.sourceLayerIdentifier);
    
    XCTAssertNil(layer.predicate);
    layer.predicate = [NSPredicate predicateWithValue:NO];
    XCTAssertEqualObjects(layer.predicate, [NSPredicate predicateWithValue:NO]);
    layer.predicate = nil;
    XCTAssertNil(layer.predicate);
}

<% } -%>
- (void)testProperties {
<% if (type === 'background') { -%>
    MGL<%- camelize(type) %>StyleLayer *layer = [[MGL<%- camelize(type) %>StyleLayer alloc] initWithIdentifier:@"layerID"];
<% } else { -%>
    MGLPointFeature *feature = [[MGLPointFeature alloc] init];
    MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil];
    
    MGL<%- camelize(type) %>StyleLayer *layer = [[MGL<%- camelize(type) %>StyleLayer alloc] initWithIdentifier:@"layerID" source:source];
<% } -%>
    XCTAssertNotEqual(layer.rawLayer, nullptr);
    XCTAssertTrue(layer.rawLayer->is<mbgl::style::<%- camelize(type) %>Layer>());
    auto rawLayer = layer.rawLayer->as<mbgl::style::<%- camelize(type) %>Layer>();
<% for (const property of properties) { -%>
    
    // <%- originalPropertyName(property) %>
    {
        XCTAssertTrue(rawLayer->get<%- camelize(originalPropertyName(property)) %>().isUndefined(),
                      @"<%- originalPropertyName(property) %> should be unset initially.");
        MGLStyleValue<<%- propertyType(property) %>> *defaultStyleValue = layer.<%- objCName(property) %>;
        
        MGLStyleValue<<%- propertyType(property) %>> *styleValue = [MGLStyleValue<<%- propertyType(property) %>> valueWithRawValue:<%- objCTestValue(property, type, 3) %>];
        layer.<%- objCName(property) %> = styleValue;
        mbgl::style::PropertyValue<<%- mbglType(property) %>> propertyValue = { <%- mbglTestValue(property, type) %> };
        XCTAssertEqual(rawLayer->get<%- camelize(originalPropertyName(property)) %>(), propertyValue,
                       @"Setting <%- objCName(property) %> to a constant value should update <%- originalPropertyName(property) %>.");
        XCTAssertEqualObjects(layer.<%- objCName(property) %>, styleValue,
                              @"<%- objCName(property) %> should round-trip constant values.");
        
        styleValue = [MGLStyleValue<<%- propertyType(property) %>> valueWithStops:@{
            @18: styleValue,
        }];
        layer.<%- objCName(property) %> = styleValue;
        propertyValue = { mbgl::style::Function<<%- mbglType(property) %>> {
            {{ 18, propertyValue.asConstant() }},
            1,
        }};
        XCTAssertEqual(rawLayer->get<%- camelize(originalPropertyName(property)) %>(), propertyValue,
                       @"Setting <%- objCName(property) %> to a function should update <%- originalPropertyName(property) %>.");
        XCTAssertEqualObjects(layer.<%- objCName(property) %>, styleValue,
                              @"<%- objCName(property) %> should round-trip functions.");
<% if (!property.required) { -%>
        
        layer.<%- objCName(property) %> = nil;
        XCTAssertTrue(rawLayer->get<%- camelize(originalPropertyName(property)) %>().isUndefined(),
                      @"Unsetting <%- objCName(property) %> should return <%- originalPropertyName(property) %> to the default value.");
        XCTAssertEqualObjects(layer.<%- objCName(property) %>, defaultStyleValue,
                              @"<%- objCName(property) %> should return the default value after being unset.");
<% } -%>
    }
<% } -%>
}

- (void)testPropertyNames {
<% for (const property of properties) { -%>
    [self testPropertyName:@"<%- property.getter || property.name %>" isBoolean:<%- property.type === 'boolean' ? 'YES' : 'NO' %>];
<% } -%>
}

<% if (enumProperties) { -%>
- (void)testValueAdditions {
<% for (let property of enumProperties) { -%>
<% for (let value in property.values) { -%>
<% if (property.values.hasOwnProperty(value)) { -%>
    XCTAssertEqual([NSValue valueWithMGL<%- camelize(property.name) %>:MGL<%- camelize(property.name) %><%- camelize(value) %>].MGL<%- camelize(property.name) %>Value, MGL<%- camelize(property.name) %><%- camelize(value) %>);
<% } -%>
<% } -%>
<% } -%>
}

<% } -%>
@end