mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
Fixed number to boolean conversion
commit_hash:62352ebdc0bd9ffc75e44e6a16f8e444896e6315
This commit is contained in:
@@ -11,6 +11,15 @@ enum ExpressionValueConverter {
|
||||
switch T.self {
|
||||
case is String.Type:
|
||||
return stringify(anyValue) as? T
|
||||
case is Bool.Type:
|
||||
if let numberValue = anyValue as? NSNumber {
|
||||
if numberValue == 0 {
|
||||
return false as? T
|
||||
} else if numberValue == 1 {
|
||||
return true as? T
|
||||
}
|
||||
}
|
||||
return nil
|
||||
case let numericType as _Numeric.Type:
|
||||
if anyValue is Bool {
|
||||
return nil
|
||||
|
||||
@@ -187,6 +187,50 @@ final class ExpressionResolverTests: XCTestCase {
|
||||
XCTAssertTrue(value)
|
||||
}
|
||||
|
||||
func test_ResolveNumeric_BooleanFromInteger_False() {
|
||||
let value: Bool = expressionResolver.resolveNumeric(expression("@{0}"))!
|
||||
XCTAssertFalse(value)
|
||||
}
|
||||
|
||||
func test_ResolveNumeric_BooleanFromInteger_True() {
|
||||
let value: Bool = expressionResolver.resolveNumeric(expression("@{1}"))!
|
||||
XCTAssertTrue(value)
|
||||
}
|
||||
|
||||
func test_ResolveNumeric_BooleanFromInteger_Invalid() {
|
||||
isErrorExpected = true
|
||||
|
||||
let value: Bool? = expressionResolver.resolveNumeric(expression("@{3}"))
|
||||
XCTAssertNil(value)
|
||||
|
||||
XCTAssertEqual(
|
||||
error,
|
||||
"Invalid result type: expected Boolean, got Integer. Expression: @{3}"
|
||||
)
|
||||
}
|
||||
|
||||
func test_ResolveNumeric_BooleanFromNumber_False() {
|
||||
let value: Bool = expressionResolver.resolveNumeric(expression("@{0.0}"))!
|
||||
XCTAssertFalse(value)
|
||||
}
|
||||
|
||||
func test_ResolveNumeric_BooleanFromNumber_True() {
|
||||
let value: Bool = expressionResolver.resolveNumeric(expression("@{1.0}"))!
|
||||
XCTAssertTrue(value)
|
||||
}
|
||||
|
||||
func test_ResolveNumeric_BooleanFromNumber_Invalid() {
|
||||
isErrorExpected = true
|
||||
|
||||
let value: Bool? = expressionResolver.resolveNumeric(expression("@{1.2}"))
|
||||
XCTAssertNil(value)
|
||||
|
||||
XCTAssertEqual(
|
||||
error,
|
||||
"Invalid result type: expected Boolean, got Number. Expression: @{1.2}"
|
||||
)
|
||||
}
|
||||
|
||||
func test_ResolveNumeric_IntegerAsNumber() {
|
||||
let value: Double? = expressionResolver.resolveNumeric(expression("@{integer_var}"))
|
||||
XCTAssertEqual(value, 123.0)
|
||||
|
||||
Reference in New Issue
Block a user