blob: 8e4cee9a14fd2f7e1221d35a4c410ad69b0c318e [file] [log] [blame]
// RUN: %target-run-simple-swift
// REQUIRES: executable_test
// REQUIRES: OS=macosx
// REQUIRES: objc_interop
import Foundation
import StdlibUnittest
import SwiftSyntax
/// Verifies that there is a next item returned by the iterator and that it
/// satisfies the given predicate.
func expectNext<Iterator: IteratorProtocol>(
_ iterator: inout Iterator,
satisfies predicate: (Iterator.Element) throws -> Bool
) rethrows {
let next = iterator.next()
expectNotNil(next)
expectTrue(try predicate(next!))
}
/// Verifies that the iterator is exhausted.
func expectNextIsNil<Iterator: IteratorProtocol>(_ iterator: inout Iterator) {
expectNil(iterator.next())
}
var SyntaxChildrenAPI = TestSuite("SyntaxChildrenAPI")
SyntaxChildrenAPI.test("IterateWithAllPresent") {
let returnStmt = SyntaxFactory.makeReturnStmt(
returnKeyword: SyntaxFactory.makeReturnKeyword(),
expression: SyntaxFactory.makeBlankUnknownExpr())
var iterator = returnStmt.children.makeIterator()
expectNext(&iterator) { ($0 as? TokenSyntax)?.tokenKind == .returnKeyword }
expectNext(&iterator) { $0 is ExprSyntax }
expectNextIsNil(&iterator)
}
SyntaxChildrenAPI.test("IterateWithSomeMissing") {
let returnStmt = SyntaxFactory.makeReturnStmt(
returnKeyword: SyntaxFactory.makeReturnKeyword(),
expression: nil)
var iterator = returnStmt.children.makeIterator()
expectNext(&iterator) { ($0 as? TokenSyntax)?.tokenKind == .returnKeyword }
expectNextIsNil(&iterator)
}
SyntaxChildrenAPI.test("IterateWithAllMissing") {
let returnStmt = SyntaxFactory.makeBlankReturnStmt()
var iterator = returnStmt.children.makeIterator()
expectNextIsNil(&iterator)
}
runAllTests()