| //===--- InputStream.swift.gyb --------------------------------*- swift -*-===// |
| // |
| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2017 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 the list of Swift project authors |
| // |
| //===----------------------------------------------------------------------===// |
| // -*- swift -*- |
| // RUN: %target-run-simple-swiftgyb |
| // REQUIRES: executable_test |
| |
| // FIXME: The Android test runner is incapable of running this test, which |
| // relies on stdin input. |
| // UNSUPPORTED: OS=linux-androideabi |
| |
| import StdlibUnittest |
| |
| |
| import Swift |
| |
| var ReadLineTestSuite = TestSuite("ReadLine") |
| |
| % for strip_newline in ['false', 'true']: |
| % newline = '' if strip_newline == 'true' else '\\n' |
| |
| ReadLineTestSuite.test("EmptyLine/strippingNewline=${strip_newline}") |
| .stdin("\n") |
| .code { |
| expectOptionalEqual("${newline}", readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| ReadLineTestSuite.test("Whitespace/strippingNewline=${strip_newline}") |
| .stdin(" \t\u{0b}\u{0c}\u{85}\u{2028}\u{2029}\n") |
| .code { |
| expectOptionalEqual( |
| " \t\u{0b}\u{0c}\u{85}\u{2028}\u{2029}${newline}", |
| readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| ReadLineTestSuite.test("ASCII/length=1/strippingNewline=${strip_newline}") |
| .stdin("a\n") |
| .code { |
| expectOptionalEqual("a${newline}", readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| ReadLineTestSuite.test("ASCII/length=2/strippingNewline=${strip_newline}") |
| .stdin("ab\n") |
| .code { |
| expectOptionalEqual("ab${newline}", readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| ReadLineTestSuite.test("ASCII/length=3/strippingNewline=${strip_newline}") |
| .stdin("abc\n") |
| .code { |
| expectOptionalEqual("abc${newline}", readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| ReadLineTestSuite.test("Unicode/strippingNewline=${strip_newline}") |
| // U+0065 LATIN SMALL LETTER E |
| // U+00A9 COPYRIGHT SIGN |
| // U+0521 CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK |
| // U+304B HIRAGANA LETTER KA |
| // U+3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK |
| // U+4587 CJK UNIFIED IDEOGRAPH-4587 |
| // U+1F425 FRONT-FACING BABY CHICK |
| .stdin("\u{0065}\u{00a9}\u{0521}\u{304b}\u{3099}\u{4587}\u{1f425}\u{10b9c4}\n") |
| .code { |
| expectOptionalEqual( |
| "\u{0065}\u{00a9}\u{0521}\u{304b}\u{3099}\u{4587}\u{1f425}\u{10b9c4}${newline}", |
| readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| ReadLineTestSuite.test("EOF/1/strippingNewline=${strip_newline}") |
| .stdin("", eof: true) |
| .code { |
| expectNil(readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| ReadLineTestSuite.test("EOF/2/strippingNewline=${strip_newline}") |
| .stdin("abcd 123\n", eof: true) |
| .code { |
| expectOptionalEqual("abcd 123${newline}", readLine(strippingNewline: ${strip_newline})) |
| expectNil(readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| ReadLineTestSuite.test("MissingNewlineAtEOF/1/strippingNewline=${strip_newline}") |
| .stdin("a", eof: true) |
| .code { |
| expectOptionalEqual("a", readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| ReadLineTestSuite.test("MissingNewlineAtEOF/2/strippingNewline=${strip_newline}") |
| .stdin("abcd 123", eof: true) |
| .code { |
| expectOptionalEqual("abcd 123", readLine(strippingNewline: ${strip_newline})) |
| } |
| |
| % end |
| |
| ReadLineTestSuite.test("strippingNewline=default") |
| .stdin("abcd 123\n") |
| .code { |
| // Check that the default for strippingNewline is true. |
| expectOptionalEqual("abcd 123", readLine()) |
| } |
| |
| ReadLineTestSuite.test("StripNewline/JustCR") |
| .stdin("\r", eof: true) |
| .code { |
| // FIXME: CR by itself is not recognized as a newline. |
| expectOptionalEqual("\r", readLine(strippingNewline: true)) |
| } |
| |
| ReadLineTestSuite.test("StripNewline/JustLF") |
| .stdin("\n") |
| .code { |
| expectOptionalEqual("", readLine(strippingNewline: true)) |
| } |
| |
| ReadLineTestSuite.test("StripNewline/JustCR+LF") |
| .stdin("\r\n") |
| .code { |
| expectOptionalEqual("", readLine(strippingNewline: true)) |
| } |
| |
| ReadLineTestSuite.test("StripNewline/CR") |
| .stdin("abcd 123\r", eof: true) |
| .code { |
| // FIXME: CR by itself is not recognized as a newline. |
| expectOptionalEqual("abcd 123\r", readLine(strippingNewline: true)) |
| } |
| |
| ReadLineTestSuite.test("StripNewline/LF") |
| .stdin("abcd 123\n") |
| .code { |
| expectOptionalEqual("abcd 123", readLine(strippingNewline: true)) |
| } |
| |
| ReadLineTestSuite.test("StripNewline/CR+LF") |
| .stdin("abcd 123\r\n") |
| .code { |
| expectOptionalEqual("abcd 123", readLine(strippingNewline: true)) |
| } |
| |
| runAllTests() |
| |