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
|
//===----------------------------------------------------------*- swift -*-===//
//
// This source file is part of the Swift Argument Parser open source project
//
// Copyright (c) 2020 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
//
//===----------------------------------------------------------------------===//
import XCTest
@testable import ArgumentParser
final class TreeTests: XCTestCase {
}
// MARK: -
let tree: Tree<Int> = {
let tree = Tree(1)
for x in 11...13 {
let node = Tree(x)
tree.addChild(node)
for y in 1...3 {
let subnode = Tree(x * 10 + y)
node.addChild(subnode)
}
}
return tree
}()
extension TreeTests {
func testHierarchy() {
XCTAssertEqual(tree.element, 1)
XCTAssertEqual(tree.children.map { $0.element }, [11, 12, 13])
XCTAssertEqual(
tree.children.flatMap { $0.children.map { $0.element } },
[111, 112, 113, 121, 122, 123, 131, 132, 133])
}
func testSearch() {
XCTAssertEqual(
tree.path(toFirstWhere: { $0 == 1 }).map { $0.element },
[1])
XCTAssertEqual(
tree.path(toFirstWhere: { $0 == 13 }).map { $0.element },
[1, 13])
XCTAssertEqual(
tree.path(toFirstWhere: { $0 == 133 }).map { $0.element },
[1, 13, 133])
XCTAssertTrue(tree.path(toFirstWhere: { $0 < 0 }).isEmpty)
}
}
extension TreeTests {
struct A: ParsableCommand {
static let configuration = CommandConfiguration(subcommands: [A.self])
}
struct Root: ParsableCommand {
static let configuration = CommandConfiguration(subcommands: [Sub.self])
}
struct Sub: ParsableCommand {
static let configuration = CommandConfiguration(subcommands: [Sub.self])
}
func testInitializationWithRecursiveSubcommand() {
XCTAssertThrowsError(try Tree(root: A.asCommand))
XCTAssertThrowsError(try Tree(root: Root.asCommand))
}
}
|