StringWrappingTests.swift 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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 XCTest
  12. @testable import ArgumentParser
  13. final class StringWrappingTests: XCTestCase {}
  14. let shortSample = """
  15. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lectus proin nibh nisl condimentum id. Semper feugiat nibh sed pulvinar proin gravida hendrerit. Massa id neque aliquam vestibulum morbi blandit cursus risus at. Iaculis urna id volutpat lacus laoreet. Netus et malesuada fames ac turpis egestas sed tempus urna.
  16. """
  17. let longSample = """
  18. Pretium vulputate sapien nec sagittis aliquam malesuada bibendum. Ut diam quam nulla porttitor.
  19. Egestas egestas fringilla phasellus faucibus. Amet dictum sit amet justo donec enim diam. Consectetur adipiscing elit duis tristique.
  20. Enim lobortis scelerisque fermentum dui.
  21. Et leo duis ut diam quam.
  22. Integer eget aliquet nibh praesent tristique magna sit. Faucibus turpis in eu mi bibendum neque egestas congue quisque. Risus nec feugiat in fermentum posuere urna nec tincidunt.
  23. """
  24. let jsonSample = """
  25. {
  26. "level1": {
  27. "level2": {
  28. "level3": true
  29. }
  30. }
  31. }
  32. """
  33. // MARK: -
  34. extension StringWrappingTests {
  35. func testShort() {
  36. XCTAssertEqual(
  37. shortSample.wrapped(to: 40),
  38. """
  39. Lorem ipsum dolor sit amet, consectetur
  40. adipiscing elit, sed do eiusmod tempor
  41. incididunt ut labore et dolore magna
  42. aliqua. Lectus proin nibh nisl
  43. condimentum id. Semper feugiat nibh sed
  44. pulvinar proin gravida hendrerit. Massa
  45. id neque aliquam vestibulum morbi
  46. blandit cursus risus at. Iaculis urna
  47. id volutpat lacus laoreet. Netus et
  48. malesuada fames ac turpis egestas sed
  49. tempus urna.
  50. """)
  51. XCTAssertEqual(
  52. shortSample.wrapped(to: 80),
  53. """
  54. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
  55. incididunt ut labore et dolore magna aliqua. Lectus proin nibh nisl condimentum
  56. id. Semper feugiat nibh sed pulvinar proin gravida hendrerit. Massa id neque
  57. aliquam vestibulum morbi blandit cursus risus at. Iaculis urna id volutpat
  58. lacus laoreet. Netus et malesuada fames ac turpis egestas sed tempus urna.
  59. """)
  60. }
  61. func testShortWithIndent() {
  62. XCTAssertEqual(
  63. shortSample.wrapped(to: 60, wrappingIndent: 10),
  64. """
  65. Lorem ipsum dolor sit amet, consectetur
  66. adipiscing elit, sed do eiusmod tempor incididunt
  67. ut labore et dolore magna aliqua. Lectus proin
  68. nibh nisl condimentum id. Semper feugiat nibh sed
  69. pulvinar proin gravida hendrerit. Massa id neque
  70. aliquam vestibulum morbi blandit cursus risus at.
  71. Iaculis urna id volutpat lacus laoreet. Netus et
  72. malesuada fames ac turpis egestas sed tempus urna.
  73. """)
  74. }
  75. func testLong() {
  76. XCTAssertEqual(
  77. longSample.wrapped(to: 40),
  78. """
  79. Pretium vulputate sapien nec sagittis
  80. aliquam malesuada bibendum. Ut diam
  81. quam nulla porttitor.
  82. Egestas egestas fringilla phasellus
  83. faucibus. Amet dictum sit amet justo
  84. donec enim diam. Consectetur adipiscing
  85. elit duis tristique.
  86. Enim lobortis scelerisque fermentum
  87. dui.
  88. Et leo duis ut diam quam.
  89. Integer eget aliquet nibh praesent
  90. tristique magna sit. Faucibus turpis in
  91. eu mi bibendum neque egestas congue
  92. quisque. Risus nec feugiat in
  93. fermentum posuere urna nec tincidunt.
  94. """)
  95. XCTAssertEqual(
  96. longSample.wrapped(to: 80),
  97. """
  98. Pretium vulputate sapien nec sagittis aliquam malesuada bibendum. Ut diam quam
  99. nulla porttitor.
  100. Egestas egestas fringilla phasellus faucibus. Amet dictum sit amet justo donec
  101. enim diam. Consectetur adipiscing elit duis tristique.
  102. Enim lobortis scelerisque fermentum dui.
  103. Et leo duis ut diam quam.
  104. Integer eget aliquet nibh praesent tristique magna sit. Faucibus turpis in eu
  105. mi bibendum neque egestas congue quisque. Risus nec feugiat in fermentum
  106. posuere urna nec tincidunt.
  107. """)
  108. }
  109. func testLongWithIndent() {
  110. XCTAssertEqual(
  111. longSample.wrapped(to: 60, wrappingIndent: 10),
  112. """
  113. Pretium vulputate sapien nec sagittis aliquam
  114. malesuada bibendum. Ut diam quam nulla porttitor.
  115. Egestas egestas fringilla phasellus faucibus.
  116. Amet dictum sit amet justo donec enim diam.
  117. Consectetur adipiscing elit duis tristique.
  118. Enim lobortis scelerisque fermentum dui.
  119. Et leo duis ut diam quam.
  120. Integer eget aliquet nibh praesent tristique
  121. magna sit. Faucibus turpis in eu mi bibendum
  122. neque egestas congue quisque. Risus nec
  123. feugiat in fermentum posuere urna nec tincidunt.
  124. """)
  125. }
  126. func testJSON() {
  127. XCTAssertEqual(
  128. jsonSample.wrapped(to: 80),
  129. """
  130. {
  131. "level1": {
  132. "level2": {
  133. "level3": true
  134. }
  135. }
  136. }
  137. """)
  138. }
  139. func testJSONWithIndent() {
  140. XCTAssertEqual(
  141. jsonSample.wrapped(to: 80, wrappingIndent: 10),
  142. """
  143. {
  144. "level1": {
  145. "level2": {
  146. "level3": true
  147. }
  148. }
  149. }
  150. """)
  151. }
  152. func testIndent() {
  153. XCTAssertEqual(
  154. shortSample.wrapped(to: 40).indentingEachLine(by: 10),
  155. shortSample.wrapped(to: 50, wrappingIndent: 10))
  156. XCTAssertEqual(
  157. longSample.wrapped(to: 40).indentingEachLine(by: 10),
  158. longSample.wrapped(to: 50, wrappingIndent: 10))
  159. XCTAssertEqual("".indentingEachLine(by: 10), "")
  160. XCTAssertEqual("\n".indentingEachLine(by: 10), "\n")
  161. XCTAssertEqual("a\n".indentingEachLine(by: 10), " a\n")
  162. XCTAssertEqual("\na\n".indentingEachLine(by: 10), "\n a\n")
  163. XCTAssertEqual(
  164. "a\n\nb\n".indentingEachLine(by: 10),
  165. " a\n\n b\n")
  166. XCTAssertEqual(
  167. "\na\n\nb\n".indentingEachLine(by: 10),
  168. "\n a\n\n b\n")
  169. }
  170. func testHangingIndent() {
  171. XCTAssertEqual(
  172. shortSample.wrapped(to: 40).hangingIndentingEachLine(by: 10),
  173. String(shortSample.wrapped(to: 50, wrappingIndent: 10).dropFirst(10)))
  174. XCTAssertEqual(
  175. longSample.wrapped(to: 40).hangingIndentingEachLine(by: 10),
  176. String(longSample.wrapped(to: 50, wrappingIndent: 10).dropFirst(10)))
  177. XCTAssertEqual("".hangingIndentingEachLine(by: 10), "")
  178. XCTAssertEqual("\n".hangingIndentingEachLine(by: 10), "\n")
  179. XCTAssertEqual("a\n".hangingIndentingEachLine(by: 10), "a\n")
  180. XCTAssertEqual("\na\n".hangingIndentingEachLine(by: 10), "\n a\n")
  181. XCTAssertEqual(
  182. "a\n\nb\n".hangingIndentingEachLine(by: 10),
  183. "a\n\n b\n")
  184. XCTAssertEqual(
  185. "\na\n\nb\n".hangingIndentingEachLine(by: 10),
  186. "\n a\n\n b\n")
  187. }
  188. }