diff --git a/client/ios/DivKit/Variables/DivVariablesStorage.swift b/client/ios/DivKit/Variables/DivVariablesStorage.swift index dbfbe074a..f5808d506 100644 --- a/client/ios/DivKit/Variables/DivVariablesStorage.swift +++ b/client/ios/DivKit/Variables/DivVariablesStorage.swift @@ -235,16 +235,12 @@ extension Dictionary where Key == DivVariableName, Value == DivVariableValue { newValue = nil } case .bool: - if let newBool = Int(value) { - switch newBool { - case 0: - newValue = .bool(false) - case 1: - newValue = .bool(true) - default: - newValue = nil - } - } else { + switch value.lowercased() { + case "0", "false": + newValue = .bool(false) + case "1", "true": + newValue = .bool(true) + default: newValue = nil } case .color: diff --git a/client/ios/DivKitTests/Variables/DivVariablesStorageTest.swift b/client/ios/DivKitTests/Variables/DivVariablesStorageTest.swift index 5d1ed9206..e81feab7a 100644 --- a/client/ios/DivKitTests/Variables/DivVariablesStorageTest.swift +++ b/client/ios/DivKitTests/Variables/DivVariablesStorageTest.swift @@ -104,7 +104,7 @@ final class DivVariablesStorageTest: XCTestCase { storage.set(variables: globalVariables, triggerUpdate: false) storage.set(cardId: cardId, variables: variables) - XCTAssertEqual(.string("value"), makeVariables()["string_var"]) + XCTAssertEqual(.string("value"), getVariable("string_var")) } func test_LocalVaraibleShadowsGlobalVariable_LocalsSetBeforeGlobals() { @@ -115,21 +115,42 @@ final class DivVariablesStorageTest: XCTestCase { ] storage.set(variables: globalVariables, triggerUpdate: false) - XCTAssertEqual(.string("value"), makeVariables()["string_var"]) + XCTAssertEqual(.string("value"), getVariable("string_var")) } func test_update_UpdatesStringVariable() { storage.set(cardId: cardId, variables: variables) storage.update(cardId: cardId, name: "string_var", value: "new value") - XCTAssertEqual(.string("new value"), makeVariables()["string_var"]) + XCTAssertEqual(.string("new value"), getVariable("string_var")) } func test_update_UpdatesNumberVariable() { storage.set(cardId: cardId, variables: variables) storage.update(cardId: cardId, name: "number_var", value: "234.567") - XCTAssertEqual(.number(234.567), makeVariables()["number_var"]) + XCTAssertEqual(.number(234.567), getVariable("number_var")) + } + + func test_update_UpdatesBoolVariable_BoolValue() { + storage.set(cardId: cardId, variables: [ "bool_var": .bool(false) ]) + storage.update(cardId: cardId, name: "bool_var", value: "true") + + XCTAssertEqual(.bool(true), getVariable("bool_var")) + } + + func test_update_UpdatesBoolVariable_MixedCase() { + storage.set(cardId: cardId, variables: [ "bool_var": .bool(false) ]) + storage.update(cardId: cardId, name: "bool_var", value: "tRuE") + + XCTAssertEqual(.bool(true), getVariable("bool_var")) + } + + func test_update_UpdatesBoolVariable_IntValue() { + storage.set(cardId: cardId, variables: [ "bool_var": .bool(false) ]) + storage.update(cardId: cardId, name: "bool_var", value: "1") + + XCTAssertEqual(.bool(true), getVariable("bool_var")) } func test_update_DoesNothing_ForUnknownVariable() { @@ -175,7 +196,7 @@ final class DivVariablesStorageTest: XCTestCase { storage.update(cardId: cardId, name: "global_var", value: "new value") - XCTAssertEqual(.string("new value"), makeVariables()["global_var"]) + XCTAssertEqual(.string("new value"), getVariable("global_var")) } func test_update_DoesNotUpdateShadowedGlobalVariable() { @@ -249,6 +270,10 @@ final class DivVariablesStorageTest: XCTestCase { private func makeVariables(cardId: DivCardID = cardId) -> DivVariables { storage.makeVariables(for: cardId) } + + private func getVariable(_ name: DivVariableName) -> DivVariableValue? { + storage.makeVariables(for: cardId)[name] + } } private let cardId = DivCardID(rawValue: "test_card")