Install aftermarket expression functions (#11472)
* [ios, macos] Introduced more ergonomic expression concatenation syntax * [ios, macos] Fixed mgl_join: * [ios, macos] Simplified expression document headings * [ios, macos] Documented mgl_join: * [ios, macos] Convert length operator to length: for strings Only works for literal strings. * [ios, macos] Implemented type conversion using CAST() * [ios, macos] Aftermarket let expressions * [ios, macos] Refactored aftermarket expression functions Refactored the installation of aftermarket expression functions to use macros. It is no longer necessary to handwrite the type encoding of a function. Also added aftermarket functions for interpolating and stepping. * [ios, macos] Updated documentation, tests, demo apps * [ios, macos] Added generic expression function * [ios, macos] Add MGL_MATCH function placeholder. * [ios, macos] Add MGL_SWITCH expression operator. * [ios, macos] Add mgl_coalesce: as expression function. * [ios, macos] Update style documentation. * [ios, macos] Add conventional custom function support. * [ios, macos] Updated example code * [ios, macos] Add mgl_coalesce conventional custom function support. * [ios, macos] Add aftermarket function to 'has' operator. * [ios, macos] Add documentation for lookup and feature operators. * [ios, macos] Documented simple lookup * [ios, macos] Renamed, reversed has expression Renamed mgl_hasProperty:properties: to mgl_does:have: for better readability and consistency with the conventional mgl_has: function. Documented both forms of mgl_has:. * [ios, macos] Restored OEM conditionals where available This is the preferred syntax for simple conditionals on iOS 9 and above, because you can inline the predicate instead of wrapping it in a constant value expression, which means you can write a conditional in a single format string. * [ios, macos] Update style docs. Co-authored-by: Fabian Guerra <fabian.guerra@mapbox.com>
This commit is contained in:
@@ -321,6 +321,11 @@ iOS.
|
||||
<% } -%>
|
||||
### Expression operators
|
||||
|
||||
Many expression operators defined in the style specification have corresponding
|
||||
symbols to be used with the `+[NSExpression expressionWithFormat:]`,
|
||||
`+[NSExpression expressionForFunction:arguments:]`, or
|
||||
`+[NSExpression expressionForFunction:selectorName:arguments:]` method:
|
||||
|
||||
In style specification | Method, function, or predicate type | Format string syntax
|
||||
-----------------------|-------------------------------------|---------------------
|
||||
`array` | |
|
||||
@@ -330,15 +335,15 @@ In style specification | Method, function, or predicate type | Format string syn
|
||||
`string` | |
|
||||
`to-boolean` | `boolValue` |
|
||||
`to-color` | |
|
||||
`to-number` | `mgl_numberWithFallbackValues:` |
|
||||
`to-string` | `stringValue` |
|
||||
`to-number` | `mgl_numberWithFallbackValues:` | `CAST(zipCode, 'NSNumber')`
|
||||
`to-string` | `stringValue` | `CAST(ele, 'NSString')`
|
||||
`typeof` | |
|
||||
`geometry-type` | |
|
||||
`id` | |
|
||||
`properties` | |
|
||||
`at` | |
|
||||
`geometry-type` | |`$mgl_geometryType`
|
||||
`id` | |`$mgl_featureIdentifier`
|
||||
`properties` | |`$mgl_featureProperties`
|
||||
`at` | `objectFrom:withIndex:` | `array[n]`
|
||||
`get` | `+[NSExpression expressionForKeyPath:]` | Key path
|
||||
`has` | |
|
||||
`has` | `mgl_does:have:` | `mgl_does:have:(self, 'key')`
|
||||
`length` | `count:` | `count({1, 2, 2, 3, 4, 7, 9})`
|
||||
`!` | `NSNotPredicateType` | `NOT (p0 OR … OR pn)`
|
||||
`!=` | `NSNotEqualToPredicateOperatorType` | `key != value`
|
||||
@@ -349,14 +354,14 @@ In style specification | Method, function, or predicate type | Format string syn
|
||||
`>=` | `NSGreaterThanOrEqualToPredicateOperatorType` | `key >= value`
|
||||
`all` | `NSAndPredicateType` | `p0 AND … AND pn`
|
||||
`any` | `NSOrPredicateType` | `p0 OR … OR pn`
|
||||
`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` | `TERNARY(condition, trueExpression, falseExpression)`
|
||||
`coalesce` | |
|
||||
`match` | |
|
||||
`interpolate` | `mgl_interpolateWithCurveType:parameters:stops:` |
|
||||
`step` | `mgl_stepWithMinimum:stops:` |
|
||||
`let` | `mgl_expressionWithContext:` |
|
||||
`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` or `MGL_IF` | `TERNARY(1 = 2, YES, NO)` or `MGL_IF(1 = 2, YES, 2 = 2, YES, NO)`
|
||||
`coalesce` | `mgl_coalesce:` | `mgl_coalesce({x, y, z})`
|
||||
`match` | `MGL_MATCH` | `MGL_MATCH(x, 0, 'zero match', 1, 'one match', 'two match', 'default')`
|
||||
`interpolate` | `mgl_interpolate:withCurveType:parameters:stops:` |
|
||||
`step` | `mgl_step:withMinimum:stops:` |
|
||||
`let` | `mgl_expressionWithContext:` | `MGL_LET('ios', 11, 'macos', 10.13, $ios + $macos)`
|
||||
`var` | `+[NSExpression expressionForVariable:]` | `$variable`
|
||||
`concat` | `stringByAppendingString:` |
|
||||
`concat` | `mgl_join:` | `mgl_join({'Old', ' ', 'MacDonald'})`
|
||||
`downcase` | `lowercase:` | `lowercase('DOWNTOWN')`
|
||||
`upcase` | `uppercase:` | `uppercase('Elysian Fields')`
|
||||
<% if (macOS) { -%>
|
||||
@@ -391,6 +396,9 @@ In style specification | Method, function, or predicate type | Format string syn
|
||||
`zoom` | | `$zoom`
|
||||
`heatmap-density` | | `$heatmapDensity`
|
||||
|
||||
For operators that have no corresponding `NSExpression` symbol, use the
|
||||
`MGL_FUNCTION()` format string syntax.
|
||||
|
||||
## Filtering sources
|
||||
|
||||
You can filter a shape or vector source by setting the
|
||||
|
||||
@@ -123,9 +123,7 @@ style attributes and also `hyphen-minus` and `tag:subtag`. However, you must use
|
||||
|
||||
## Using expressions to configure layout and paint attributes
|
||||
|
||||
### Functions
|
||||
|
||||
#### Key paths
|
||||
### Key paths
|
||||
|
||||
A key path expression refers to an attribute of the `MGLFeature` object being
|
||||
evaluated for display. For example, if a polygon’s `MGLFeature.attributes`
|
||||
@@ -133,7 +131,7 @@ dictionary contains the `floorCount` key, then the key path `floorCount` refers
|
||||
to the value of the `floorCount` attribute when evaluating that particular
|
||||
polygon.
|
||||
|
||||
#### Predefined functions
|
||||
### Predefined functions
|
||||
|
||||
Of the
|
||||
[functions predefined by the `+[NSExpression expressionForFunction:arguments:]` method](https://developer.apple.com/documentation/foundation/nsexpression/1413747-init#discussion),
|
||||
@@ -163,6 +161,8 @@ Initializer parameter | Format string syntax
|
||||
`uppercase:` | `uppercase('Elysian Fields')`
|
||||
`lowercase:` | `lowercase('DOWNTOWN')`
|
||||
`noindex:` | `noindex(0 + 2 + c)`
|
||||
`length:` | `length('Wapakoneta')`
|
||||
`castObject:toType:` | `CAST(ele, 'NSString')`<br>`CAST(ele, 'NSNumber')`
|
||||
|
||||
The following predefined functions are not supported:
|
||||
|
||||
@@ -182,13 +182,28 @@ Initializer parameter | Format string syntax
|
||||
`onesComplement:` | `onesComplement(255)`
|
||||
`distanceToLocation:fromLocation:` | `distanceToLocation:fromLocation:(there, here)`
|
||||
|
||||
#### Mapbox-specific functions
|
||||
### Mapbox-specific functions
|
||||
|
||||
For compatibility with the Mapbox Style Specification, the following functions
|
||||
are defined by this SDK for use with style layers. Because these functions are
|
||||
not predefined by `NSExpression`, you must use the
|
||||
are defined by this SDK. When setting a style layer property, you can call these
|
||||
functions just like the predefined functions above, using either the
|
||||
`+[NSExpression expressionForFunction:arguments:]` method or a convenient format
|
||||
string syntax:
|
||||
|
||||
Initializer parameter | Format string syntax | Description
|
||||
----------------------|----------------------|------------
|
||||
`mgl_does:have:` | `mgl_does:have:(SELF, 'key')` or `mgl_does:have:(%@, 'key')` | Returns a Boolean value indicating whether the dictionary has a value for the key or whether the evaluated object (`SELF`) has a value for the feature attribute. Compared to the `mgl_has:` custom function, that function’s target is instead passed in as the first argument to this function. Both functions are equivalent to the syntax `key != NIL` or `%@[key] != NIL` but can be used outside of a predicate.
|
||||
`mgl_interpolate:withCurveType:parameters:stops:` | `mgl_interpolate:withCurveType:parameters:stops:(x, 'linear', nil, %@)` | Produces continuous, smooth results by interpolating between pairs of input and output values (“stops”). Compared to the `mgl_interpolateWithCurveType:parameters:stops:` custom function, the input expression (that function’s target) is instead passed in as the first argument to this function.
|
||||
`mgl_step:from:stops:` | `mgl_step:from:stops:(x, 11, %@)` | Produces discrete, stepped results by evaluating a piecewise-constant function defined by pairs of input and output values ("stops"). Compared to the `mgl_stepWithMinimum:stops:` custom function, the input expression (that function’s target) is instead passed in as the first argument to this function.
|
||||
`mgl_join:` | `mgl_join({'Old', 'MacDonald'})` | Returns the result of concatenating together all the elements of an array in order. Compared to the `stringByAppendingString:` custom function, this function takes only one argument, which is an aggregate expression containing the strings to concatenate.
|
||||
`mgl_coalesce:` | `mgl_coalesce({x, y, z})` | Returns the first non-`nil` value from an array of expressions.
|
||||
`MGL_LET` | `MGL_LET('age', uppercase('old'), 'name', uppercase('MacDonald'), mgl_join({$age, $name}))` | Any number of variable names interspersed with their assigned `NSExpression` values, followed by an `NSExpression` that may contain references to those variables. Compared to the `mgl_expressionWithContext:` custom function, this function takes the variable names and values inline before the expression that contains references to those variables.
|
||||
`MGL_MATCH` | `MGL_MATCH(x, 0, 'zero match', 1, 'one match', 'two match', 'default')` | Evaluates the first expression and returns the value that matches the initial condition. After the first expression condition a pair of matching/return value should be added and a default value.
|
||||
`MGL_IF` | `MGL_IF(1 = 2, YES, 2 = 2, YES, NO)` | Returns the first value that meets the condition otherwise a default value. The expression conditions should be added in pairs of conditional/return value. Unlike `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` or the `TERNARY()` syntax, this function can accept multiple “if else” conditions and is supported on iOS 8._x_ and macOS 10.10._x_; however, each conditional passed into this function must be wrapped in a constant expression.
|
||||
|
||||
The following custom functions are also available with the
|
||||
`+[NSExpression expressionForFunction:selectorName:arguments:]` method or the
|
||||
`FUNCTION()` format string syntax instead.
|
||||
`FUNCTION()` format string syntax:
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
@@ -206,6 +221,17 @@ not predefined by `NSExpression`, you must use the
|
||||
empty string, 0, `FALSE`, `NIL`, or NaN, otherwise `TRUE`.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>mgl_has:</code></td>
|
||||
<td>
|
||||
An `NSExpression` that evaluates to an <code>NSDictionary</code> or the evaluated object (<code>SELF</code>).
|
||||
</td>
|
||||
<td>
|
||||
An `NSExpression` that evaluates to an <code>NSString</code> representing the key to look up in the dictionary or the feature attribute to look up in the evaluated object (see <code>MGLFeature.attributes</code>).
|
||||
</td>
|
||||
<td>
|
||||
`true` if the dictionary has a value for the key or if the evaluated object has a value for the feature attribute.
|
||||
</td>
|
||||
<tr>
|
||||
<td><code>mgl_expressionWithContext:</code></td>
|
||||
<td>
|
||||
@@ -366,6 +392,10 @@ classes, but you should not call them directly outside the context of an
|
||||
expression, because the result may differ from the evaluated expression’s result
|
||||
or may result in undefined behavior.
|
||||
|
||||
The Mapbox Style Specification defines some operators for which no custom
|
||||
function is available. To use these operators in an `NSExpression`, call the
|
||||
`MGL_FUNCTION()` function with the same arguments that the operator expects.
|
||||
|
||||
### Variables
|
||||
|
||||
The following variables are defined by this SDK for use with style layers:
|
||||
@@ -404,11 +434,9 @@ of a [Mapbox-specific function](#mapbox-specific-functions) that takes an
|
||||
`NSDictionary` as an argument:
|
||||
|
||||
```objc
|
||||
[NSExpression expressionWithFormat:@"FUNCTION($floorCount + 1, 'mgl_expressionWithContext:', %@)",
|
||||
{@"floorCount": @2}];
|
||||
[NSExpression expressionWithFormat:@"MGL_LET('floorCount', 2, $floorCount + 1)"];
|
||||
```
|
||||
|
||||
```swift
|
||||
NSExpression(format: "FUNCTION($floorCount + 1, 'mgl_expressionWithContext:', %@)",
|
||||
["floorCount": 2])
|
||||
NSExpression(format: "MGL_LET(floorCount, 2, $floorCount + 1)")
|
||||
```
|
||||
|
||||
@@ -83,7 +83,7 @@ typedef NS_ENUM(NSUInteger, MGLCircleTranslationAnchor) {
|
||||
let layer = MGLCircleStyleLayer(identifier: "circles", source: population)
|
||||
layer.sourceLayerIdentifier = "population"
|
||||
layer.circleColor = NSExpression(forConstantValue: UIColor.green)
|
||||
layer.circleRadius = NSExpression(format: "FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'exponential', 1.75, %@)",
|
||||
layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.75, %@)",
|
||||
[12: 2,
|
||||
22: 180])
|
||||
layer.circleOpacity = NSExpression(forConstantValue: 0.7)
|
||||
|
||||
@@ -35,10 +35,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
```swift
|
||||
let layer = MGLHeatmapStyleLayer(identifier: "earthquake-heat", source: earthquakes)
|
||||
layer.heatmapWeight = NSExpression(format: "FUNCTION(magnitude, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
layer.heatmapWeight = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(magnitude, 'linear', nil, %@)",
|
||||
[0: 0,
|
||||
6: 1])
|
||||
layer.heatmapIntensity = NSExpression(format: "FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
layer.heatmapIntensity = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)",
|
||||
[0: 1,
|
||||
9: 3])
|
||||
mapView.style?.addLayer(layer)
|
||||
|
||||
@@ -93,7 +93,7 @@ typedef NS_ENUM(NSUInteger, MGLLineTranslationAnchor) {
|
||||
```swift
|
||||
let layer = MGLLineStyleLayer(identifier: "trails-path", source: trails)
|
||||
layer.sourceLayerIdentifier = "trails"
|
||||
layer.lineWidth = NSExpression(format: "FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'exponential', 1.5, %@)",
|
||||
layer.lineWidth = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)",
|
||||
[14: 2,
|
||||
18: 20])
|
||||
layer.lineColor = NSExpression(forConstantValue: UIColor.brown)
|
||||
|
||||
@@ -8,13 +8,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
typedef NSString *MGLStyleFunctionOption NS_STRING_ENUM NS_UNAVAILABLE;
|
||||
|
||||
extern MGL_EXPORT const MGLStyleFunctionOption MGLStyleFunctionOptionInterpolationBase __attribute__((unavailable("Use NSExpression instead, applying the mgl_interpolateWithCurveType:parameters:stops: function with a curve type of “exponential” and a non-nil parameter.")));
|
||||
extern MGL_EXPORT const MGLStyleFunctionOption MGLStyleFunctionOptionInterpolationBase __attribute__((unavailable("Use NSExpression instead, applying the mgl_interpolate:withCurveType:parameters:stops: function with a curve type of “exponential” and a non-nil parameter.")));
|
||||
|
||||
extern MGL_EXPORT const MGLStyleFunctionOption MGLStyleFunctionOptionDefaultValue __attribute__((unavailable("Use +[NSExpression expressionForConditional:trueExpression:falseExpression:] instead.")));
|
||||
|
||||
typedef NS_ENUM(NSUInteger, MGLInterpolationMode) {
|
||||
MGLInterpolationModeExponential __attribute__((unavailable("Use NSExpression instead, applying the mgl_interpolateWithCurveType:parameters:stops: function with a curve type of “exponential”."))) = 0,
|
||||
MGLInterpolationModeInterval __attribute__((unavailable("Use NSExpression instead, calling the mgl_stepWithMinimum:stops: function."))),
|
||||
MGLInterpolationModeExponential __attribute__((unavailable("Use NSExpression instead, applying the mgl_interpolate:withCurveType:parameters:stops: function with a curve type of “exponential”."))) = 0,
|
||||
MGLInterpolationModeInterval __attribute__((unavailable("Use NSExpression instead, calling the mgl_step:from:stops: function."))),
|
||||
MGLInterpolationModeCategorical __attribute__((unavailable("Use NSExpression instead."))),
|
||||
MGLInterpolationModeIdentity __attribute__((unavailable("Use +[NSExpression expressionForKeyPath:] instead.")))
|
||||
} __attribute__((unavailable("Use NSExpression instead.")));
|
||||
@@ -29,19 +29,19 @@ MGL_EXPORT __attribute__((unavailable("Use +[NSExpression expressionForConstantV
|
||||
|
||||
@compatibility_alias MGLStyleConstantValue MGLConstantStyleValue;
|
||||
|
||||
MGL_EXPORT __attribute__((unavailable("Use NSExpression instead, calling the mgl_stepWithMinimum:stops: or mgl_interpolateWithCurveType:parameters:stops: function.")))
|
||||
MGL_EXPORT __attribute__((unavailable("Use NSExpression instead, calling the mgl_step:from:stops: or mgl_interpolate:withCurveType:parameters:stops: function.")))
|
||||
@interface MGLStyleFunction<T> : MGLStyleValue<T>
|
||||
@end
|
||||
|
||||
MGL_EXPORT __attribute__((unavailable("Use NSExpression instead, applying the mgl_stepWithMinimum:stops: or mgl_interpolateWithCurveType:parameters:stops: function to the $zoomLevel variable.")))
|
||||
MGL_EXPORT __attribute__((unavailable("Use NSExpression instead, applying the mgl_step:from:stops: or mgl_interpolate:withCurveType:parameters:stops: function to the $zoomLevel variable.")))
|
||||
@interface MGLCameraStyleFunction<T> : MGLStyleFunction<T>
|
||||
@end
|
||||
|
||||
MGL_EXPORT __attribute__((unavailable("Use NSExpression instead, applying the mgl_stepWithMinimum:stops: or mgl_interpolateWithCurveType:parameters:stops: function to a key path expression.")))
|
||||
MGL_EXPORT __attribute__((unavailable("Use NSExpression instead, applying the mgl_step:from:stops: or mgl_interpolate:withCurveType:parameters:stops: function to a key path expression.")))
|
||||
@interface MGLSourceStyleFunction<T> : MGLStyleFunction<T>
|
||||
@end
|
||||
|
||||
MGL_EXPORT __attribute__((unavailable("Use a NSExpression instead with nested mgl_stepWithMinimum:stops: or mgl_interpolateWithCurveType:parameters:stops: function calls.")))
|
||||
MGL_EXPORT __attribute__((unavailable("Use a NSExpression instead with nested mgl_step:from:stops: or mgl_interpolate:withCurveType:parameters:stops: function calls.")))
|
||||
@interface MGLCompositeStyleFunction<T> : MGLStyleFunction<T>
|
||||
@end
|
||||
|
||||
|
||||
@@ -11,8 +11,168 @@
|
||||
#import "NSPredicate+MGLAdditions.h"
|
||||
#import "NSValue+MGLStyleAttributeAdditions.h"
|
||||
|
||||
#import <objc/runtime.h>
|
||||
|
||||
#import <mbgl/style/expression/expression.hpp>
|
||||
|
||||
@interface MGLAftermarketExpressionInstaller: NSObject
|
||||
@end
|
||||
|
||||
@implementation MGLAftermarketExpressionInstaller
|
||||
|
||||
+ (void)load {
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
[self installFunctions];
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
Adds to NSExpression’s built-in repertoire of functions.
|
||||
*/
|
||||
+ (void)installFunctions {
|
||||
Class MGLAftermarketExpressionInstaller = [self class];
|
||||
|
||||
// NSExpression’s built-in functions are backed by class methods on a
|
||||
// private class, so use a function expression to get at the class.
|
||||
// http://funwithobjc.tumblr.com/post/2922267976/using-custom-functions-with-nsexpression
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"sum({})"];
|
||||
NSString *className = NSStringFromClass([functionExpression.operand.constantValue class]);
|
||||
|
||||
// Effectively categorize the class with some extra class methods.
|
||||
Class NSPredicateUtilities = objc_getMetaClass(className.UTF8String);
|
||||
#pragma clang push
|
||||
#pragma clang diagnostic ignored "-Wundeclared-selector"
|
||||
#define INSTALL_METHOD(sel) \
|
||||
{ \
|
||||
Method method = class_getInstanceMethod(MGLAftermarketExpressionInstaller, @selector(sel)); \
|
||||
class_addMethod(NSPredicateUtilities, @selector(sel), method_getImplementation(method), method_getTypeEncoding(method)); \
|
||||
}
|
||||
#define INSTALL_CONTROL_STRUCTURE(sel) \
|
||||
{ \
|
||||
Method method = class_getInstanceMethod(MGLAftermarketExpressionInstaller, @selector(sel:)); \
|
||||
class_addMethod(NSPredicateUtilities, @selector(sel), method_getImplementation(method), method_getTypeEncoding(method)); \
|
||||
class_addMethod(NSPredicateUtilities, @selector(sel:), method_getImplementation(method), method_getTypeEncoding(method)); \
|
||||
}
|
||||
|
||||
// Install method-like functions, taking the number of arguments implied by
|
||||
// the selector name.
|
||||
INSTALL_METHOD(mgl_join:);
|
||||
INSTALL_METHOD(mgl_interpolate:withCurveType:parameters:stops:);
|
||||
INSTALL_METHOD(mgl_step:from:stops:);
|
||||
INSTALL_METHOD(mgl_coalesce:);
|
||||
INSTALL_METHOD(mgl_does:have:);
|
||||
|
||||
// Install functions that resemble control structures, taking arbitrary
|
||||
// numbers of arguments. Vararg aftermarket functions need to be declared
|
||||
// with an explicit and implicit first argument.
|
||||
INSTALL_CONTROL_STRUCTURE(MGL_LET);
|
||||
INSTALL_CONTROL_STRUCTURE(MGL_MATCH);
|
||||
INSTALL_CONTROL_STRUCTURE(MGL_IF);
|
||||
INSTALL_CONTROL_STRUCTURE(MGL_FUNCTION);
|
||||
|
||||
#undef INSTALL_AFTERMARKET_FN
|
||||
#pragma clang pop
|
||||
}
|
||||
|
||||
/**
|
||||
Joins the given components into a single string by concatenating each component
|
||||
in order.
|
||||
*/
|
||||
- (NSString *)mgl_join:(NSArray<NSString *> *)components {
|
||||
return [components componentsJoinedByString:@""];
|
||||
}
|
||||
|
||||
/**
|
||||
A placeholder for a method that evaluates an interpolation expression.
|
||||
*/
|
||||
- (id)mgl_interpolate:(id)inputExpression withCurveType:(NSString *)curveType parameters:(NSDictionary *)params stops:(NSDictionary *)stops {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Interpolation expressions lack underlying Objective-C implementations."];
|
||||
return nil;
|
||||
}
|
||||
|
||||
/**
|
||||
A placeholder for a method that evaluates a step expression.
|
||||
*/
|
||||
- (id)mgl_step:(id)inputExpression from:(id)minimumExpression stops:(NSDictionary *)stops {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Step expressions lack underlying Objective-C implementations."];
|
||||
return nil;
|
||||
}
|
||||
|
||||
/**
|
||||
A placeholder for a method that evaluates a coalesce expression.
|
||||
*/
|
||||
- (id)mgl_coalesce:(NSArray<NSExpression *> *)elements {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Coalesce expressions lack underlying Objective-C implementations."];
|
||||
return nil;
|
||||
}
|
||||
|
||||
/**
|
||||
Returns a Boolean value indicating whether the object has a value for the given
|
||||
key.
|
||||
*/
|
||||
- (BOOL)mgl_does:(id)object have:(NSString *)key {
|
||||
return [object valueForKey:key] != nil;
|
||||
}
|
||||
|
||||
/**
|
||||
A placeholder for a method that evaluates an expression based on an arbitrary
|
||||
number of variable names and assigned expressions.
|
||||
*/
|
||||
- (id)MGL_LET:(NSString *)firstVariableName, ... {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Assignment expressions lack underlying Objective-C implementations."];
|
||||
return nil;
|
||||
}
|
||||
|
||||
/**
|
||||
A placeholder for a method that evaluates an expression and returns the matching element.
|
||||
*/
|
||||
- (id)MGL_MATCH:(id)firstCondition, ... {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Assignment expressions lack underlying Objective-C implementations."];
|
||||
return nil;
|
||||
}
|
||||
|
||||
/**
|
||||
A placeholder for a method that evaluates an expression and returns the matching element.
|
||||
*/
|
||||
- (id)MGL_IF:(id)firstCondition, ... {
|
||||
va_list argumentList;
|
||||
va_start(argumentList, firstCondition);
|
||||
|
||||
for (id eachExpression = firstCondition; eachExpression; eachExpression = va_arg(argumentList, id)) {
|
||||
if ([eachExpression isKindOfClass:[NSComparisonPredicate class]]) {
|
||||
id valueExpression = va_arg(argumentList, id);
|
||||
if ([eachExpression evaluateWithObject:nil]) {
|
||||
return valueExpression;
|
||||
}
|
||||
} else {
|
||||
return eachExpression;
|
||||
}
|
||||
}
|
||||
va_end(argumentList);
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
A placeholder for a catch-all method that evaluates an arbitrary number of
|
||||
arguments as an expression according to the Mapbox Style Specification’s
|
||||
expression language.
|
||||
*/
|
||||
- (id)MGL_FUNCTION:(id)firstArgument, ... {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Mapbox GL function expressions lack underlying Objective-C implementations."];
|
||||
return nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation NSExpression (MGLPrivateAdditions)
|
||||
|
||||
- (std::vector<mbgl::Value>)mgl_aggregateMBGLValue {
|
||||
@@ -260,7 +420,7 @@
|
||||
|
||||
- (id)mgl_coalesce {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Coalesce expressions lack underlying Objective-C implementations."];
|
||||
format:@"Coalesce expressions lack underlying Objective-C implementations."];
|
||||
return nil;
|
||||
}
|
||||
|
||||
@@ -330,6 +490,7 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
@"^": @"raise:toPower:",
|
||||
@"upcase": @"uppercase:",
|
||||
@"downcase": @"lowercase:",
|
||||
@"let": @"MGL_LET",
|
||||
};
|
||||
});
|
||||
|
||||
@@ -382,12 +543,15 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
return [NSExpression expressionForFunction:operand selectorName:@"boolValue" arguments:@[]];
|
||||
} else if ([op isEqualToString:@"to-number"]) {
|
||||
NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects.firstObject];
|
||||
if (argumentObjects.count == 1) {
|
||||
return [NSExpression expressionWithFormat:@"CAST(%@, 'NSNumber')", operand];
|
||||
}
|
||||
argumentObjects = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)];
|
||||
NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects);
|
||||
return [NSExpression expressionForFunction:operand selectorName:@"mgl_numberWithFallbackValues:" arguments:subexpressions];
|
||||
} else if ([op isEqualToString:@"to-string"]) {
|
||||
NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects.firstObject];
|
||||
return [NSExpression expressionForFunction:operand selectorName:@"stringValue" arguments:@[]];
|
||||
return [NSExpression expressionWithFormat:@"CAST(%@, 'NSString')", operand];
|
||||
} else if ([op isEqualToString:@"get"]) {
|
||||
if (argumentObjects.count == 2) {
|
||||
NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects.lastObject];
|
||||
@@ -400,7 +564,12 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
return [NSExpression expressionForKeyPath:argumentObjects.firstObject];
|
||||
} else if ([op isEqualToString:@"length"]) {
|
||||
NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects);
|
||||
return [NSExpression expressionForFunction:@"count:" arguments:@[subexpressions.firstObject]];
|
||||
NSString *function = @"count:";
|
||||
if ([subexpressions.firstObject expressionType] == NSConstantValueExpressionType
|
||||
&& [[subexpressions.firstObject constantValue] isKindOfClass:[NSString class]]) {
|
||||
function = @"length:";
|
||||
}
|
||||
return [NSExpression expressionForFunction:function arguments:@[subexpressions.firstObject]];
|
||||
} else if ([op isEqualToString:@"min"]) {
|
||||
NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects);
|
||||
NSExpression *subexpression = [NSExpression expressionForAggregate:subexpressions];
|
||||
@@ -415,9 +584,8 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
return [NSExpression expressionForConstantValue:@(M_PI)];
|
||||
} else if ([op isEqualToString:@"concat"]) {
|
||||
NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects);
|
||||
NSExpression *operand = subexpressions.firstObject;
|
||||
subexpressions = [subexpressions subarrayWithRange:NSMakeRange(1, subexpressions.count - 1)];
|
||||
return [NSExpression expressionForFunction:operand selectorName:@"stringByAppendingString:" arguments:subexpressions];
|
||||
NSExpression *subexpression = [NSExpression expressionForAggregate:subexpressions];
|
||||
return [NSExpression expressionForFunction:@"mgl_join:" arguments:@[subexpression]];
|
||||
} else if ([op isEqualToString:@"at"]) {
|
||||
NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects);
|
||||
NSExpression *index = subexpressions.firstObject;
|
||||
@@ -425,9 +593,9 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
return [NSExpression expressionForFunction:@"objectFrom:withIndex:" arguments:@[operand, index]];
|
||||
} else if ([op isEqualToString:@"has"]) {
|
||||
NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects);
|
||||
NSExpression *operand = argumentObjects.count > 1 ? subexpressions[1] : [NSExpression expressionWithFormat:@"self"];
|
||||
NSExpression *property = subexpressions.firstObject;
|
||||
return [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_has:', %@)", operand, property];
|
||||
NSExpression *operand = argumentObjects.count > 1 ? subexpressions[1] : [NSExpression expressionForEvaluatedObject];
|
||||
NSExpression *key = subexpressions.firstObject;
|
||||
return [NSExpression expressionForFunction:@"mgl_does:have:" arguments:@[operand, key]];
|
||||
} else if ([op isEqualToString:@"interpolate"]) {
|
||||
NSArray *interpolationOptions = argumentObjects.firstObject;
|
||||
NSString *curveType = interpolationOptions.firstObject;
|
||||
@@ -440,7 +608,7 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
}
|
||||
NSExpression *curveParameterExpression = [NSExpression mgl_expressionWithJSONObject:curveParameters];
|
||||
argumentObjects = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)];
|
||||
NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects.firstObject];
|
||||
NSExpression *inputExpression = [NSExpression mgl_expressionWithJSONObject:argumentObjects.firstObject];
|
||||
NSArray *stopExpressions = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)];
|
||||
NSMutableDictionary *stops = [NSMutableDictionary dictionaryWithCapacity:stopExpressions.count / 2];
|
||||
NSEnumerator *stopEnumerator = stopExpressions.objectEnumerator;
|
||||
@@ -449,11 +617,10 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
stops[key] = [NSExpression mgl_expressionWithJSONObject:valueExpression];
|
||||
}
|
||||
NSExpression *stopExpression = [NSExpression expressionForConstantValue:stops];
|
||||
return [NSExpression expressionForFunction:operand
|
||||
selectorName:@"mgl_interpolateWithCurveType:parameters:stops:"
|
||||
arguments:@[curveTypeExpression, curveParameterExpression, stopExpression]];
|
||||
return [NSExpression expressionForFunction:@"mgl_interpolate:withCurveType:parameters:stops:"
|
||||
arguments:@[inputExpression, curveTypeExpression, curveParameterExpression, stopExpression]];
|
||||
} else if ([op isEqualToString:@"step"]) {
|
||||
NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects[0]];
|
||||
NSExpression *inputExpression = [NSExpression mgl_expressionWithJSONObject:argumentObjects[0]];
|
||||
NSArray *stopExpressions = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)];
|
||||
NSExpression *minimum;
|
||||
if (stopExpressions.count % 2) {
|
||||
@@ -471,9 +638,8 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
}
|
||||
}
|
||||
NSExpression *stopExpression = [NSExpression expressionForConstantValue:stops];
|
||||
return [NSExpression expressionForFunction:operand
|
||||
selectorName:@"mgl_stepWithMinimum:stops:"
|
||||
arguments:@[minimum, stopExpression]];
|
||||
return [NSExpression expressionForFunction:@"mgl_step:from:stops:"
|
||||
arguments:@[inputExpression, minimum, stopExpression]];
|
||||
} else if ([op isEqualToString:@"zoom"]) {
|
||||
return [NSExpression expressionForVariable:@"zoomLevel"];
|
||||
} else if ([op isEqualToString:@"heatmap-density"]) {
|
||||
@@ -484,48 +650,37 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
return [NSExpression expressionForVariable:@"mgl_featureIdentifier"];
|
||||
} else if ([op isEqualToString:@"properties"]) {
|
||||
return [NSExpression expressionForVariable:@"mgl_featureProperties"];
|
||||
} else if ([op isEqualToString:@"let"]) {
|
||||
NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects.lastObject];
|
||||
NSArray *bindingObjects = [argumentObjects subarrayWithRange:NSMakeRange(0, argumentObjects.count - 1)];
|
||||
NSMutableDictionary *context = [NSMutableDictionary dictionaryWithCapacity:bindingObjects.count / 2];
|
||||
NSEnumerator *bindingEnumerator = bindingObjects.objectEnumerator;
|
||||
while (NSString *key = bindingEnumerator.nextObject) {
|
||||
context[key] = [NSExpression mgl_expressionWithJSONObject:bindingEnumerator.nextObject];
|
||||
}
|
||||
return [NSExpression expressionForFunction:operand
|
||||
selectorName:@"mgl_expressionWithContext:"
|
||||
arguments:@[[NSExpression expressionForConstantValue:context]]];
|
||||
} else if ([op isEqualToString:@"var"]) {
|
||||
return [NSExpression expressionForVariable:argumentObjects.firstObject];
|
||||
} else if ([op isEqualToString:@"case"]) {
|
||||
NSArray *caseExpressions = argumentObjects;
|
||||
NSExpression *firstConditional = [NSExpression expressionWithFormat:@"%@", [NSPredicate mgl_predicateWithJSONObject:caseExpressions[0]]];
|
||||
NSMutableArray *arguments = [NSMutableArray array];
|
||||
|
||||
for (NSUInteger index = 1; index < caseExpressions.count; index++) {
|
||||
if ([caseExpressions[index] isKindOfClass:[NSArray class]]) {
|
||||
NSPredicate *conditional = [NSPredicate mgl_predicateWithJSONObject:caseExpressions[index]];
|
||||
for (NSUInteger index = 0; index < argumentObjects.count; index++) {
|
||||
if ([argumentObjects[index] isKindOfClass:[NSArray class]]) {
|
||||
NSPredicate *conditional = [NSPredicate mgl_predicateWithJSONObject:argumentObjects[index]];
|
||||
NSExpression *argument = [NSExpression expressionWithFormat:@"%@", conditional];
|
||||
[arguments addObject:argument];
|
||||
} else {
|
||||
[arguments addObject:[NSExpression mgl_expressionWithJSONObject:caseExpressions[index]]];
|
||||
[arguments addObject:[NSExpression mgl_expressionWithJSONObject:argumentObjects[index]]];
|
||||
}
|
||||
}
|
||||
|
||||
return [NSExpression expressionForFunction:firstConditional selectorName:@"mgl_case:" arguments:arguments];
|
||||
if (@available(iOS 9.0, *)) {
|
||||
if (arguments.count == 3) {
|
||||
NSPredicate *conditional = [NSPredicate mgl_predicateWithJSONObject:argumentObjects.firstObject];
|
||||
return [NSExpression expressionForConditional:conditional trueExpression:arguments[1] falseExpression:arguments[2]];
|
||||
}
|
||||
}
|
||||
return [NSExpression expressionForFunction:@"MGL_IF" arguments:arguments];
|
||||
} else if ([op isEqualToString:@"match"]) {
|
||||
NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects[0]];
|
||||
NSArray *matchOptions = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)];
|
||||
|
||||
NSMutableArray *optionsArray = [NSMutableArray array];
|
||||
NSEnumerator *optionsEnumerator = matchOptions.objectEnumerator;
|
||||
NSEnumerator *optionsEnumerator = argumentObjects.objectEnumerator;
|
||||
while (id object = optionsEnumerator.nextObject) {
|
||||
NSExpression *option = [NSExpression mgl_expressionWithJSONObject:object];
|
||||
[optionsArray addObject:option];
|
||||
}
|
||||
|
||||
return [NSExpression expressionForFunction:operand
|
||||
selectorName:@"mgl_match:"
|
||||
return [NSExpression expressionForFunction:@"MGL_MATCH"
|
||||
arguments:optionsArray];
|
||||
} else if ([op isEqualToString:@"coalesce"]) {
|
||||
NSMutableArray *expressions = [NSMutableArray array];
|
||||
@@ -533,10 +688,10 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
[expressions addObject:[NSExpression mgl_expressionWithJSONObject:operand]];
|
||||
}
|
||||
|
||||
return [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_coalesce')", expressions];
|
||||
}else {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Expression operator %@ not yet implemented.", op];
|
||||
return [NSExpression expressionWithFormat:@"mgl_coalesce(%@)", expressions];
|
||||
} else {
|
||||
NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(array);
|
||||
return [NSExpression expressionForFunction:@"MGL_FUNCTION" arguments:subexpressions];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -561,6 +716,10 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
@"raise:toPower:": @"^",
|
||||
@"uppercase:": @"upcase",
|
||||
@"lowercase:": @"downcase",
|
||||
@"length:": @"length",
|
||||
// Vararg aftermarket expressions need to be declared with an explicit and implicit first argument.
|
||||
@"MGL_LET": @"let",
|
||||
@"MGL_LET:": @"let",
|
||||
};
|
||||
});
|
||||
|
||||
@@ -673,6 +832,9 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
} else if ([function isEqualToString:@"floor:"]) {
|
||||
return [NSExpression expressionWithFormat:@"trunc:(%@) - TERNARY(modulus:by:(%@, 1) < 0, 1, 0)",
|
||||
self.arguments.firstObject, self.arguments.firstObject].mgl_jsonExpressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_join:"]) {
|
||||
NSArray *arguments = [self.arguments.firstObject.collection valueForKeyPath:@"mgl_jsonExpressionObject"];
|
||||
return [@[@"concat"] arrayByAddingObjectsFromArray:arguments];
|
||||
} else if ([function isEqualToString:@"stringByAppendingString:"]) {
|
||||
NSArray *arguments = self.arguments.mgl_jsonExpressionObject;
|
||||
return [@[@"concat", self.operand.mgl_jsonExpressionObject] arrayByAddingObjectsFromArray:arguments];
|
||||
@@ -690,46 +852,15 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
return @[@"to-string", self.operand.mgl_jsonExpressionObject];
|
||||
} else if ([function isEqualToString:@"noindex:"]) {
|
||||
return self.arguments.firstObject.mgl_jsonExpressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_has:"]) {
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"has", self.arguments[0].mgl_jsonExpressionObject, nil];
|
||||
if (self.operand.expressionType != NSEvaluatedObjectExpressionType) {
|
||||
[expressionObject addObject:self.operand.mgl_jsonExpressionObject];
|
||||
}
|
||||
return expressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_interpolateWithCurveType:parameters:stops:"]) {
|
||||
if (self.arguments.count < 3) {
|
||||
[NSException raise:NSInvalidArgumentException format:
|
||||
@"Too few arguments to ‘mgl_interpolateWithCurveType:parameters:stops:’ function; expected 3 arguments."];
|
||||
} else if (self.arguments.count > 3) {
|
||||
[NSException raise:NSInvalidArgumentException format:
|
||||
@"%lu unexpected arguments to ‘mgl_interpolateWithCurveType:parameters:stops:’ function; expected 3 arguments.",
|
||||
self.arguments.count - 3];
|
||||
}
|
||||
NSString *curveType = self.arguments.firstObject.constantValue;
|
||||
NSMutableArray *interpolationArray = [NSMutableArray arrayWithObject:curveType];
|
||||
if ([curveType isEqualToString:@"exponential"]) {
|
||||
id base = [self.arguments[1] mgl_jsonExpressionObject];
|
||||
[interpolationArray addObject:base];
|
||||
} else if ([curveType isEqualToString:@"cubic-bezier"]) {
|
||||
NSArray *controlPoints = [self.arguments[1].collection mgl_jsonExpressionObject];
|
||||
[interpolationArray addObjectsFromArray:controlPoints];
|
||||
}
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"interpolate", interpolationArray, self.operand.mgl_jsonExpressionObject, nil];
|
||||
NSDictionary<NSNumber *, NSExpression *> *stops = self.arguments[2].constantValue;
|
||||
for (NSNumber *key in [stops.allKeys sortedArrayUsingSelector:@selector(compare:)]) {
|
||||
[expressionObject addObject:key];
|
||||
[expressionObject addObject:[stops[key] mgl_jsonExpressionObject]];
|
||||
}
|
||||
return expressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_stepWithMinimum:stops:"]) {
|
||||
id minimum = self.arguments.firstObject.mgl_jsonExpressionObject;
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"step", self.operand.mgl_jsonExpressionObject, minimum, nil];
|
||||
NSDictionary<NSNumber *, NSExpression *> *stops = self.arguments[1].constantValue;
|
||||
for (NSNumber *key in [stops.allKeys sortedArrayUsingSelector:@selector(compare:)]) {
|
||||
[expressionObject addObject:key];
|
||||
[expressionObject addObject:[stops[key] mgl_jsonExpressionObject]];
|
||||
}
|
||||
return expressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_does:have:"] ||
|
||||
[function isEqualToString:@"mgl_has:"]) {
|
||||
return self.mgl_jsonHasExpressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_interpolate:withCurveType:parameters:stops:"]
|
||||
|| [function isEqualToString:@"mgl_interpolateWithCurveType:parameters:stops:"]) {
|
||||
return self.mgl_jsonInterpolationExpressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_step:from:stops:"]
|
||||
|| [function isEqualToString:@"mgl_stepWithMinimum:stops:"]) {
|
||||
return self.mgl_jsonStepExpressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_expressionWithContext:"]) {
|
||||
id context = self.arguments.firstObject;
|
||||
if ([context isKindOfClass:[NSExpression class]]) {
|
||||
@@ -742,37 +873,28 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
}];
|
||||
[expressionObject addObject:self.operand.mgl_jsonExpressionObject];
|
||||
return expressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_case:"]) {
|
||||
NSPredicate *firstConditional = (NSPredicate *)self.operand.constantValue;
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"case", firstConditional.mgl_jsonExpressionObject, nil];
|
||||
|
||||
for (NSExpression *option in self.arguments) {
|
||||
if ([option respondsToSelector:@selector(constantValue)] && [option.constantValue isKindOfClass:[NSComparisonPredicate class]]) {
|
||||
NSPredicate *predicate = (NSPredicate *)option.constantValue;
|
||||
[expressionObject addObject:predicate.mgl_jsonExpressionObject];
|
||||
} else {
|
||||
[expressionObject addObject:option.mgl_jsonExpressionObject];
|
||||
}
|
||||
} else if ([function isEqualToString:@"MGL_IF"] ||
|
||||
[function isEqualToString:@"mgl_if:"]) {
|
||||
return self.mgl_jsonIfExpressionObject;
|
||||
} else if ([function isEqualToString:@"MGL_MATCH"] ||
|
||||
[function isEqualToString:@"mgl_match:"]) {
|
||||
return self.mgl_jsonMatchExpressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_coalesce:"] ||
|
||||
[function isEqualToString:@"mgl_coalesce"]) {
|
||||
|
||||
return self.mgl_jsonCoalesceExpressionObject;
|
||||
} else if ([function isEqualToString:@"castObject:toType:"]) {
|
||||
id object = self.arguments.firstObject.mgl_jsonExpressionObject;
|
||||
NSString *type = self.arguments[1].mgl_jsonExpressionObject;
|
||||
if ([type isEqualToString:@"NSString"]) {
|
||||
return @[@"to-string", object];
|
||||
} else if ([type isEqualToString:@"NSNumber"]) {
|
||||
return @[@"to-number", object];
|
||||
}
|
||||
|
||||
return expressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_match:"]) {
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"match", self.operand.mgl_jsonExpressionObject, nil];
|
||||
|
||||
|
||||
for (NSExpression *option in self.arguments) {
|
||||
[expressionObject addObject:option.mgl_jsonExpressionObject];
|
||||
}
|
||||
|
||||
return expressionObject;
|
||||
} else if ([function isEqualToString:@"mgl_coalesce"]) {
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"coalesce", nil];
|
||||
|
||||
for (NSExpression *expression in self.operand.constantValue) {
|
||||
[expressionObject addObject:[expression mgl_jsonExpressionObject]];
|
||||
}
|
||||
|
||||
return expressionObject;
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Casting expression to %@ not yet implemented.", type];
|
||||
} else if ([function isEqualToString:@"MGL_FUNCTION"]) {
|
||||
return self.arguments.mgl_jsonExpressionObject;
|
||||
} else if ([function isEqualToString:@"median:"] ||
|
||||
[function isEqualToString:@"mode:"] ||
|
||||
[function isEqualToString:@"stddev:"] ||
|
||||
@@ -851,4 +973,121 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (id)mgl_jsonInterpolationExpressionObject {
|
||||
NSUInteger expectedArgumentCount = [self.function componentsSeparatedByString:@":"].count - 1;
|
||||
if (self.arguments.count < expectedArgumentCount) {
|
||||
[NSException raise:NSInvalidArgumentException format:
|
||||
@"Too few arguments to ‘%@’ function; expected %lu arguments.",
|
||||
self.function, expectedArgumentCount];
|
||||
} else if (self.arguments.count > expectedArgumentCount) {
|
||||
[NSException raise:NSInvalidArgumentException format:
|
||||
@"%lu unexpected arguments to ‘%@’ function; expected %lu arguments.",
|
||||
self.arguments.count - expectedArgumentCount, self.function, expectedArgumentCount];
|
||||
}
|
||||
|
||||
BOOL isAftermarketFunction = [self.function isEqualToString:@"mgl_interpolate:withCurveType:parameters:stops:"];
|
||||
NSUInteger curveTypeIndex = isAftermarketFunction ? 1 : 0;
|
||||
NSString *curveType = self.arguments[curveTypeIndex].constantValue;
|
||||
NSMutableArray *interpolationArray = [NSMutableArray arrayWithObject:curveType];
|
||||
if ([curveType isEqualToString:@"exponential"]) {
|
||||
id base = [self.arguments[curveTypeIndex + 1] mgl_jsonExpressionObject];
|
||||
[interpolationArray addObject:base];
|
||||
} else if ([curveType isEqualToString:@"cubic-bezier"]) {
|
||||
NSArray *controlPoints = [self.arguments[curveTypeIndex + 1].collection mgl_jsonExpressionObject];
|
||||
[interpolationArray addObjectsFromArray:controlPoints];
|
||||
}
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"interpolate", interpolationArray, nil];
|
||||
[expressionObject addObject:(isAftermarketFunction ? self.arguments.firstObject : self.operand).mgl_jsonExpressionObject];
|
||||
NSDictionary<NSNumber *, NSExpression *> *stops = self.arguments[curveTypeIndex + 2].constantValue;
|
||||
for (NSNumber *key in [stops.allKeys sortedArrayUsingSelector:@selector(compare:)]) {
|
||||
[expressionObject addObject:key];
|
||||
[expressionObject addObject:[stops[key] mgl_jsonExpressionObject]];
|
||||
}
|
||||
return expressionObject;
|
||||
}
|
||||
|
||||
- (id)mgl_jsonStepExpressionObject {
|
||||
BOOL isAftermarketFunction = [self.function isEqualToString:@"mgl_step:from:stops:"];
|
||||
NSUInteger minimumIndex = isAftermarketFunction ? 1 : 0;
|
||||
id minimum = self.arguments[minimumIndex].mgl_jsonExpressionObject;
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"step", (isAftermarketFunction ? self.arguments.firstObject : self.operand).mgl_jsonExpressionObject, minimum, nil];
|
||||
NSDictionary<NSNumber *, NSExpression *> *stops = self.arguments[minimumIndex + 1].constantValue;
|
||||
for (NSNumber *key in [stops.allKeys sortedArrayUsingSelector:@selector(compare:)]) {
|
||||
[expressionObject addObject:key];
|
||||
[expressionObject addObject:[stops[key] mgl_jsonExpressionObject]];
|
||||
}
|
||||
return expressionObject;
|
||||
}
|
||||
|
||||
- (id)mgl_jsonMatchExpressionObject {
|
||||
BOOL isAftermarketFunction = [self.function isEqualToString:@"MGL_MATCH"];
|
||||
NSUInteger minimumIndex = isAftermarketFunction ? 1 : 0;
|
||||
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"match", (isAftermarketFunction ? self.arguments.firstObject : self.operand).mgl_jsonExpressionObject, nil];
|
||||
NSArray<NSExpression *> *arguments = isAftermarketFunction ? self.arguments : self.arguments[minimumIndex].constantValue;
|
||||
|
||||
for (NSUInteger index = minimumIndex; index < arguments.count; index++) {
|
||||
[expressionObject addObject:arguments[index].mgl_jsonExpressionObject];
|
||||
}
|
||||
|
||||
return expressionObject;
|
||||
}
|
||||
|
||||
- (id)mgl_jsonIfExpressionObject {
|
||||
BOOL isAftermarketFunction = [self.function isEqualToString:@"MGL_IF"];
|
||||
NSUInteger minimumIndex = isAftermarketFunction ? 1 : 0;
|
||||
NSExpression *firstCondition;
|
||||
id condition;
|
||||
|
||||
if (isAftermarketFunction) {
|
||||
firstCondition = self.arguments.firstObject;
|
||||
} else {
|
||||
firstCondition = self.operand;
|
||||
}
|
||||
|
||||
if ([firstCondition respondsToSelector:@selector(constantValue)] && [firstCondition.constantValue isKindOfClass:[NSComparisonPredicate class]]) {
|
||||
NSPredicate *predicate = (NSPredicate *)firstCondition.constantValue;
|
||||
condition = predicate.mgl_jsonExpressionObject;
|
||||
} else {
|
||||
condition = firstCondition.mgl_jsonExpressionObject;
|
||||
}
|
||||
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"case", condition, nil];
|
||||
NSArray<NSExpression *> *arguments = isAftermarketFunction ? self.arguments : self.arguments[minimumIndex].constantValue;
|
||||
|
||||
for (NSUInteger index = minimumIndex; index < arguments.count; index++) {
|
||||
if ([arguments[index] respondsToSelector:@selector(constantValue)] && [arguments[index].constantValue isKindOfClass:[NSComparisonPredicate class]]) {
|
||||
NSPredicate *predicate = (NSPredicate *)arguments[index].constantValue;
|
||||
[expressionObject addObject:predicate.mgl_jsonExpressionObject];
|
||||
} else {
|
||||
[expressionObject addObject:arguments[index].mgl_jsonExpressionObject];
|
||||
}
|
||||
}
|
||||
|
||||
return expressionObject;
|
||||
}
|
||||
|
||||
- (id)mgl_jsonCoalesceExpressionObject {
|
||||
BOOL isAftermarketFunction = [self.function isEqualToString:@"mgl_coalesce:"];
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"coalesce", nil];
|
||||
|
||||
for (NSExpression *expression in (isAftermarketFunction ? self.arguments.firstObject : self.operand).constantValue) {
|
||||
[expressionObject addObject:[expression mgl_jsonExpressionObject]];
|
||||
}
|
||||
|
||||
return expressionObject;
|
||||
}
|
||||
|
||||
- (id)mgl_jsonHasExpressionObject {
|
||||
BOOL isAftermarketFunction = [self.function isEqualToString:@"mgl_does:have:"];
|
||||
NSExpression *operand = isAftermarketFunction ? self.arguments[0] : self.operand;
|
||||
NSExpression *key = self.arguments[isAftermarketFunction ? 1 : 0];
|
||||
|
||||
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"has", key.mgl_jsonExpressionObject, nil];
|
||||
if (operand.expressionType != NSEvaluatedObjectExpressionType) {
|
||||
[expressionObject addObject:operand.mgl_jsonExpressionObject];
|
||||
}
|
||||
return expressionObject;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -54,8 +54,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@property (nonatomic, readonly) id mgl_jsonExpressionObject;
|
||||
|
||||
@property (nonatomic, readonly) id mgl_coalesce;
|
||||
|
||||
@end
|
||||
|
||||
@interface NSDictionary (MGLExpressionAdditions)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
@property (nonatomic, readonly) id mgl_jsonExpressionObject;
|
||||
|
||||
- (id)mgl_case:(id)firstValue, ...;
|
||||
- (id)mgl_if:(id)firstValue, ...;
|
||||
|
||||
- (id)mgl_match:(NSExpression *)firstCase, ...;
|
||||
|
||||
|
||||
@@ -324,34 +324,34 @@ NSArray *MGLSubpredicatesWithJSONObjects(NSArray *objects) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (id)mgl_case:(id)firstValue, ... {
|
||||
- (id)mgl_if:(id)firstValue, ... {
|
||||
|
||||
if ([self evaluateWithObject:nil]) {
|
||||
return firstValue;
|
||||
}
|
||||
|
||||
return firstValue;
|
||||
}
|
||||
|
||||
id eachExpression;
|
||||
va_list argumentList;
|
||||
va_start(argumentList, firstValue);
|
||||
|
||||
|
||||
while ((eachExpression = va_arg(argumentList, id))) {
|
||||
if ([eachExpression isKindOfClass:[NSComparisonPredicate class]]) {
|
||||
id valueExpression = va_arg(argumentList, id);
|
||||
if ([eachExpression evaluateWithObject:nil]) {
|
||||
return valueExpression;
|
||||
}
|
||||
} else {
|
||||
return eachExpression;
|
||||
if ([eachExpression isKindOfClass:[NSComparisonPredicate class]]) {
|
||||
id valueExpression = va_arg(argumentList, id);
|
||||
if ([eachExpression evaluateWithObject:nil]) {
|
||||
return valueExpression;
|
||||
}
|
||||
} else {
|
||||
return eachExpression;
|
||||
}
|
||||
}
|
||||
}
|
||||
va_end(argumentList);
|
||||
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (id)mgl_match:(NSExpression *)firstCase, ... {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"Match expressions lack underlying Objective-C implementations."];
|
||||
format:@"Match expressions lack underlying Objective-C implementations."];
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
@"backgroundColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.backgroundColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -66,8 +66,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.backgroundColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.backgroundColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.backgroundColorTransition = transitionTest;
|
||||
@@ -95,7 +95,7 @@
|
||||
@"backgroundOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.backgroundOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -119,8 +119,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.backgroundOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.backgroundOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.backgroundOpacityTransition = transitionTest;
|
||||
@@ -148,7 +148,7 @@
|
||||
@"backgroundPattern should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'Background Pattern'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.backgroundPattern = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::string> intervalStops = {{
|
||||
@@ -172,8 +172,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.backgroundPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.backgroundPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.backgroundPatternTransition = transitionTest;
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
@"circleBlur should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleBlur = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -77,7 +77,7 @@
|
||||
XCTAssertEqualObjects(layer.circleBlur, functionExpression,
|
||||
@"circleBlur should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.circleBlur = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -88,7 +88,7 @@
|
||||
XCTAssertEqualObjects(layer.circleBlur, functionExpression,
|
||||
@"circleBlur should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.circleBlur = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -133,7 +133,7 @@
|
||||
@"circleColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -147,7 +147,7 @@
|
||||
XCTAssertEqualObjects(layer.circleColor, functionExpression,
|
||||
@"circleColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.circleColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -158,7 +158,7 @@
|
||||
XCTAssertEqualObjects(layer.circleColor, functionExpression,
|
||||
@"circleColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.circleColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -203,7 +203,7 @@
|
||||
@"circleOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -217,7 +217,7 @@
|
||||
XCTAssertEqualObjects(layer.circleOpacity, functionExpression,
|
||||
@"circleOpacity should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.circleOpacity = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -228,7 +228,7 @@
|
||||
XCTAssertEqualObjects(layer.circleOpacity, functionExpression,
|
||||
@"circleOpacity should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.circleOpacity = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -273,7 +273,7 @@
|
||||
@"circlePitchAlignment should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'viewport'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circlePitchAlignment = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::AlignmentType> intervalStops = {{
|
||||
@@ -297,8 +297,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.circlePitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.circlePitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -317,7 +317,7 @@
|
||||
@"circleRadius should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleRadius = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -331,7 +331,7 @@
|
||||
XCTAssertEqualObjects(layer.circleRadius, functionExpression,
|
||||
@"circleRadius should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.circleRadius = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -342,7 +342,7 @@
|
||||
XCTAssertEqualObjects(layer.circleRadius, functionExpression,
|
||||
@"circleRadius should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.circleRadius = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -387,7 +387,7 @@
|
||||
@"circleScaleAlignment should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'viewport'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleScaleAlignment = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::CirclePitchScaleType> intervalStops = {{
|
||||
@@ -411,8 +411,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.circleScaleAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.circleScaleAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -431,7 +431,7 @@
|
||||
@"circleStrokeColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleStrokeColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -445,7 +445,7 @@
|
||||
XCTAssertEqualObjects(layer.circleStrokeColor, functionExpression,
|
||||
@"circleStrokeColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.circleStrokeColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -456,7 +456,7 @@
|
||||
XCTAssertEqualObjects(layer.circleStrokeColor, functionExpression,
|
||||
@"circleStrokeColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.circleStrokeColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -501,7 +501,7 @@
|
||||
@"circleStrokeOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleStrokeOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -515,7 +515,7 @@
|
||||
XCTAssertEqualObjects(layer.circleStrokeOpacity, functionExpression,
|
||||
@"circleStrokeOpacity should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.circleStrokeOpacity = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -526,7 +526,7 @@
|
||||
XCTAssertEqualObjects(layer.circleStrokeOpacity, functionExpression,
|
||||
@"circleStrokeOpacity should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.circleStrokeOpacity = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -571,7 +571,7 @@
|
||||
@"circleStrokeWidth should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleStrokeWidth = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -585,7 +585,7 @@
|
||||
XCTAssertEqualObjects(layer.circleStrokeWidth, functionExpression,
|
||||
@"circleStrokeWidth should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.circleStrokeWidth = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -596,7 +596,7 @@
|
||||
XCTAssertEqualObjects(layer.circleStrokeWidth, functionExpression,
|
||||
@"circleStrokeWidth should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.circleStrokeWidth = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -647,7 +647,7 @@
|
||||
@"circleTranslation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleTranslation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::array<float, 2>> intervalStops = {{
|
||||
@@ -671,8 +671,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.circleTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.circleTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -691,7 +691,7 @@
|
||||
@"circleTranslationAnchor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'viewport'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.circleTranslationAnchor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::TranslateAnchorType> intervalStops = {{
|
||||
@@ -715,8 +715,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.circleTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.circleTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ class MGLDocumentationExampleTests: XCTestCase, MGLMapViewDelegate {
|
||||
#else
|
||||
layer.circleColor = NSExpression(forConstantValue: UIColor.green)
|
||||
#endif
|
||||
layer.circleRadius = NSExpression(format: "FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'exponential', 1.75, %@)",
|
||||
layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.75, %@)",
|
||||
[12: 2,
|
||||
22: 180])
|
||||
layer.circleOpacity = NSExpression(forConstantValue: 0.7)
|
||||
@@ -180,7 +180,7 @@ class MGLDocumentationExampleTests: XCTestCase, MGLMapViewDelegate {
|
||||
//#-example-code
|
||||
let layer = MGLLineStyleLayer(identifier: "trails-path", source: trails)
|
||||
layer.sourceLayerIdentifier = "trails"
|
||||
layer.lineWidth = NSExpression(format: "FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'exponential', 1.5, %@)",
|
||||
layer.lineWidth = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)",
|
||||
[14: 2,
|
||||
18: 20])
|
||||
#if os(macOS)
|
||||
@@ -237,10 +237,10 @@ class MGLDocumentationExampleTests: XCTestCase, MGLMapViewDelegate {
|
||||
|
||||
//#-example-code
|
||||
let layer = MGLHeatmapStyleLayer(identifier: "earthquake-heat", source: earthquakes)
|
||||
layer.heatmapWeight = NSExpression(format: "FUNCTION(magnitude, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
layer.heatmapWeight = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(magnitude, 'linear', nil, %@)",
|
||||
[0: 0,
|
||||
6: 1])
|
||||
layer.heatmapIntensity = NSExpression(format: "FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
layer.heatmapIntensity = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)",
|
||||
[0: 1,
|
||||
9: 3])
|
||||
mapView.style?.addLayer(layer)
|
||||
|
||||
@@ -71,7 +71,7 @@ class MGLDocumentationGuideTests: XCTestCase, MGLMapViewDelegate {
|
||||
#endif
|
||||
//#-end-example-code
|
||||
|
||||
let _ = NSExpression(format: "FUNCTION(mag, 'mgl_stepWithMinimum:stops:', %@, %@)",
|
||||
let _ = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)",
|
||||
stops[0]!, stops)
|
||||
}
|
||||
|
||||
@@ -104,10 +104,10 @@ class MGLDocumentationGuideTests: XCTestCase, MGLMapViewDelegate {
|
||||
|
||||
let layer = MGLCircleStyleLayer(identifier: "circles", source: source)
|
||||
#if os(macOS)
|
||||
layer.circleColor = NSExpression(format: "FUNCTION(mag, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
layer.circleColor = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(mag, 'linear', nil, %@)",
|
||||
stops)
|
||||
#else
|
||||
layer.circleColor = NSExpression(format: "FUNCTION(mag, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
layer.circleColor = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(mag, 'linear', nil, %@)",
|
||||
stops)
|
||||
#endif
|
||||
layer.circleRadius = NSExpression(forConstantValue: 10)
|
||||
@@ -126,7 +126,7 @@ class MGLDocumentationGuideTests: XCTestCase, MGLMapViewDelegate {
|
||||
18: 18,
|
||||
]
|
||||
|
||||
layer.circleRadius = NSExpression(format: "FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'exponential', 1.5, %@)",
|
||||
layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)",
|
||||
stops)
|
||||
//#-end-example-code
|
||||
}
|
||||
@@ -145,7 +145,7 @@ class MGLDocumentationGuideTests: XCTestCase, MGLMapViewDelegate {
|
||||
10: .white,
|
||||
]
|
||||
|
||||
layer.circleColor = NSExpression(format: "FUNCTION(mag, 'mgl_stepWithMinimum:stops:', %@, %@)",
|
||||
layer.circleColor = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)",
|
||||
NSColor.green, stops)
|
||||
#else
|
||||
let stops: [Float: UIColor] = [
|
||||
@@ -156,7 +156,7 @@ class MGLDocumentationGuideTests: XCTestCase, MGLMapViewDelegate {
|
||||
10: .white,
|
||||
]
|
||||
|
||||
layer.circleColor = NSExpression(format: "FUNCTION(mag, 'mgl_stepWithMinimum:stops:', %@, %@)",
|
||||
layer.circleColor = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)",
|
||||
UIColor.green, stops)
|
||||
#endif
|
||||
//#-end-example-code
|
||||
|
||||
@@ -199,9 +199,11 @@ using namespace std::string_literals;
|
||||
}
|
||||
{
|
||||
NSDictionary *context = @{@"loremIpsum": MGLConstantExpression(@"Lorem ipsum dolor sit amet")};
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(uppercase($loremIpsum), 'mgl_expressionWithContext:', %@)", context];
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_LET('loremIpsum', 'Lorem ipsum dolor sit amet', uppercase($loremIpsum))", context];
|
||||
NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(uppercase($loremIpsum), 'mgl_expressionWithContext:', %@)", context];
|
||||
NSArray *jsonExpression = @[@"let", @"loremIpsum", @"Lorem ipsum dolor sit amet", @[@"upcase", @[@"var", @"loremIpsum"]]];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
}
|
||||
@@ -352,6 +354,15 @@ using namespace std::string_literals;
|
||||
XCTAssertEqualObjects([NSExpression expressionWithFormat:@"1 + 1"].mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSArray *arguments = @[MGLConstantExpression(@1), MGLConstantExpression(@1), MGLConstantExpression(@1)];
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"add:to:" arguments:arguments];
|
||||
NSArray *jsonExpression = @[@"+", @1, @1, @1];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
jsonExpression = @[@"+", @[@"+", @1, @1], @1];
|
||||
XCTAssertEqualObjects([NSExpression expressionWithFormat:@"1 + 1 + 1"].mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], [NSExpression expressionWithFormat:@"1 + 1 + 1"]);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"from:subtract:" arguments:arguments];
|
||||
NSArray *jsonExpression = @[@"-", @1, @1];
|
||||
@@ -510,10 +521,13 @@ using namespace std::string_literals;
|
||||
NSArray *arguments = @[MGLConstantExpression(@"MacDonald")];
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION('Old', 'stringByAppendingString:', 'MacDonald')"];
|
||||
NSExpression *aftermarketExpression = [NSExpression expressionWithFormat:@"mgl_join({'Old', 'MacDonald'})"];
|
||||
NSArray *jsonExpression = @[@"concat", @"Old", @"MacDonald"];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(aftermarketExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @"OldMacDonald");
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
XCTAssertEqualObjects([aftermarketExpression expressionValueWithObject:nil context:nil], @"OldMacDonald");
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], aftermarketExpression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"uppercase:" arguments:arguments];
|
||||
@@ -527,6 +541,12 @@ using namespace std::string_literals;
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"length:" arguments:arguments];
|
||||
NSArray *jsonExpression = @[@"length", @"MacDonald"];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)testTypeConversionExpressionObject {
|
||||
@@ -551,10 +571,22 @@ using namespace std::string_literals;
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(number, 'stringValue')"];
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"CAST(postalCode, 'NSNumber')"];
|
||||
NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'mgl_numberWithFallbackValues:')"];
|
||||
NSArray *jsonExpression = @[@"to-number", @[@"get", @"postalCode"]];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:@{@"postalCode": @"02134"} context:nil], @02134);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"CAST(number, 'NSString')"];
|
||||
NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(number, 'stringValue')"];
|
||||
NSArray *jsonExpression = @[@"to-string", @[@"get", @"number"]];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:@{@"number": @1.5} context:nil], @"1.5");
|
||||
XCTAssertEqualObjects([compatibilityExpression expressionValueWithObject:@{@"number": @1.5} context:nil], @"1.5");
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
}
|
||||
@@ -562,46 +594,57 @@ using namespace std::string_literals;
|
||||
- (void)testInterpolationExpressionObject {
|
||||
{
|
||||
NSDictionary *stops = @{@0: MGLConstantExpression(@100), @10: MGLConstantExpression(@200)};
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(x, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", stops];
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(x, 'linear', nil, %@)", stops];
|
||||
NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(x, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", stops];
|
||||
NSArray *jsonExpression = @[@"interpolate", @[@"linear"], @[@"get", @"x"], @0, @100, @10, @200];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSDictionary *stops = @{@1: MGLConstantExpression(@2), @3: MGLConstantExpression(@6)};
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(x, 'mgl_interpolateWithCurveType:parameters:stops:', 'exponential', 2, %@)", stops];
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(x, 'exponential', 2, %@)", stops];
|
||||
NSArray *jsonExpression = @[@"interpolate", @[@"exponential", @2], @[@"get", @"x"], @1, @2, @3, @6];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSDictionary *stops = @{@0: MGLConstantExpression(@0), @100: MGLConstantExpression(@100)};
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(x, 'mgl_interpolateWithCurveType:parameters:stops:', 'cubic-bezier', { 0.42, 0, 0.58, 1 }, %@)", stops];
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(x, 'cubic-bezier', { 0.42, 0, 0.58, 1 }, %@)", stops];
|
||||
NSArray *jsonExpression = @[@"interpolate", @[@"cubic-bezier", @0.42, @0, @0.58, @1], @[@"get", @"x"], @0, @0, @100, @100];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSDictionary *stops = @{@0: MGLConstantExpression(@111), @1: MGLConstantExpression(@1111)};
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(x, 'mgl_stepWithMinimum:stops:', 11, %@)", stops];
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(x, 11, %@)", stops];
|
||||
NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(x, 'mgl_stepWithMinimum:stops:', 11, %@)", stops];
|
||||
NSArray *jsonExpression = @[@"step", @[@"get", @"x"], @11, @0, @111, @1, @1111];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)testMatchExpressionObject {
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(2 - 1, 'mgl_match:', %@, %@, %@, %@, 'default')", MGLConstantExpression(@1),
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_MATCH(2 - 1, %@, %@, %@, %@, 'default')", MGLConstantExpression(@1),
|
||||
MGLConstantExpression(@"one"),
|
||||
MGLConstantExpression(@0),
|
||||
MGLConstantExpression(@"zero")];
|
||||
NSExpression *predicate = [NSExpression expressionWithFormat:@"2 - 1"];
|
||||
NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_match:', %@)", predicate, @[MGLConstantExpression(@1),
|
||||
MGLConstantExpression(@"one"),
|
||||
MGLConstantExpression(@0),
|
||||
MGLConstantExpression(@"zero"),
|
||||
MGLConstantExpression(@"default")]];
|
||||
NSArray *jsonExpression = @[@"match", @[@"-", @2, @1], @1, @"one", @0, @"zero", @"default"];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(2 * 1, 'mgl_match:', %@, %@, 'default')", MGLConstantExpression(@1), MGLConstantExpression(@"one")];
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_MATCH(2 * 1, %@, %@, 'default')", MGLConstantExpression(@1), MGLConstantExpression(@"one")];
|
||||
NSArray *jsonExpression = @[@"match", @[@"*", @2, @1], @1, @"one", @"default"];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
@@ -610,35 +653,71 @@ using namespace std::string_literals;
|
||||
|
||||
- (void)testCoalesceExpressionObject {
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_coalesce')", @[[NSExpression expressionForKeyPath:@"x"],
|
||||
[NSExpression expressionForKeyPath:@"y"],
|
||||
[NSExpression expressionForKeyPath:@"z"],
|
||||
[NSExpression expressionForConstantValue:@0]]];
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_coalesce(%@)",
|
||||
@[[NSExpression expressionForKeyPath:@"x"],
|
||||
[NSExpression expressionForKeyPath:@"y"],
|
||||
[NSExpression expressionForKeyPath:@"z"],
|
||||
[NSExpression expressionForConstantValue:@0]]];
|
||||
NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_coalesce')", @[[NSExpression expressionForKeyPath:@"x"],
|
||||
[NSExpression expressionForKeyPath:@"y"],
|
||||
[NSExpression expressionForKeyPath:@"z"],
|
||||
[NSExpression expressionForConstantValue:@0]]];
|
||||
NSArray *jsonExpression = @[@"coalesce", @[@"get", @"x"], @[@"get", @"y"], @[@"get", @"z"], @0];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (void)testConditionalExpressionObject {
|
||||
// This test crashes on iOS 8, which doesn't have `+[NSExpression expressionForConditional:trueExpression:falseExpression:]`.
|
||||
// https://github.com/mapbox/mapbox-gl-native/issues/11007
|
||||
if (@available(iOS 9.0, *)) {
|
||||
{
|
||||
NSPredicate *conditional = [NSPredicate predicateWithFormat:@"1 = 2"];
|
||||
NSExpression *trueExpression = [NSExpression expressionForConstantValue:@YES];
|
||||
NSExpression *falseExpression = [NSExpression expressionForConstantValue:@NO];
|
||||
NSExpression *expression = [NSExpression expressionForConditional:conditional trueExpression:trueExpression falseExpression:falseExpression];
|
||||
NSArray *jsonExpression = @[@"case", @[@"==", @1, @2], @YES, @NO];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression expressionWithFormat:@"TERNARY(1 = 2, TRUE, FALSE)"].mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @NO);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"TERNARY(0 = 1, TRUE, TERNARY(1 = 2, TRUE, FALSE))"];
|
||||
NSArray *jsonExpression = @[@"case", @[@"==", @0, @1], @YES, @[@"==", @1, @2], @YES, @NO];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @NO);
|
||||
expression = [NSExpression expressionWithFormat:@"MGL_IF(%@, TRUE, %@, TRUE, FALSE)",
|
||||
MGLConstantExpression([NSPredicate predicateWithFormat:@"0 = 1"]),
|
||||
MGLConstantExpression([NSPredicate predicateWithFormat:@"1 = 2"])];
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_case:', %@, %@)",
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_IF(%@, %@, %@)",
|
||||
[NSExpression expressionWithFormat:@"%@", [NSPredicate predicateWithFormat:@"1 = 2"]],
|
||||
MGLConstantExpression(@YES),
|
||||
MGLConstantExpression(@NO)];
|
||||
MGLConstantExpression(@YES),
|
||||
MGLConstantExpression(@NO)];
|
||||
NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_if:', %@)", [NSPredicate predicateWithFormat:@"1 = 2"], @[MGLConstantExpression(@YES), MGLConstantExpression(@NO)]];
|
||||
NSArray *jsonExpression = @[@"case", @[@"==", @1, @2], @YES, @NO];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
if (@available(iOS 9.0, *)) {
|
||||
expression = [NSExpression expressionWithFormat:@"TERNARY(1 = 2, YES, NO)"];
|
||||
}
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @NO);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_case:', %@, %@, %@, %@)",
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_IF(%@, %@, %@, %@, %@)",
|
||||
[NSExpression expressionWithFormat:@"%@", [NSPredicate predicateWithFormat:@"1 = 2"]],
|
||||
MGLConstantExpression(@YES),
|
||||
[NSExpression expressionWithFormat:@"%@", [NSPredicate predicateWithFormat:@"1 = 1"]],
|
||||
MGLConstantExpression(@YES),
|
||||
MGLConstantExpression(@NO)];
|
||||
MGLConstantExpression(@YES),
|
||||
[NSExpression expressionWithFormat:@"%@", [NSPredicate predicateWithFormat:@"1 = 1"]],
|
||||
MGLConstantExpression(@YES),
|
||||
MGLConstantExpression(@NO)];
|
||||
NSArray *jsonExpression = @[@"case", @[@"==", @1, @2], @YES, @[@"==", @1, @1], @YES, @NO];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
@@ -650,40 +729,91 @@ using namespace std::string_literals;
|
||||
- (void)testLookupExpressionObject {
|
||||
{
|
||||
NSExpression *array = [NSExpression expressionForAggregate:@[MGLConstantExpression(@9),
|
||||
MGLConstantExpression(@8),
|
||||
MGLConstantExpression(@7)]];
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"objectFrom:withIndex:" arguments:@[array, MGLConstantExpression(@1)]];
|
||||
MGLConstantExpression(@8),
|
||||
MGLConstantExpression(@7)]];
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"objectFrom:withIndex:"
|
||||
arguments:@[array, MGLConstantExpression(@1)]];
|
||||
NSArray *jsonExpression = @[@"at", @1, @[ @"literal", @[@9, @8, @7]]];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *array = [NSExpression expressionForAggregate:@[MGLConstantExpression(@9),
|
||||
MGLConstantExpression(@8),
|
||||
MGLConstantExpression(@7)]];
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"objectFrom:withIndex:" arguments:@[array, [NSExpression expressionForKeyPath:@"x"]]];
|
||||
MGLConstantExpression(@8),
|
||||
MGLConstantExpression(@7)]];
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"objectFrom:withIndex:"
|
||||
arguments:@[array, [NSExpression expressionForKeyPath:@"x"]]];
|
||||
NSArray *jsonExpression = @[@"at", @[@"get", @"x"], @[ @"literal", @[@9, @8, @7]]];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(self, 'mgl_has:', 'x')"];
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"mgl_does:have:"
|
||||
arguments:@[[NSExpression expressionForEvaluatedObject],
|
||||
[NSExpression expressionForConstantValue:@"x"]]];
|
||||
NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(self, 'mgl_has:', 'x')"];
|
||||
NSArray *jsonExpression = @[@"has", @"x"];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_has:', 'x')", [NSExpression expressionForConstantValue:@{@"x": MGLConstantExpression(@0)}]];
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"mgl_does:have:"
|
||||
arguments:@[MGLConstantExpression(@{@"x": MGLConstantExpression(@0)}),
|
||||
MGLConstantExpression(@"x")]];
|
||||
NSArray *jsonExpression = @[@"has", @"x", @[@"literal", @{@"x": @0}]];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION($mgl_featureProperties, 'mgl_has:', 'x')"];
|
||||
NSExpression *expression = [NSExpression expressionForFunction:@"mgl_does:have:"
|
||||
arguments:@[[NSExpression expressionForVariable:@"mgl_featureProperties"],
|
||||
[NSExpression expressionForConstantValue:@"x"]]];
|
||||
NSArray *jsonExpression = @[@"has", @"x", @[@"properties"]];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
NSExpression *expression;
|
||||
if (@available(iOS 9.0, *)) {
|
||||
expression = [NSExpression expressionWithFormat:@"TERNARY(key != nil, 1, 0)"];
|
||||
} else {
|
||||
expression = [NSExpression expressionWithFormat:@"MGL_IF(%@, 1, 0)",
|
||||
MGLConstantExpression([NSPredicate predicateWithFormat:@"key != nil"])];
|
||||
}
|
||||
NSArray *jsonExpression = @[@"case", @[@"!=", @[@"get", @"key"], [NSNull null]], @1, @0];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:@{} context:nil], @NO);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:@{@"key": @"🗝"} context:nil], @YES);
|
||||
}
|
||||
{
|
||||
NSDictionary *dictionary = @{@"key": @"🔑"};
|
||||
NSExpression *expression;
|
||||
if (@available(iOS 9.0, *)) {
|
||||
expression = [NSExpression expressionWithFormat:@"TERNARY(%@.key != nil, 1, 0)", dictionary];
|
||||
} else {
|
||||
NSPredicate *conditional = [NSPredicate predicateWithFormat:@"%@.key != nil", dictionary];
|
||||
expression = [NSExpression expressionWithFormat:@"MGL_IF(%@, 1, 0)",
|
||||
MGLConstantExpression(conditional)];
|
||||
}
|
||||
NSArray *jsonExpression = @[@"case", @[@"!=", @[@"get", @"key", @[@"literal", dictionary]], [NSNull null]], @1, @0];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
// The dictionary isn’t equal enough.
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression].description, expression.description);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @YES);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)testGenericExpressionObject {
|
||||
{
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('random', 1, 2, 3, 4, 5)"];
|
||||
NSArray *jsonExpression = @[@"random", @1, @2, @3, @4, @5];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
expression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('random', 1, 2, 3, 4)"];
|
||||
XCTAssertThrowsSpecificNamed([expression expressionValueWithObject:nil context:nil], NSException, NSInvalidArgumentException);
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
@"fillExtrusionBase should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillExtrusionBase = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -77,7 +77,7 @@
|
||||
XCTAssertEqualObjects(layer.fillExtrusionBase, functionExpression,
|
||||
@"fillExtrusionBase should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.fillExtrusionBase = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -88,7 +88,7 @@
|
||||
XCTAssertEqualObjects(layer.fillExtrusionBase, functionExpression,
|
||||
@"fillExtrusionBase should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.fillExtrusionBase = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -133,7 +133,7 @@
|
||||
@"fillExtrusionColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillExtrusionColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -147,7 +147,7 @@
|
||||
XCTAssertEqualObjects(layer.fillExtrusionColor, functionExpression,
|
||||
@"fillExtrusionColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.fillExtrusionColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -158,7 +158,7 @@
|
||||
XCTAssertEqualObjects(layer.fillExtrusionColor, functionExpression,
|
||||
@"fillExtrusionColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.fillExtrusionColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -203,7 +203,7 @@
|
||||
@"fillExtrusionHeight should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillExtrusionHeight = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -217,7 +217,7 @@
|
||||
XCTAssertEqualObjects(layer.fillExtrusionHeight, functionExpression,
|
||||
@"fillExtrusionHeight should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.fillExtrusionHeight = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -228,7 +228,7 @@
|
||||
XCTAssertEqualObjects(layer.fillExtrusionHeight, functionExpression,
|
||||
@"fillExtrusionHeight should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.fillExtrusionHeight = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -273,7 +273,7 @@
|
||||
@"fillExtrusionOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillExtrusionOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -297,8 +297,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillExtrusionOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillExtrusionOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.fillExtrusionOpacityTransition = transitionTest;
|
||||
@@ -326,7 +326,7 @@
|
||||
@"fillExtrusionPattern should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'Fill Extrusion Pattern'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillExtrusionPattern = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::string> intervalStops = {{
|
||||
@@ -350,8 +350,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillExtrusionPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillExtrusionPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.fillExtrusionPatternTransition = transitionTest;
|
||||
@@ -385,7 +385,7 @@
|
||||
@"fillExtrusionTranslation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillExtrusionTranslation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::array<float, 2>> intervalStops = {{
|
||||
@@ -409,8 +409,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -429,7 +429,7 @@
|
||||
@"fillExtrusionTranslationAnchor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'viewport'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillExtrusionTranslationAnchor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::TranslateAnchorType> intervalStops = {{
|
||||
@@ -453,8 +453,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
@"fillAntialiased should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"false"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillAntialiased = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -87,8 +87,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillAntialiased = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillAntialiased = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
@"fillColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -121,7 +121,7 @@
|
||||
XCTAssertEqualObjects(layer.fillColor, functionExpression,
|
||||
@"fillColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.fillColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -132,7 +132,7 @@
|
||||
XCTAssertEqualObjects(layer.fillColor, functionExpression,
|
||||
@"fillColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.fillColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -177,7 +177,7 @@
|
||||
@"fillOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -191,7 +191,7 @@
|
||||
XCTAssertEqualObjects(layer.fillOpacity, functionExpression,
|
||||
@"fillOpacity should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.fillOpacity = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -202,7 +202,7 @@
|
||||
XCTAssertEqualObjects(layer.fillOpacity, functionExpression,
|
||||
@"fillOpacity should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.fillOpacity = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -247,7 +247,7 @@
|
||||
@"fillOutlineColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillOutlineColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -261,7 +261,7 @@
|
||||
XCTAssertEqualObjects(layer.fillOutlineColor, functionExpression,
|
||||
@"fillOutlineColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.fillOutlineColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -272,7 +272,7 @@
|
||||
XCTAssertEqualObjects(layer.fillOutlineColor, functionExpression,
|
||||
@"fillOutlineColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.fillOutlineColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -317,7 +317,7 @@
|
||||
@"fillPattern should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'Fill Pattern'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillPattern = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::string> intervalStops = {{
|
||||
@@ -341,8 +341,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.fillPatternTransition = transitionTest;
|
||||
@@ -376,7 +376,7 @@
|
||||
@"fillTranslation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillTranslation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::array<float, 2>> intervalStops = {{
|
||||
@@ -400,8 +400,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -420,7 +420,7 @@
|
||||
@"fillTranslationAnchor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'viewport'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.fillTranslationAnchor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::TranslateAnchorType> intervalStops = {{
|
||||
@@ -444,8 +444,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.fillTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *constantExpression2 = [NSExpression expressionWithFormat:@"%@", [MGLColor blueColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($heatmapDensity, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@12: constantExpression2}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($heatmapDensity, %@, %@)", constantExpression, @{@12: constantExpression2}];
|
||||
layer.heatmapColor = functionExpression;
|
||||
|
||||
XCTAssertEqual(rawLayer->getHeatmapColor().evaluate(11.0), mbgl::Color::red(),
|
||||
@@ -49,12 +49,12 @@
|
||||
XCTAssertEqualObjects(layer.heatmapColor, defaultExpression,
|
||||
@"heatmapColor should return the default value after being unset.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.heatmapColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera expression is applied to heatmapColor.");
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.heatmapColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a data expression is applied to heatmapColor.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.heatmapColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
@"heatmapIntensity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.heatmapIntensity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -87,8 +87,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.heatmapIntensity = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.heatmapIntensity = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.heatmapIntensityTransition = transitionTest;
|
||||
@@ -116,7 +116,7 @@
|
||||
@"heatmapOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.heatmapOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -140,8 +140,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.heatmapOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.heatmapOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.heatmapOpacityTransition = transitionTest;
|
||||
@@ -169,7 +169,7 @@
|
||||
@"heatmapRadius should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.heatmapRadius = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -183,7 +183,7 @@
|
||||
XCTAssertEqualObjects(layer.heatmapRadius, functionExpression,
|
||||
@"heatmapRadius should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.heatmapRadius = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -194,7 +194,7 @@
|
||||
XCTAssertEqualObjects(layer.heatmapRadius, functionExpression,
|
||||
@"heatmapRadius should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.heatmapRadius = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -239,7 +239,7 @@
|
||||
@"heatmapWeight should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.heatmapWeight = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -253,7 +253,7 @@
|
||||
XCTAssertEqualObjects(layer.heatmapWeight, functionExpression,
|
||||
@"heatmapWeight should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.heatmapWeight = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -264,7 +264,7 @@
|
||||
XCTAssertEqualObjects(layer.heatmapWeight, functionExpression,
|
||||
@"heatmapWeight should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.heatmapWeight = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
@"hillshadeAccentColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.hillshadeAccentColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -69,8 +69,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeAccentColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeAccentColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.hillshadeAccentColorTransition = transitionTest;
|
||||
@@ -98,7 +98,7 @@
|
||||
@"hillshadeExaggeration should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.hillshadeExaggeration = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -122,8 +122,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeExaggeration = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeExaggeration = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.hillshadeExaggerationTransition = transitionTest;
|
||||
@@ -151,7 +151,7 @@
|
||||
@"hillshadeHighlightColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.hillshadeHighlightColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -175,8 +175,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeHighlightColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeHighlightColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.hillshadeHighlightColorTransition = transitionTest;
|
||||
@@ -204,7 +204,7 @@
|
||||
@"hillshadeIlluminationAnchor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'viewport'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.hillshadeIlluminationAnchor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::HillshadeIlluminationAnchorType> intervalStops = {{
|
||||
@@ -228,8 +228,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeIlluminationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeIlluminationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
@"hillshadeIlluminationDirection should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.hillshadeIlluminationDirection = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -272,8 +272,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeIlluminationDirection = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeIlluminationDirection = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -292,7 +292,7 @@
|
||||
@"hillshadeShadowColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.hillshadeShadowColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -316,8 +316,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeShadowColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.hillshadeShadowColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.hillshadeShadowColorTransition = transitionTest;
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
@"lineCap should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'square'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineCap = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::LineCapType> intervalStops = {{
|
||||
@@ -87,8 +87,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineCap = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineCap = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
@"lineJoin should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'miter'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineJoin = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::LineJoinType> intervalStops = {{
|
||||
@@ -145,7 +145,7 @@
|
||||
@"lineMiterLimit should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineMiterLimit = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -169,8 +169,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineMiterLimit = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineMiterLimit = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
@"lineRoundLimit should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineRoundLimit = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -213,8 +213,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineRoundLimit = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineRoundLimit = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
@"lineBlur should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineBlur = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -247,7 +247,7 @@
|
||||
XCTAssertEqualObjects(layer.lineBlur, functionExpression,
|
||||
@"lineBlur should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.lineBlur = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -258,7 +258,7 @@
|
||||
XCTAssertEqualObjects(layer.lineBlur, functionExpression,
|
||||
@"lineBlur should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.lineBlur = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -303,7 +303,7 @@
|
||||
@"lineColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -317,7 +317,7 @@
|
||||
XCTAssertEqualObjects(layer.lineColor, functionExpression,
|
||||
@"lineColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.lineColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -328,7 +328,7 @@
|
||||
XCTAssertEqualObjects(layer.lineColor, functionExpression,
|
||||
@"lineColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.lineColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -373,7 +373,7 @@
|
||||
@"lineDashPattern should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 2}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineDashPattern = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::vector<float>> intervalStops = {{
|
||||
@@ -397,8 +397,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineDashPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineDashPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -417,7 +417,7 @@
|
||||
@"lineGapWidth should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineGapWidth = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -431,7 +431,7 @@
|
||||
XCTAssertEqualObjects(layer.lineGapWidth, functionExpression,
|
||||
@"lineGapWidth should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.lineGapWidth = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -442,7 +442,7 @@
|
||||
XCTAssertEqualObjects(layer.lineGapWidth, functionExpression,
|
||||
@"lineGapWidth should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.lineGapWidth = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -487,7 +487,7 @@
|
||||
@"lineOffset should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineOffset = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -501,7 +501,7 @@
|
||||
XCTAssertEqualObjects(layer.lineOffset, functionExpression,
|
||||
@"lineOffset should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.lineOffset = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -512,7 +512,7 @@
|
||||
XCTAssertEqualObjects(layer.lineOffset, functionExpression,
|
||||
@"lineOffset should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.lineOffset = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -557,7 +557,7 @@
|
||||
@"lineOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -571,7 +571,7 @@
|
||||
XCTAssertEqualObjects(layer.lineOpacity, functionExpression,
|
||||
@"lineOpacity should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.lineOpacity = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -582,7 +582,7 @@
|
||||
XCTAssertEqualObjects(layer.lineOpacity, functionExpression,
|
||||
@"lineOpacity should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.lineOpacity = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -627,7 +627,7 @@
|
||||
@"linePattern should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'Line Pattern'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.linePattern = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::string> intervalStops = {{
|
||||
@@ -651,8 +651,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.linePattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.linePattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.linePatternTransition = transitionTest;
|
||||
@@ -686,7 +686,7 @@
|
||||
@"lineTranslation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineTranslation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::array<float, 2>> intervalStops = {{
|
||||
@@ -710,8 +710,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -730,7 +730,7 @@
|
||||
@"lineTranslationAnchor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'viewport'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineTranslationAnchor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::TranslateAnchorType> intervalStops = {{
|
||||
@@ -754,8 +754,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.lineTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -774,7 +774,7 @@
|
||||
@"lineWidth should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.lineWidth = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -788,7 +788,7 @@
|
||||
XCTAssertEqualObjects(layer.lineWidth, functionExpression,
|
||||
@"lineWidth should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.lineWidth = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -799,7 +799,7 @@
|
||||
XCTAssertEqualObjects(layer.lineWidth, functionExpression,
|
||||
@"lineWidth should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.lineWidth = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
@"maximumRasterBrightness should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.maximumRasterBrightness = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -69,8 +69,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.maximumRasterBrightness = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.maximumRasterBrightness = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
@"minimumRasterBrightness should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.minimumRasterBrightness = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -113,8 +113,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.minimumRasterBrightness = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.minimumRasterBrightness = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
@"rasterContrast should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.rasterContrast = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -157,8 +157,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterContrast = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterContrast = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.rasterContrastTransition = transitionTest;
|
||||
@@ -186,7 +186,7 @@
|
||||
@"rasterFadeDuration should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.rasterFadeDuration = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -210,8 +210,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterFadeDuration = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterFadeDuration = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
@"rasterHueRotation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.rasterHueRotation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -254,8 +254,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterHueRotation = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterHueRotation = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
@"rasterOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.rasterOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -298,8 +298,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.rasterOpacityTransition = transitionTest;
|
||||
@@ -327,7 +327,7 @@
|
||||
@"rasterSaturation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.rasterSaturation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -351,8 +351,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterSaturation = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.rasterSaturation = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
// Transition property test
|
||||
layer.rasterSaturationTransition = transitionTest;
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
@"<%- objCName(property) %> should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:<%- objCTestValue(property, type, false, 3) %>];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.<%- objCName(property) %> = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<<%- mbglType(property) %>> intervalStops = {{
|
||||
@@ -95,7 +95,7 @@
|
||||
@"<%- objCName(property) %> should round-trip camera expressions.");
|
||||
|
||||
<% if (property["property-function"] && isInterpolatable(property)) { -%>
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.<%- objCName(property) %> = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<<%- mbglType(property) %>> exponentialStops = { {{18, <%- mbglTestValue(property, type) %>}}, 1.0 };
|
||||
@@ -106,7 +106,7 @@
|
||||
XCTAssertEqualObjects(layer.<%- objCName(property) %>, functionExpression,
|
||||
@"<%- objCName(property) %> should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.<%- objCName(property) %> = functionExpression;
|
||||
|
||||
std::map<float, <%- mbglType(property) %>> innerStops { {18, <%- mbglTestValue(property, type) %>} };
|
||||
@@ -131,8 +131,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.<%- objCName(property) %> = functionExpression, NSException, NSInvalidArgumentException, @"MGL<%- camelize(type) %>Layer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.<%- objCName(property) %> = functionExpression, NSException, NSInvalidArgumentException, @"MGL<%- camelize(type) %>Layer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
<% } -%>
|
||||
<% if (property["transition"] && !property.original) { -%>
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
@"iconAllowsOverlap should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"true"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconAllowsOverlap = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -87,8 +87,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconAllowsOverlap = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconAllowsOverlap = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
@"iconAnchor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'bottom-right'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconAnchor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::SymbolAnchorType> intervalStops = {{
|
||||
@@ -145,7 +145,7 @@
|
||||
@"iconIgnoresPlacement should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"true"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconIgnoresPlacement = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -169,8 +169,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconIgnoresPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconIgnoresPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
@"iconImageName should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'Icon Image'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconImageName = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::string> intervalStops = {{
|
||||
@@ -233,7 +233,7 @@
|
||||
@"iconOffset should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconOffset = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::array<float, 2>> intervalStops = {{
|
||||
@@ -247,7 +247,7 @@
|
||||
XCTAssertEqualObjects(layer.iconOffset, functionExpression,
|
||||
@"iconOffset should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.iconOffset = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<std::array<float, 2>> exponentialStops = { {{18, { 1, 1 }}}, 1.0 };
|
||||
@@ -258,7 +258,7 @@
|
||||
XCTAssertEqualObjects(layer.iconOffset, functionExpression,
|
||||
@"iconOffset should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.iconOffset = functionExpression;
|
||||
|
||||
std::map<float, std::array<float, 2>> innerStops { {18, { 1, 1 }} };
|
||||
@@ -294,7 +294,7 @@
|
||||
@"iconOptional should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"true"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconOptional = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -318,8 +318,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconOptional = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconOptional = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -338,7 +338,7 @@
|
||||
@"iconPadding should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconPadding = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -362,8 +362,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -382,7 +382,7 @@
|
||||
@"iconPitchAlignment should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'auto'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconPitchAlignment = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::AlignmentType> intervalStops = {{
|
||||
@@ -406,8 +406,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconPitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconPitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -426,7 +426,7 @@
|
||||
@"iconRotation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconRotation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -440,7 +440,7 @@
|
||||
XCTAssertEqualObjects(layer.iconRotation, functionExpression,
|
||||
@"iconRotation should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.iconRotation = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -451,7 +451,7 @@
|
||||
XCTAssertEqualObjects(layer.iconRotation, functionExpression,
|
||||
@"iconRotation should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.iconRotation = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -487,7 +487,7 @@
|
||||
@"iconRotationAlignment should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'auto'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconRotationAlignment = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::AlignmentType> intervalStops = {{
|
||||
@@ -511,8 +511,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconRotationAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconRotationAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -531,7 +531,7 @@
|
||||
@"iconScale should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconScale = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -545,7 +545,7 @@
|
||||
XCTAssertEqualObjects(layer.iconScale, functionExpression,
|
||||
@"iconScale should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.iconScale = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -556,7 +556,7 @@
|
||||
XCTAssertEqualObjects(layer.iconScale, functionExpression,
|
||||
@"iconScale should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.iconScale = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -592,7 +592,7 @@
|
||||
@"iconTextFit should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'both'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconTextFit = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::IconTextFitType> intervalStops = {{
|
||||
@@ -616,8 +616,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconTextFit = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconTextFit = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -642,7 +642,7 @@
|
||||
@"iconTextFitPadding should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 1, 1, 1}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconTextFitPadding = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::array<float, 4>> intervalStops = {{
|
||||
@@ -666,8 +666,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconTextFitPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconTextFitPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -686,7 +686,7 @@
|
||||
@"keepsIconUpright should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"true"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.keepsIconUpright = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -710,8 +710,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.keepsIconUpright = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.keepsIconUpright = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -730,7 +730,7 @@
|
||||
@"keepsTextUpright should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"false"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.keepsTextUpright = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -754,8 +754,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.keepsTextUpright = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.keepsTextUpright = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -774,7 +774,7 @@
|
||||
@"maximumTextAngle should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.maximumTextAngle = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -798,8 +798,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.maximumTextAngle = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.maximumTextAngle = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -818,7 +818,7 @@
|
||||
@"maximumTextWidth should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.maximumTextWidth = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -832,7 +832,7 @@
|
||||
XCTAssertEqualObjects(layer.maximumTextWidth, functionExpression,
|
||||
@"maximumTextWidth should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.maximumTextWidth = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -843,7 +843,7 @@
|
||||
XCTAssertEqualObjects(layer.maximumTextWidth, functionExpression,
|
||||
@"maximumTextWidth should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.maximumTextWidth = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -879,7 +879,7 @@
|
||||
@"symbolAvoidsEdges should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"true"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.symbolAvoidsEdges = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -903,8 +903,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.symbolAvoidsEdges = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.symbolAvoidsEdges = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -923,7 +923,7 @@
|
||||
@"symbolPlacement should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'line'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.symbolPlacement = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::SymbolPlacementType> intervalStops = {{
|
||||
@@ -947,8 +947,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.symbolPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.symbolPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -967,7 +967,7 @@
|
||||
@"symbolSpacing should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.symbolSpacing = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -991,8 +991,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.symbolSpacing = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.symbolSpacing = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -1011,7 +1011,7 @@
|
||||
@"text should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'Text Field'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.text = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::string> intervalStops = {{
|
||||
@@ -1049,7 +1049,7 @@
|
||||
@"textAllowsOverlap should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"true"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textAllowsOverlap = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -1073,8 +1073,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.textAllowsOverlap = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.textAllowsOverlap = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -1093,7 +1093,7 @@
|
||||
@"textAnchor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'bottom-right'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textAnchor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::SymbolAnchorType> intervalStops = {{
|
||||
@@ -1131,7 +1131,7 @@
|
||||
@"textFontNames should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{'Text Font', 'Tnof Txet'}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textFontNames = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::vector<std::string>> intervalStops = {{
|
||||
@@ -1169,7 +1169,7 @@
|
||||
@"textFontSize should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textFontSize = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -1183,7 +1183,7 @@
|
||||
XCTAssertEqualObjects(layer.textFontSize, functionExpression,
|
||||
@"textFontSize should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.textFontSize = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -1194,7 +1194,7 @@
|
||||
XCTAssertEqualObjects(layer.textFontSize, functionExpression,
|
||||
@"textFontSize should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.textFontSize = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -1230,7 +1230,7 @@
|
||||
@"textIgnoresPlacement should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"true"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textIgnoresPlacement = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -1254,8 +1254,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.textIgnoresPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.textIgnoresPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -1274,7 +1274,7 @@
|
||||
@"textJustification should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'right'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textJustification = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::TextJustifyType> intervalStops = {{
|
||||
@@ -1312,7 +1312,7 @@
|
||||
@"textLetterSpacing should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textLetterSpacing = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -1326,7 +1326,7 @@
|
||||
XCTAssertEqualObjects(layer.textLetterSpacing, functionExpression,
|
||||
@"textLetterSpacing should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.textLetterSpacing = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -1337,7 +1337,7 @@
|
||||
XCTAssertEqualObjects(layer.textLetterSpacing, functionExpression,
|
||||
@"textLetterSpacing should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.textLetterSpacing = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -1373,7 +1373,7 @@
|
||||
@"textLineHeight should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textLineHeight = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -1397,8 +1397,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.textLineHeight = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.textLineHeight = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -1423,7 +1423,7 @@
|
||||
@"textOffset should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textOffset = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::array<float, 2>> intervalStops = {{
|
||||
@@ -1437,7 +1437,7 @@
|
||||
XCTAssertEqualObjects(layer.textOffset, functionExpression,
|
||||
@"textOffset should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.textOffset = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<std::array<float, 2>> exponentialStops = { {{18, { 1, 1 }}}, 1.0 };
|
||||
@@ -1448,7 +1448,7 @@
|
||||
XCTAssertEqualObjects(layer.textOffset, functionExpression,
|
||||
@"textOffset should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.textOffset = functionExpression;
|
||||
|
||||
std::map<float, std::array<float, 2>> innerStops { {18, { 1, 1 }} };
|
||||
@@ -1484,7 +1484,7 @@
|
||||
@"textOptional should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"true"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textOptional = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<bool> intervalStops = {{
|
||||
@@ -1508,8 +1508,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.textOptional = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.textOptional = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -1528,7 +1528,7 @@
|
||||
@"textPadding should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textPadding = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -1552,8 +1552,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.textPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.textPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -1572,7 +1572,7 @@
|
||||
@"textPitchAlignment should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'auto'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textPitchAlignment = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::AlignmentType> intervalStops = {{
|
||||
@@ -1596,8 +1596,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.textPitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.textPitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -1616,7 +1616,7 @@
|
||||
@"textRotation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textRotation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -1630,7 +1630,7 @@
|
||||
XCTAssertEqualObjects(layer.textRotation, functionExpression,
|
||||
@"textRotation should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.textRotation = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -1641,7 +1641,7 @@
|
||||
XCTAssertEqualObjects(layer.textRotation, functionExpression,
|
||||
@"textRotation should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.textRotation = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -1677,7 +1677,7 @@
|
||||
@"textRotationAlignment should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'auto'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textRotationAlignment = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::AlignmentType> intervalStops = {{
|
||||
@@ -1701,8 +1701,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.textRotationAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.textRotationAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -1721,7 +1721,7 @@
|
||||
@"textTransform should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'lowercase'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textTransform = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::TextTransformType> intervalStops = {{
|
||||
@@ -1759,7 +1759,7 @@
|
||||
@"iconColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -1773,7 +1773,7 @@
|
||||
XCTAssertEqualObjects(layer.iconColor, functionExpression,
|
||||
@"iconColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.iconColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -1784,7 +1784,7 @@
|
||||
XCTAssertEqualObjects(layer.iconColor, functionExpression,
|
||||
@"iconColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.iconColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -1829,7 +1829,7 @@
|
||||
@"iconHaloBlur should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconHaloBlur = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -1843,7 +1843,7 @@
|
||||
XCTAssertEqualObjects(layer.iconHaloBlur, functionExpression,
|
||||
@"iconHaloBlur should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.iconHaloBlur = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -1854,7 +1854,7 @@
|
||||
XCTAssertEqualObjects(layer.iconHaloBlur, functionExpression,
|
||||
@"iconHaloBlur should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.iconHaloBlur = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -1899,7 +1899,7 @@
|
||||
@"iconHaloColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconHaloColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -1913,7 +1913,7 @@
|
||||
XCTAssertEqualObjects(layer.iconHaloColor, functionExpression,
|
||||
@"iconHaloColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.iconHaloColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -1924,7 +1924,7 @@
|
||||
XCTAssertEqualObjects(layer.iconHaloColor, functionExpression,
|
||||
@"iconHaloColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.iconHaloColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -1969,7 +1969,7 @@
|
||||
@"iconHaloWidth should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconHaloWidth = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -1983,7 +1983,7 @@
|
||||
XCTAssertEqualObjects(layer.iconHaloWidth, functionExpression,
|
||||
@"iconHaloWidth should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.iconHaloWidth = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -1994,7 +1994,7 @@
|
||||
XCTAssertEqualObjects(layer.iconHaloWidth, functionExpression,
|
||||
@"iconHaloWidth should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.iconHaloWidth = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -2039,7 +2039,7 @@
|
||||
@"iconOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -2053,7 +2053,7 @@
|
||||
XCTAssertEqualObjects(layer.iconOpacity, functionExpression,
|
||||
@"iconOpacity should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.iconOpacity = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -2064,7 +2064,7 @@
|
||||
XCTAssertEqualObjects(layer.iconOpacity, functionExpression,
|
||||
@"iconOpacity should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.iconOpacity = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -2115,7 +2115,7 @@
|
||||
@"iconTranslation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconTranslation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::array<float, 2>> intervalStops = {{
|
||||
@@ -2139,8 +2139,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -2159,7 +2159,7 @@
|
||||
@"iconTranslationAnchor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'viewport'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.iconTranslationAnchor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::TranslateAnchorType> intervalStops = {{
|
||||
@@ -2183,8 +2183,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.iconTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -2203,7 +2203,7 @@
|
||||
@"textColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -2217,7 +2217,7 @@
|
||||
XCTAssertEqualObjects(layer.textColor, functionExpression,
|
||||
@"textColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.textColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -2228,7 +2228,7 @@
|
||||
XCTAssertEqualObjects(layer.textColor, functionExpression,
|
||||
@"textColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.textColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -2273,7 +2273,7 @@
|
||||
@"textHaloBlur should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textHaloBlur = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -2287,7 +2287,7 @@
|
||||
XCTAssertEqualObjects(layer.textHaloBlur, functionExpression,
|
||||
@"textHaloBlur should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.textHaloBlur = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -2298,7 +2298,7 @@
|
||||
XCTAssertEqualObjects(layer.textHaloBlur, functionExpression,
|
||||
@"textHaloBlur should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.textHaloBlur = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -2343,7 +2343,7 @@
|
||||
@"textHaloColor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textHaloColor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::Color> intervalStops = {{
|
||||
@@ -2357,7 +2357,7 @@
|
||||
XCTAssertEqualObjects(layer.textHaloColor, functionExpression,
|
||||
@"textHaloColor should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.textHaloColor = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<mbgl::Color> exponentialStops = { {{18, { 1, 0, 0, 1 }}}, 1.0 };
|
||||
@@ -2368,7 +2368,7 @@
|
||||
XCTAssertEqualObjects(layer.textHaloColor, functionExpression,
|
||||
@"textHaloColor should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.textHaloColor = functionExpression;
|
||||
|
||||
std::map<float, mbgl::Color> innerStops { {18, { 1, 0, 0, 1 }} };
|
||||
@@ -2413,7 +2413,7 @@
|
||||
@"textHaloWidth should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textHaloWidth = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -2427,7 +2427,7 @@
|
||||
XCTAssertEqualObjects(layer.textHaloWidth, functionExpression,
|
||||
@"textHaloWidth should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.textHaloWidth = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -2438,7 +2438,7 @@
|
||||
XCTAssertEqualObjects(layer.textHaloWidth, functionExpression,
|
||||
@"textHaloWidth should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.textHaloWidth = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -2483,7 +2483,7 @@
|
||||
@"textOpacity should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"0xff"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textOpacity = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<float> intervalStops = {{
|
||||
@@ -2497,7 +2497,7 @@
|
||||
XCTAssertEqualObjects(layer.textOpacity, functionExpression,
|
||||
@"textOpacity should round-trip camera expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(keyName, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}];
|
||||
layer.textOpacity = functionExpression;
|
||||
|
||||
mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
|
||||
@@ -2508,7 +2508,7 @@
|
||||
XCTAssertEqualObjects(layer.textOpacity, functionExpression,
|
||||
@"textOpacity should round-trip data expressions.");
|
||||
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
layer.textOpacity = functionExpression;
|
||||
|
||||
std::map<float, float> innerStops { {18, 0xff} };
|
||||
@@ -2559,7 +2559,7 @@
|
||||
@"textTranslation should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textTranslation = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<std::array<float, 2>> intervalStops = {{
|
||||
@@ -2583,8 +2583,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.textTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.textTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
|
||||
@@ -2603,7 +2603,7 @@
|
||||
@"textTranslationAnchor should round-trip constant value expressions.");
|
||||
|
||||
constantExpression = [NSExpression expressionWithFormat:@"'viewport'"];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
layer.textTranslationAnchor = functionExpression;
|
||||
|
||||
mbgl::style::IntervalStops<mbgl::style::TranslateAnchorType> intervalStops = {{
|
||||
@@ -2627,8 +2627,8 @@
|
||||
|
||||
functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
|
||||
XCTAssertThrowsSpecificNamed(layer.textTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION(bogus, 'mgl_stepWithMinimum:stops:', %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
|
||||
functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
|
||||
XCTAssertThrowsSpecificNamed(layer.textTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -969,7 +969,7 @@ typedef NS_ENUM(NSInteger, MBXSettingsMiscellaneousRows) {
|
||||
@12.0f: [UIColor greenColor],
|
||||
@14.0f: [UIColor blueColor]};
|
||||
waterLayer.fillColor = [NSExpression expressionWithFormat:
|
||||
@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)",
|
||||
waterColorStops];
|
||||
|
||||
NSDictionary *fillAntialiasedStops = @{@11: @YES,
|
||||
@@ -978,7 +978,7 @@ typedef NS_ENUM(NSInteger, MBXSettingsMiscellaneousRows) {
|
||||
@14: @NO,
|
||||
@15: @YES};
|
||||
waterLayer.fillAntialiased = [NSExpression expressionWithFormat:
|
||||
@"FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', false, %@)",
|
||||
@"mgl_step:from:stops:($zoomLevel, false, %@)",
|
||||
fillAntialiasedStops];
|
||||
}
|
||||
|
||||
@@ -991,7 +991,7 @@ typedef NS_ENUM(NSInteger, MBXSettingsMiscellaneousRows) {
|
||||
@10: @15,
|
||||
@15: @30};
|
||||
NSExpression *lineWidthExpression = [NSExpression expressionWithFormat:
|
||||
@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)",
|
||||
lineWidthStops];
|
||||
roadLayer.lineWidth = lineWidthExpression;
|
||||
roadLayer.lineGapWidth = lineWidthExpression;
|
||||
@@ -1000,7 +1000,7 @@ typedef NS_ENUM(NSInteger, MBXSettingsMiscellaneousRows) {
|
||||
@13: [UIColor yellowColor],
|
||||
@16: [UIColor cyanColor]};
|
||||
roadLayer.lineColor = [NSExpression expressionWithFormat:
|
||||
@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)",
|
||||
roadLineColorStops];
|
||||
|
||||
roadLayer.visible = YES;
|
||||
@@ -1018,7 +1018,7 @@ typedef NS_ENUM(NSInteger, MBXSettingsMiscellaneousRows) {
|
||||
NSDictionary *opacityStops = @{@20.0f: @1.0f,
|
||||
@5.0f: @0.0f};
|
||||
rasterLayer.rasterOpacity = [NSExpression expressionWithFormat:
|
||||
@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)",
|
||||
opacityStops];
|
||||
[self.mapView.style addLayer:rasterLayer];
|
||||
}
|
||||
|
||||
@@ -311,6 +311,11 @@ defined by the style specification.
|
||||
|
||||
### Expression operators
|
||||
|
||||
Many expression operators defined in the style specification have corresponding
|
||||
symbols to be used with the `+[NSExpression expressionWithFormat:]`,
|
||||
`+[NSExpression expressionForFunction:arguments:]`, or
|
||||
`+[NSExpression expressionForFunction:selectorName:arguments:]` method:
|
||||
|
||||
In style specification | Method, function, or predicate type | Format string syntax
|
||||
-----------------------|-------------------------------------|---------------------
|
||||
`array` | |
|
||||
@@ -320,15 +325,15 @@ In style specification | Method, function, or predicate type | Format string syn
|
||||
`string` | |
|
||||
`to-boolean` | `boolValue` |
|
||||
`to-color` | |
|
||||
`to-number` | `mgl_numberWithFallbackValues:` |
|
||||
`to-string` | `stringValue` |
|
||||
`to-number` | `mgl_numberWithFallbackValues:` | `CAST(zipCode, 'NSNumber')`
|
||||
`to-string` | `stringValue` | `CAST(ele, 'NSString')`
|
||||
`typeof` | |
|
||||
`geometry-type` | |
|
||||
`id` | |
|
||||
`properties` | |
|
||||
`at` | |
|
||||
`geometry-type` | |`$mgl_geometryType`
|
||||
`id` | |`$mgl_featureIdentifier`
|
||||
`properties` | |`$mgl_featureProperties`
|
||||
`at` | `objectFrom:withIndex:` | `array[n]`
|
||||
`get` | `+[NSExpression expressionForKeyPath:]` | Key path
|
||||
`has` | |
|
||||
`has` | `mgl_does:have:` | `mgl_does:have:(self, 'key')`
|
||||
`length` | `count:` | `count({1, 2, 2, 3, 4, 7, 9})`
|
||||
`!` | `NSNotPredicateType` | `NOT (p0 OR … OR pn)`
|
||||
`!=` | `NSNotEqualToPredicateOperatorType` | `key != value`
|
||||
@@ -339,14 +344,14 @@ In style specification | Method, function, or predicate type | Format string syn
|
||||
`>=` | `NSGreaterThanOrEqualToPredicateOperatorType` | `key >= value`
|
||||
`all` | `NSAndPredicateType` | `p0 AND … AND pn`
|
||||
`any` | `NSOrPredicateType` | `p0 OR … OR pn`
|
||||
`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` | `TERNARY(condition, trueExpression, falseExpression)`
|
||||
`coalesce` | |
|
||||
`match` | |
|
||||
`interpolate` | `mgl_interpolateWithCurveType:parameters:stops:` |
|
||||
`step` | `mgl_stepWithMinimum:stops:` |
|
||||
`let` | `mgl_expressionWithContext:` |
|
||||
`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` or `MGL_IF` | `TERNARY(1 = 2, YES, NO)` or `MGL_IF(1 = 2, YES, 2 = 2, YES, NO)`
|
||||
`coalesce` | `mgl_coalesce:` | `mgl_coalesce({x, y, z})`
|
||||
`match` | `MGL_MATCH` | `MGL_MATCH(x, 0, 'zero match', 1, 'one match', 'two match', 'default')`
|
||||
`interpolate` | `mgl_interpolate:withCurveType:parameters:stops:` |
|
||||
`step` | `mgl_step:withMinimum:stops:` |
|
||||
`let` | `mgl_expressionWithContext:` | `MGL_LET('ios', 11, 'macos', 10.13, $ios + $macos)`
|
||||
`var` | `+[NSExpression expressionForVariable:]` | `$variable`
|
||||
`concat` | `stringByAppendingString:` |
|
||||
`concat` | `mgl_join:` | `mgl_join({'Old', ' ', 'MacDonald'})`
|
||||
`downcase` | `lowercase:` | `lowercase('DOWNTOWN')`
|
||||
`upcase` | `uppercase:` | `uppercase('Elysian Fields')`
|
||||
`rgb` | `+[UIColor colorWithRed:green:blue:alpha:]` |
|
||||
@@ -376,6 +381,9 @@ In style specification | Method, function, or predicate type | Format string syn
|
||||
`zoom` | | `$zoom`
|
||||
`heatmap-density` | | `$heatmapDensity`
|
||||
|
||||
For operators that have no corresponding `NSExpression` symbol, use the
|
||||
`MGL_FUNCTION()` format string syntax.
|
||||
|
||||
## Filtering sources
|
||||
|
||||
You can filter a shape or vector source by setting the
|
||||
|
||||
@@ -66,7 +66,7 @@ let stops: [Float: UIColor] = [
|
||||
]
|
||||
|
||||
let layer = MGLCircleStyleLayer(identifier: "circles", source: source)
|
||||
layer.circleColor = NSExpression(format: "FUNCTION(mag, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
layer.circleColor = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(mag, 'linear', nil, %@)",
|
||||
stops)
|
||||
layer.circleRadius = NSExpression(forConstantValue: 10)
|
||||
mapView.style?.insertLayer(layer, below: symbolLayer)
|
||||
@@ -92,7 +92,7 @@ let stops = [
|
||||
18: 18,
|
||||
]
|
||||
|
||||
layer.circleRadius = NSExpression(format: "FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'exponential', 1.5, %@)",
|
||||
layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)",
|
||||
stops)
|
||||
```
|
||||
|
||||
@@ -111,7 +111,7 @@ let stops: [Float: UIColor] = [
|
||||
10: .white,
|
||||
]
|
||||
|
||||
layer.circleColor = NSExpression(format: "FUNCTION(mag, 'mgl_stepWithMinimum:stops:', %@, %@)",
|
||||
layer.circleColor = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)",
|
||||
UIColor.green, stops)
|
||||
```
|
||||
|
||||
|
||||
@@ -894,7 +894,7 @@ NS_ARRAY_OF(id <MGLAnnotation>) *MBXFlattenedShapes(NS_ARRAY_OF(id <MGLAnnotatio
|
||||
self.mapView.style.transition = transition;
|
||||
|
||||
MGLStyleLayer *waterLayer = [self.mapView.style layerWithIdentifier:@"water"];
|
||||
NSExpression *colorExpression = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{
|
||||
NSExpression *colorExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{
|
||||
@0.0: [NSColor redColor],
|
||||
@10.0: [NSColor yellowColor],
|
||||
@20.0: [NSColor blackColor],
|
||||
@@ -927,7 +927,7 @@ NS_ARRAY_OF(id <MGLAnnotation>) *MBXFlattenedShapes(NS_ARRAY_OF(id <MGLAnnotatio
|
||||
theaterLayer.predicate = [NSPredicate predicateWithFormat:@"maki == 'theatre'"];
|
||||
theaterLayer.iconImageName = [NSExpression expressionForConstantValue:NSImageNameIChatTheaterTemplate];
|
||||
theaterLayer.iconScale = [NSExpression expressionForConstantValue:@2];
|
||||
theaterLayer.iconColor = [NSExpression expressionWithFormat:@"FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", @{
|
||||
theaterLayer.iconColor = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{
|
||||
@16.0: [NSColor redColor],
|
||||
@18.0: [NSColor yellowColor],
|
||||
@20.0: [NSColor blackColor],
|
||||
|
||||
@@ -304,6 +304,11 @@ iOS.
|
||||
|
||||
### Expression operators
|
||||
|
||||
Many expression operators defined in the style specification have corresponding
|
||||
symbols to be used with the `+[NSExpression expressionWithFormat:]`,
|
||||
`+[NSExpression expressionForFunction:arguments:]`, or
|
||||
`+[NSExpression expressionForFunction:selectorName:arguments:]` method:
|
||||
|
||||
In style specification | Method, function, or predicate type | Format string syntax
|
||||
-----------------------|-------------------------------------|---------------------
|
||||
`array` | |
|
||||
@@ -313,15 +318,15 @@ In style specification | Method, function, or predicate type | Format string syn
|
||||
`string` | |
|
||||
`to-boolean` | `boolValue` |
|
||||
`to-color` | |
|
||||
`to-number` | `mgl_numberWithFallbackValues:` |
|
||||
`to-string` | `stringValue` |
|
||||
`to-number` | `mgl_numberWithFallbackValues:` | `CAST(zipCode, 'NSNumber')`
|
||||
`to-string` | `stringValue` | `CAST(ele, 'NSString')`
|
||||
`typeof` | |
|
||||
`geometry-type` | |
|
||||
`id` | |
|
||||
`properties` | |
|
||||
`at` | |
|
||||
`geometry-type` | |`$mgl_geometryType`
|
||||
`id` | |`$mgl_featureIdentifier`
|
||||
`properties` | |`$mgl_featureProperties`
|
||||
`at` | `objectFrom:withIndex:` | `array[n]`
|
||||
`get` | `+[NSExpression expressionForKeyPath:]` | Key path
|
||||
`has` | |
|
||||
`has` | `mgl_does:have:` | `mgl_does:have:(self, 'key')`
|
||||
`length` | `count:` | `count({1, 2, 2, 3, 4, 7, 9})`
|
||||
`!` | `NSNotPredicateType` | `NOT (p0 OR … OR pn)`
|
||||
`!=` | `NSNotEqualToPredicateOperatorType` | `key != value`
|
||||
@@ -332,14 +337,14 @@ In style specification | Method, function, or predicate type | Format string syn
|
||||
`>=` | `NSGreaterThanOrEqualToPredicateOperatorType` | `key >= value`
|
||||
`all` | `NSAndPredicateType` | `p0 AND … AND pn`
|
||||
`any` | `NSOrPredicateType` | `p0 OR … OR pn`
|
||||
`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` | `TERNARY(condition, trueExpression, falseExpression)`
|
||||
`coalesce` | |
|
||||
`match` | |
|
||||
`interpolate` | `mgl_interpolateWithCurveType:parameters:stops:` |
|
||||
`step` | `mgl_stepWithMinimum:stops:` |
|
||||
`let` | `mgl_expressionWithContext:` |
|
||||
`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` or `MGL_IF` | `TERNARY(1 = 2, YES, NO)` or `MGL_IF(1 = 2, YES, 2 = 2, YES, NO)`
|
||||
`coalesce` | `mgl_coalesce:` | `mgl_coalesce({x, y, z})`
|
||||
`match` | `MGL_MATCH` | `MGL_MATCH(x, 0, 'zero match', 1, 'one match', 'two match', 'default')`
|
||||
`interpolate` | `mgl_interpolate:withCurveType:parameters:stops:` |
|
||||
`step` | `mgl_step:withMinimum:stops:` |
|
||||
`let` | `mgl_expressionWithContext:` | `MGL_LET('ios', 11, 'macos', 10.13, $ios + $macos)`
|
||||
`var` | `+[NSExpression expressionForVariable:]` | `$variable`
|
||||
`concat` | `stringByAppendingString:` |
|
||||
`concat` | `mgl_join:` | `mgl_join({'Old', ' ', 'MacDonald'})`
|
||||
`downcase` | `lowercase:` | `lowercase('DOWNTOWN')`
|
||||
`upcase` | `uppercase:` | `uppercase('Elysian Fields')`
|
||||
`rgb` | `+[NSColor colorWithCalibratedRed:green:blue:alpha:]` |
|
||||
@@ -369,6 +374,9 @@ In style specification | Method, function, or predicate type | Format string syn
|
||||
`zoom` | | `$zoom`
|
||||
`heatmap-density` | | `$heatmapDensity`
|
||||
|
||||
For operators that have no corresponding `NSExpression` symbol, use the
|
||||
`MGL_FUNCTION()` format string syntax.
|
||||
|
||||
## Filtering sources
|
||||
|
||||
You can filter a shape or vector source by setting the
|
||||
|
||||
@@ -66,7 +66,7 @@ let stops: [Float: NSColor] = [
|
||||
]
|
||||
|
||||
let layer = MGLCircleStyleLayer(identifier: "circles", source: source)
|
||||
layer.circleColor = NSExpression(format: "FUNCTION(mag, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)",
|
||||
layer.circleColor = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(mag, 'linear', nil, %@)",
|
||||
stops)
|
||||
layer.circleRadius = NSExpression(forConstantValue: 10)
|
||||
mapView.style?.insertLayer(layer, below: symbolLayer)
|
||||
@@ -92,7 +92,7 @@ let stops = [
|
||||
18: 18,
|
||||
]
|
||||
|
||||
layer.circleRadius = NSExpression(format: "FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'exponential', 1.5, %@)",
|
||||
layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)",
|
||||
stops)
|
||||
```
|
||||
|
||||
@@ -111,7 +111,7 @@ let stops: [Float: NSColor] = [
|
||||
10: .white,
|
||||
]
|
||||
|
||||
layer.circleColor = NSExpression(format: "FUNCTION(mag, 'mgl_stepWithMinimum:stops:', %@, %@)",
|
||||
layer.circleColor = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)",
|
||||
NSColor.green, stops)
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user