SimpleEndToEndTests.swift 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // This source file is part of the Swift Argument Parser open source project
  4. //
  5. // Copyright (c) 2020 Apple Inc. and the Swift project authors
  6. // Licensed under Apache License v2.0 with Runtime Library Exception
  7. //
  8. // See https://swift.org/LICENSE.txt for license information
  9. //
  10. //===----------------------------------------------------------------------===//
  11. import ArgumentParser
  12. import ArgumentParserTestHelpers
  13. import XCTest
  14. final class SimpleEndToEndTests: XCTestCase {}
  15. // MARK: Single value String
  16. private struct Bar: ParsableArguments {
  17. @Option() var name: String
  18. }
  19. // swift-format-ignore: AlwaysUseLowerCamelCase
  20. // https://github.com/apple/swift-argument-parser/issues/710
  21. extension SimpleEndToEndTests {
  22. func testParsing_SingleOption() throws {
  23. AssertParse(Bar.self, ["--name", "Bar"]) { bar in
  24. XCTAssertEqual(bar.name, "Bar")
  25. }
  26. AssertParse(Bar.self, ["--name", " foo "]) { bar in
  27. XCTAssertEqual(bar.name, " foo ")
  28. }
  29. }
  30. func testParsing_SingleOption_Fails() throws {
  31. XCTAssertThrowsError(try Bar.parse([]))
  32. XCTAssertThrowsError(try Bar.parse(["--name"]))
  33. XCTAssertThrowsError(try Bar.parse(["--name", "--foo"]))
  34. XCTAssertThrowsError(try Bar.parse(["Bar"]))
  35. XCTAssertThrowsError(try Bar.parse(["--name", "Bar", "Baz"]))
  36. XCTAssertThrowsError(try Bar.parse(["--name", "Bar", "--foo"]))
  37. XCTAssertThrowsError(try Bar.parse(["--name", "Bar", "--foo", "Foo"]))
  38. XCTAssertThrowsError(try Bar.parse(["--name", "Bar", "-f"]))
  39. XCTAssertThrowsError(try Bar.parse(["--foo", "--name", "Bar"]))
  40. XCTAssertThrowsError(try Bar.parse(["--foo", "Foo", "--name", "Bar"]))
  41. XCTAssertThrowsError(try Bar.parse(["-f", "--name", "Bar"]))
  42. }
  43. }
  44. // MARK: Single value Int
  45. private struct Foo: ParsableArguments {
  46. @Option() var count: Int
  47. }
  48. // swift-format-ignore: AlwaysUseLowerCamelCase
  49. // https://github.com/apple/swift-argument-parser/issues/710
  50. extension SimpleEndToEndTests {
  51. func testParsing_SingleOption_Int() throws {
  52. AssertParse(Foo.self, ["--count", "42"]) { foo in
  53. XCTAssertEqual(foo.count, 42)
  54. }
  55. }
  56. func testParsing_SingleOption_Int_Fails() throws {
  57. XCTAssertThrowsError(try Foo.parse([]))
  58. XCTAssertThrowsError(try Foo.parse(["--count"]))
  59. XCTAssertThrowsError(try Foo.parse(["--count", "a"]))
  60. XCTAssertThrowsError(try Foo.parse(["Bar"]))
  61. XCTAssertThrowsError(try Foo.parse(["--count", "42", "Baz"]))
  62. XCTAssertThrowsError(try Foo.parse(["--count", "42", "--foo"]))
  63. XCTAssertThrowsError(try Foo.parse(["--count", "42", "--foo", "Foo"]))
  64. XCTAssertThrowsError(try Foo.parse(["--count", "42", "-f"]))
  65. XCTAssertThrowsError(try Foo.parse(["--foo", "--count", "42"]))
  66. XCTAssertThrowsError(try Foo.parse(["--foo", "Foo", "--count", "42"]))
  67. XCTAssertThrowsError(try Foo.parse(["-f", "--count", "42"]))
  68. }
  69. }
  70. // MARK: Two values
  71. private struct Baz: ParsableArguments {
  72. @Option() var name: String
  73. @Option() var format: String
  74. }
  75. // swift-format-ignore: AlwaysUseLowerCamelCase
  76. // https://github.com/apple/swift-argument-parser/issues/710
  77. extension SimpleEndToEndTests {
  78. func testParsing_TwoOptions_1() throws {
  79. AssertParse(Baz.self, ["--name", "Bar", "--format", "Foo"]) { baz in
  80. XCTAssertEqual(baz.name, "Bar")
  81. XCTAssertEqual(baz.format, "Foo")
  82. }
  83. }
  84. func testParsing_TwoOptions_2() throws {
  85. AssertParse(Baz.self, ["--format", "Foo", "--name", "Bar"]) { baz in
  86. XCTAssertEqual(baz.name, "Bar")
  87. XCTAssertEqual(baz.format, "Foo")
  88. }
  89. }
  90. func testParsing_TwoOptions_Fails() throws {
  91. XCTAssertThrowsError(try Baz.parse(["--nam", "Bar", "--format", "Foo"]))
  92. XCTAssertThrowsError(try Baz.parse(["--name", "Bar", "--forma", "Foo"]))
  93. XCTAssertThrowsError(try Baz.parse(["--name", "Bar"]))
  94. XCTAssertThrowsError(try Baz.parse(["--format", "Foo"]))
  95. XCTAssertThrowsError(try Baz.parse(["--name", "--format", "Foo"]))
  96. XCTAssertThrowsError(try Baz.parse(["--name", "Bar", "--format"]))
  97. XCTAssertThrowsError(
  98. try Baz.parse(["--name", "Bar", "--format", "Foo", "Baz"]))
  99. XCTAssertThrowsError(try Baz.parse(["Bar", "--name", "--format", "Foo"]))
  100. XCTAssertThrowsError(try Baz.parse(["Bar", "--name", "Foo", "--format"]))
  101. XCTAssertThrowsError(try Baz.parse(["Bar", "Foo", "--name", "--format"]))
  102. XCTAssertThrowsError(
  103. try Baz.parse(["--name", "--name", "Bar", "--format", "Foo"]))
  104. XCTAssertThrowsError(
  105. try Baz.parse(["--name", "Bar", "--format", "--format", "Foo"]))
  106. XCTAssertThrowsError(try Baz.parse(["--format", "--name", "Bar", "Foo"]))
  107. XCTAssertThrowsError(try Baz.parse(["--name", "--format", "Bar", "Foo"]))
  108. }
  109. }