1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
/*
This source file is part of the Swift.org open source project
Copyright (c) 2021 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/
import XCTest
@testable import Markdown
final class BasicInlineContainerTests: XCTestCase {
func testFromSequence() {
let expectedChildren = Array(repeating: Text("OK"), count: 3)
let emphasis = Emphasis(expectedChildren)
let gottenChildren = Array(emphasis.children)
XCTAssertEqual(expectedChildren.count, gottenChildren.count)
for (expected, gotten) in zip(expectedChildren, gottenChildren) {
XCTAssertEqual(expected.debugDescription(), gotten.detachedFromParent.debugDescription())
}
}
func testReplacingChildrenInRange() {
let emphasis = Emphasis(Array(repeating: Text("OK"), count: 3))
let id = emphasis._data.id
do { // Insert one
let insertedChild = Text("Inserted")
var newEmphasis = emphasis
newEmphasis.replaceChildrenInRange(0..<0, with: CollectionOfOne(insertedChild))
assertElementDidntChange(emphasis, assertedStructure: Emphasis(Array(repeating: Text("OK"), count: 3)), expectedId: id)
XCTAssertEqual(insertedChild.debugDescription(), (newEmphasis.child(at: 0) as! Text).detachedFromParent.debugDescription())
XCTAssertEqual(4, newEmphasis.childCount)
}
do { // Insert multiple
let insertedChildren = Array(repeating: Text("Inserted"), count: 3)
var newEmphasis = emphasis
newEmphasis.replaceChildrenInRange(0..<0, with: insertedChildren)
assertElementDidntChange(emphasis, assertedStructure: Emphasis(Array(repeating: Text("OK"), count: 3)), expectedId: id)
let expectedDump = """
Emphasis
├─ Text "Inserted"
├─ Text "Inserted"
├─ Text "Inserted"
├─ Text "OK"
├─ Text "OK"
└─ Text "OK"
"""
XCTAssertEqual(expectedDump, newEmphasis.debugDescription())
XCTAssertEqual(6, newEmphasis.childCount)
}
do { // Replace one
let replacementChild = Text("Replacement")
var newEmphasis = emphasis
newEmphasis.replaceChildrenInRange(0..<1, with: CollectionOfOne(replacementChild))
XCTAssertEqual(replacementChild.debugDescription(), (newEmphasis.child(at: 0) as! Text).detachedFromParent.debugDescription())
XCTAssertEqual(3, newEmphasis.childCount)
}
do { // Replace many
let replacementChild = Text("Replacement")
var newEmphasis = emphasis
newEmphasis.replaceChildrenInRange(0..<2, with: CollectionOfOne(replacementChild))
assertElementDidntChange(emphasis, assertedStructure: Emphasis(Array(repeating: Text("OK"), count: 3)), expectedId: id)
let expectedDump = """
Emphasis
├─ Text "Replacement"
└─ Text "OK"
"""
XCTAssertEqual(expectedDump, newEmphasis.debugDescription())
XCTAssertEqual(2, newEmphasis.childCount)
}
do { // Replace all
let replacementChild = Text("Replacement")
var newEmphasis = emphasis
newEmphasis.replaceChildrenInRange(0..<3, with: CollectionOfOne(replacementChild))
let expectedDump = """
Emphasis
└─ Text "Replacement"
"""
XCTAssertEqual(expectedDump, newEmphasis.debugDescription())
XCTAssertEqual(1, newEmphasis.childCount)
}
}
func testSetChildren() {
let document = Paragraph(SoftBreak(), SoftBreak(), SoftBreak())
var newDocument = document
newDocument.setInlineChildren([Text("1"), Text("2")])
let expectedDump = """
Paragraph
├─ Text "1"
└─ Text "2"
"""
XCTAssertEqual(expectedDump, newDocument.debugDescription())
}
}
|