Fixed number to boolean conversion

commit_hash:62352ebdc0bd9ffc75e44e6a16f8e444896e6315
This commit is contained in:
pkurchatov
2024-12-02 18:39:17 +03:00
parent 0cb8e799d7
commit f4cbb5da10
2 changed files with 53 additions and 0 deletions
@@ -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)