mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
245 lines
5.9 KiB
Swift
245 lines
5.9 KiB
Swift
@testable import DivKit
|
|
import DivKitTestsSupport
|
|
@testable import LayoutKit
|
|
import Testing
|
|
import UIKit
|
|
import VGSL
|
|
|
|
@Suite
|
|
struct DivBaseExtensionsAndAccessibilityElementsStorageTests {
|
|
@Test
|
|
func getOrderedIds_WhenForwardIdExist() {
|
|
let testData = divData(
|
|
divGallery(
|
|
items: [
|
|
createDivTextWithNextFocusId(
|
|
id: "firstId",
|
|
forwardId: "firstId"
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
#expect(getOrderedIds(divData: testData) == ["firstId"])
|
|
}
|
|
|
|
@Test
|
|
func getOeredIds_WhenForwardIdNotExist() {
|
|
let testData = divData(
|
|
divGallery(
|
|
items: [
|
|
createDivTextWithNextFocusId(
|
|
id: "firstId",
|
|
forwardId: "secondId"
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
#expect(getOrderedIds(divData: testData) == ["firstId", "secondId"])
|
|
}
|
|
|
|
@Test
|
|
func getOrderedIds_CycleOfTwoElements() {
|
|
let testData = divData(
|
|
divGallery(
|
|
items: [
|
|
createDivTextWithNextFocusId(
|
|
id: "firstId",
|
|
forwardId: "secondId"
|
|
),
|
|
createDivTextWithNextFocusId(
|
|
id: "secondId",
|
|
forwardId: "firstId"
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
#expect(getOrderedIds(divData: testData) == ["firstId", "secondId"])
|
|
}
|
|
|
|
@Test
|
|
func getAccessibilityElemenents_WhenForwardIdExist() async {
|
|
let testData = divData(
|
|
divGallery(
|
|
items: [
|
|
createDivTextWithNextFocusId(
|
|
id: "firstId",
|
|
forwardId: "firstId"
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
#expect(await getAccessibilityIds(divData: testData) == ["firstId"])
|
|
}
|
|
|
|
@Test
|
|
func getAccessibilityElemenents_WhenForwardIdNotExist() async {
|
|
let testData = divData(
|
|
divGallery(
|
|
items: [
|
|
createDivTextWithNextFocusId(
|
|
id: "firstId",
|
|
forwardId: "secondId"
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
#expect(await getAccessibilityIds(divData: testData) == ["firstId"])
|
|
}
|
|
|
|
@Test
|
|
func getAccessibilityElemenents_CycleOfTwoElements() async {
|
|
let testData = divData(
|
|
divContainer(
|
|
items: [
|
|
createDivTextWithNextFocusId(
|
|
id: "firstId",
|
|
forwardId: "secondId"
|
|
),
|
|
createDivTextWithNextFocusId(
|
|
id: "secondId",
|
|
forwardId: "firstId"
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
#expect(await getAccessibilityIds(divData: testData) == ["firstId", "secondId"])
|
|
}
|
|
|
|
@Test
|
|
func getAccessibilityElemenents_SecondElementDivVisibilityVisible() async {
|
|
let testData = divData(
|
|
divContainer(
|
|
items: [
|
|
createDivTextWithNextFocusId(
|
|
id: "firstId",
|
|
forwardId: "secondId"
|
|
),
|
|
divText(
|
|
focus: DivFocus(
|
|
nextFocusIds: DivFocus.NextFocusIds(
|
|
forward: .value("thirdId")
|
|
)
|
|
),
|
|
id: "secondId",
|
|
width: fixedSize(10),
|
|
visibility: .value(.visible)
|
|
),
|
|
createDivTextWithNextFocusId(
|
|
id: "thirdId",
|
|
forwardId: "firstId"
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
#expect(await getAccessibilityIds(divData: testData) == ["firstId", "secondId", "thirdId"])
|
|
}
|
|
|
|
@Test
|
|
func getAccessibilityElemenents_SecondElementDivVisibilityGone() async {
|
|
let testData = divData(
|
|
divContainer(
|
|
items: [
|
|
createDivTextWithNextFocusId(
|
|
id: "firstId",
|
|
forwardId: "secondId"
|
|
),
|
|
divText(
|
|
focus: DivFocus(
|
|
nextFocusIds: DivFocus.NextFocusIds(
|
|
forward: .value("thirdId")
|
|
)
|
|
),
|
|
id: "secondId",
|
|
width: fixedSize(10),
|
|
visibility: .value(.gone)
|
|
),
|
|
createDivTextWithNextFocusId(
|
|
id: "thirdId",
|
|
forwardId: "firstId"
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
#expect(await getAccessibilityIds(divData: testData) == ["firstId", "thirdId"])
|
|
}
|
|
|
|
@Test
|
|
func getAccessibilityElemenents_DivVisibilityInvisible() async {
|
|
let testData = divData(
|
|
divContainer(
|
|
items: [
|
|
createDivTextWithNextFocusId(
|
|
id: "firstId",
|
|
forwardId: "secondId"
|
|
),
|
|
divText(
|
|
focus: DivFocus(
|
|
nextFocusIds: DivFocus.NextFocusIds(
|
|
forward: .value("thirdId")
|
|
)
|
|
),
|
|
id: "secondId",
|
|
width: fixedSize(10),
|
|
visibility: .value(.invisible)
|
|
),
|
|
createDivTextWithNextFocusId(
|
|
id: "thirdId",
|
|
forwardId: "firstId"
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
#expect(await getAccessibilityIds(divData: testData) == ["firstId", "thirdId"])
|
|
}
|
|
|
|
private func createDivTextWithNextFocusId(id: String, forwardId: String) -> Div {
|
|
divText(
|
|
focus: DivFocus(
|
|
nextFocusIds: DivFocus.NextFocusIds(
|
|
forward: .value(forwardId)
|
|
)
|
|
),
|
|
id: id,
|
|
width: fixedSize(10)
|
|
)
|
|
}
|
|
|
|
private func getOrderedIds(divData: DivData) -> [String]? {
|
|
let context = DivBlockModelingContext()
|
|
_ = try! divData.makeBlock(context: context)
|
|
|
|
return context.accessibilityElementsStorage.getOrderedIds()
|
|
}
|
|
|
|
@MainActor
|
|
private func getAccessibilityIds(divData: DivData) async -> [String]? {
|
|
let divView = DivView(divKitComponents: DivKitComponents())
|
|
await divView.setSource(.init(kind: .divData(divData), cardId: "card"))
|
|
divView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
|
|
divView.forceLayout()
|
|
|
|
guard let elements = divView.accessibilityElements else {
|
|
Issue.record("accessibilityElements are not available or have the wrong type")
|
|
return nil
|
|
}
|
|
|
|
let ids = elements.compactMap { element -> String? in
|
|
if let element = element as? UIView {
|
|
return element.accessibilityIdentifier
|
|
}
|
|
return nil
|
|
}
|
|
|
|
return ids
|
|
}
|
|
}
|