mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
Fixed arrays parsing in typed actions
commit_hash:b733843b84446f26a3b976873106919ed2570960
This commit is contained in:
@@ -6,8 +6,9 @@ extension DivTypedValue {
|
||||
) -> DivVariableValue? {
|
||||
switch self {
|
||||
case let .arrayValue(value):
|
||||
if let arrayValue = value.resolveValue(expressionResolver) as? DivArray {
|
||||
return .array(arrayValue)
|
||||
if let array = value.resolveValue(expressionResolver),
|
||||
let divArray = DivArray.fromAny(array) {
|
||||
return .array(divArray)
|
||||
}
|
||||
return nil
|
||||
case let .booleanValue(value):
|
||||
@@ -53,8 +54,8 @@ extension DivTypedValue {
|
||||
) -> AnyHashable? {
|
||||
switch self {
|
||||
case let .arrayValue(value):
|
||||
if let arrayValue = value.resolveValue(expressionResolver) as? DivArray {
|
||||
return arrayValue
|
||||
if let arrayValue = value.resolveValue(expressionResolver) {
|
||||
return DivArray.fromAny(arrayValue)
|
||||
}
|
||||
return nil
|
||||
case let .booleanValue(value):
|
||||
@@ -68,10 +69,7 @@ extension DivTypedValue {
|
||||
}
|
||||
return nil
|
||||
case let .dictValue(value):
|
||||
if let dictValue = value.value as? DivDictionary {
|
||||
return dictValue
|
||||
}
|
||||
return nil
|
||||
return DivDictionary.fromAny(value.value)
|
||||
case let .integerValue(value):
|
||||
if let integerValue = value.resolveValue(expressionResolver) {
|
||||
return integerValue
|
||||
|
||||
@@ -224,6 +224,40 @@ final class DivActionHandlerTests: XCTestCase {
|
||||
XCTAssertEqual(["one", "new value"], getVariableValue("array_var"))
|
||||
}
|
||||
|
||||
func test_ArraySetValueAction_SetsArrayValue() {
|
||||
setVariableValue("array_var", .array(["one", "two"]))
|
||||
|
||||
handle(.divActionArraySetValue(
|
||||
DivActionArraySetValue(
|
||||
index: .value(1),
|
||||
value: arrayValue(["new value", ["key1": "value", "key2": 123.45]]),
|
||||
variableName: .value("array_var")
|
||||
)
|
||||
))
|
||||
|
||||
XCTAssertEqual(
|
||||
DivArray.fromAny(["one", ["new value", ["key1": "value", "key2": 123.45]]])!,
|
||||
getVariableValue("array_var")
|
||||
)
|
||||
}
|
||||
|
||||
func test_ArraySetValueAction_SetsDictValue() {
|
||||
setVariableValue("array_var", .array(["one", "two"]))
|
||||
|
||||
handle(.divActionArraySetValue(
|
||||
DivActionArraySetValue(
|
||||
index: .value(1),
|
||||
value: .dictValue(DictValue(value: ["key1": "value", "key2": 123.45])),
|
||||
variableName: .value("array_var")
|
||||
)
|
||||
))
|
||||
|
||||
XCTAssertEqual(
|
||||
DivArray.fromAny(["one", ["key1": "value", "key2": 123.45]])!,
|
||||
getVariableValue("array_var")
|
||||
)
|
||||
}
|
||||
|
||||
func test_ArraySetValueAction_DoesNothingForInvalidIndex() {
|
||||
setVariableValue("array_var", .array(["one", "two"]))
|
||||
|
||||
@@ -456,32 +490,29 @@ final class DivActionHandlerTests: XCTestCase {
|
||||
func test_SetVariableAction_SetsArrayVariable() {
|
||||
setVariableValue("array_var", .array([]))
|
||||
|
||||
let value: [Any] = [["key1": "value", "key2": 123.45], ["key1": "value", "key2": true]]
|
||||
handle(.divActionSetVariable(
|
||||
DivActionSetVariable(
|
||||
value: .arrayValue(ArrayValue(value: .value(["value 1", "value 2"]))),
|
||||
value: arrayValue(value),
|
||||
variableName: .value("array_var")
|
||||
)
|
||||
))
|
||||
|
||||
XCTAssertEqual(["value 1", "value 2"], getVariableValue("array_var"))
|
||||
XCTAssertEqual(DivArray.fromAny(value)!, getVariableValue("array_var"))
|
||||
}
|
||||
|
||||
func test_SetVariableAction_SetsDictVariable() {
|
||||
setVariableValue("dict_var", .dict([:]))
|
||||
|
||||
let value: [String: Any] = ["key1": "value", "key2": 123.45, "nested": ["key": "value"]]
|
||||
handle(.divActionSetVariable(
|
||||
DivActionSetVariable(
|
||||
value: .dictValue(DictValue(
|
||||
value: ["key_1": "value_1", "nested": ["key_2": "value_2"]]
|
||||
)),
|
||||
value: .dictValue(DictValue(value: value)),
|
||||
variableName: .value("dict_var")
|
||||
)
|
||||
))
|
||||
|
||||
XCTAssertEqual(
|
||||
["key_1": "value_1", "nested": ["key_2": "value_2"]] as DivDictionary,
|
||||
getVariableValue("dict_var")
|
||||
)
|
||||
XCTAssertEqual(DivDictionary.fromAny(value)!, getVariableValue("dict_var"))
|
||||
}
|
||||
|
||||
func test_SetVariableAction_SetsLocalVariable() {
|
||||
@@ -582,6 +613,10 @@ final class DivActionHandlerTests: XCTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
private func arrayValue(_ value: [Any]) -> DivTypedValue {
|
||||
.arrayValue(ArrayValue(value: .value(value)))
|
||||
}
|
||||
|
||||
private func stringValue(_ value: String) -> DivTypedValue {
|
||||
.stringValue(StringValue(value: .value(value)))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user