Fixed warnings for empty containers

commit_hash:a787cf0d48bcd5e06c394050aebebf50bfa0099d
This commit is contained in:
pkurchatov
2024-10-08 12:20:20 +03:00
parent 4bee0790fa
commit f53e06c541
5 changed files with 101 additions and 8 deletions
@@ -13,6 +13,11 @@ struct DivContainerSizeModifier: DivSizeModifier {
orientation: DivContainer.Orientation
) {
let items = container.nonNilItems
if items.isEmpty {
shouldOverrideWidth = false
shouldOverrideHeight = false
return
}
let isWrapContentWidth = container.getTransformedWidth(context).isIntrinsic
switch orientation {
@@ -42,6 +42,29 @@ final class DivContainerExtensionsTests: XCTestCase {
assertEqual(block, expectedBlock)
}
func test_EmptyItems_WrapContent() throws {
let block = makeBlock(
divContainer(
items: [],
width: wrapContentSize()
)
)
let expectedBlock = try StateBlock(
child: DecoratingBlock(
child: ContainerBlock(
layoutDirection: .vertical,
widthTrait: .intrinsic,
children: []
),
accessibilityElement: .default
),
ids: []
)
assertEqual(block, expectedBlock)
}
func test_WithItems() throws {
let block = makeBlock(
divContainer(
@@ -316,6 +339,58 @@ final class DivContainerExtensionsTests: XCTestCase {
assertEqual(block, expectedBlock)
}
func test_WrapContent_MatchParentItem() throws {
let context = DivBlockModelingContext()
let block = makeBlock(
divContainer(
items: [
divText(
text: "Hello!",
width: matchParentSize()
),
],
width: wrapContentSize()
),
context: context,
ignoreErrors: true
)
let expectedBlock = try StateBlock(
child: DecoratingBlock(
child: ContainerBlock(
layoutDirection: .vertical,
widthTrait: .intrinsic,
children: [
DecoratingBlock(
child: textBlock(
widthTrait: .intrinsic(
constrained: true,
minSize: 0,
maxSize: .infinity
),
text: "Hello!"
),
accessibilityElement: accessibility(
traits: .staticText,
label: "Hello!"
)
),
]
),
accessibilityElement: .default
),
ids: []
)
assertEqual(block, expectedBlock)
assertEqual(context.errorsStorage.errors.count, 1)
assertEqual(
context.errorsStorage.errors.first?.message,
"All items in DivContainer with wrap_content width has match_parent width"
)
}
func test_AddsIndexedParentPathToItems() throws {
let block = try makeBlock(
fromFile: "item_with_action"
@@ -1,15 +1,19 @@
@testable import DivKit
@testable import LayoutKit
import Foundation
@testable import LayoutKit
import VGSL
import XCTest
func makeBlock(
_ div: Div,
context: DivBlockModelingContext = DivBlockModelingContext()
context: DivBlockModelingContext = DivBlockModelingContext(),
ignoreErrors: Bool = false
) -> StateBlock {
try! divData(div).makeBlock(context: context) as! StateBlock
let block = try! divData(div).makeBlock(context: context) as! StateBlock
if !ignoreErrors, let error = context.errorsStorage.errors.first {
XCTFail(error.message)
}
return block
}
func separatorBlock() -> Block {
@@ -18,9 +22,12 @@ func separatorBlock() -> Block {
)
}
func textBlock(text: String) -> Block {
func textBlock(
widthTrait: LayoutTrait = .resizable,
text: String
) -> Block {
TextBlock(
widthTrait: .resizable,
widthTrait: widthTrait,
text: text.withTypo(),
verticalAlignment: .leading,
accessibilityElement: nil
@@ -481,6 +481,10 @@ func fixedSize(_ value: Int) -> DivSize {
.divFixedSize(DivFixedSize(value: .value(value)))
}
func matchParentSize() -> DivSize {
.divMatchParentSize(DivMatchParentSize())
}
func wrapContentSize() -> DivSize {
.divWrapContentSize(DivWrapContentSize())
}
@@ -156,7 +156,9 @@ public final class ContainerBlock: BlockWithLayout {
self.clipContent = clipContent
self.accessibilityElement = accessibilityElement
try validateLayoutTraits()
if !children.isEmpty {
try validateLayoutTraits()
}
}
public func ascent(forWidth width: CGFloat) -> CGFloat? {