Swift 3.0

This commit is contained in:
Yasuhiro Hatta 2016-06-20 23:49:39 +09:00
parent 27fbe635b9
commit 69ea597f6d
1 changed files with 79 additions and 79 deletions

View File

@ -13,69 +13,69 @@ class CSVReaderTests: XCTestCase {
func test1Line() { func test1Line() {
let csv = "abab,cdcd,efef" let csv = "abab,cdcd,efef"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "cdcd", "efef"])
} }
func testQuoted() { func testQuoted() {
let csv = "abab,\"cdcd\",efef" let csv = "abab,\"cdcd\",efef"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "cdcd", "efef"])
} }
func testLF() { func testLF() {
let csv = "abab,cdcd,efef\nzxcv,asdf,qwer" let csv = "abab,cdcd,efef\nzxcv,asdf,qwer"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qwer"]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qwer"])
} }
func testCommaInQuotationMarks() { func testCommaInQuotationMarks() {
let csv = "abab,\"cd,cd\",efef" let csv = "abab,\"cd,cd\",efef"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "cd,cd", "efef"]) XCTAssertEqual(records[0], ["abab", "cd,cd", "efef"])
} }
func testCRLF() { func testCRLF() {
let csv = "abab,cdcd,efef\r\nzxcv,asdf,qwer" let csv = "abab,cdcd,efef\r\nzxcv,asdf,qwer"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qwer"]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qwer"])
} }
func testEscapedQuotationMark() { func testEscapedQuotationMark() {
let csv = "abab,\"\"\"cdcd\",efef\r\nzxcv,asdf,qwer" let csv = "abab,\"\"\"cdcd\",efef\r\nzxcv,asdf,qwer"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "\"cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "\"cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qwer"]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qwer"])
} }
func testQuotationMark2() { func testQuotationMark2() {
let csv = "abab,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"" let csv = "abab,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\""
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er"]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er"])
} }
func testEmptyField() { func testEmptyField() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"," let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\","
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
} }
func testLastCR() { func testLastCR() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\",\r" let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\",\r"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 2) XCTAssertEqual(records.count, 2)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
@ -83,8 +83,8 @@ class CSVReaderTests: XCTestCase {
func testLastCRLF() { func testLastCRLF() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\",\r\n" let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\",\r\n"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 2) XCTAssertEqual(records.count, 2)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
@ -92,8 +92,8 @@ class CSVReaderTests: XCTestCase {
func testLastLF() { func testLastLF() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\",\n" let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\",\n"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 2) XCTAssertEqual(records.count, 2)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
@ -101,8 +101,8 @@ class CSVReaderTests: XCTestCase {
func testLFInQuotationMarks() { func testLFInQuotationMarks() {
let csv = "abab,,\"\rcdcd\n\",efef\r\nzxcv,asdf,\"qw\"\"er\",\n" let csv = "abab,,\"\rcdcd\n\",efef\r\nzxcv,asdf,\"qw\"\"er\",\n"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 2) XCTAssertEqual(records.count, 2)
XCTAssertEqual(records[0], ["abab", "", "\rcdcd\n", "efef"]) XCTAssertEqual(records[0], ["abab", "", "\rcdcd\n", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
@ -110,8 +110,8 @@ class CSVReaderTests: XCTestCase {
func testLineBreakLF() { func testLineBreakLF() {
let csv = "qwe,asd\nzxc,rty" let csv = "qwe,asd\nzxc,rty"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 2) XCTAssertEqual(records.count, 2)
XCTAssertEqual(records[0], ["qwe", "asd"]) XCTAssertEqual(records[0], ["qwe", "asd"])
XCTAssertEqual(records[1], ["zxc", "rty"]) XCTAssertEqual(records[1], ["zxc", "rty"])
@ -119,8 +119,8 @@ class CSVReaderTests: XCTestCase {
func testLineBreakCR() { func testLineBreakCR() {
let csv = "qwe,asd\rzxc,rty" let csv = "qwe,asd\rzxc,rty"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 2) XCTAssertEqual(records.count, 2)
XCTAssertEqual(records[0], ["qwe", "asd"]) XCTAssertEqual(records[0], ["qwe", "asd"])
XCTAssertEqual(records[1], ["zxc", "rty"]) XCTAssertEqual(records[1], ["zxc", "rty"])
@ -128,8 +128,8 @@ class CSVReaderTests: XCTestCase {
func testLineBreakCRLF() { func testLineBreakCRLF() {
let csv = "qwe,asd\r\nzxc,rty" let csv = "qwe,asd\r\nzxc,rty"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 2) XCTAssertEqual(records.count, 2)
XCTAssertEqual(records[0], ["qwe", "asd"]) XCTAssertEqual(records[0], ["qwe", "asd"])
XCTAssertEqual(records[1], ["zxc", "rty"]) XCTAssertEqual(records[1], ["zxc", "rty"])
@ -137,8 +137,8 @@ class CSVReaderTests: XCTestCase {
func testLineBreakLFLF() { func testLineBreakLFLF() {
let csv = "qwe,asd\n\nzxc,rty" let csv = "qwe,asd\n\nzxc,rty"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 3) XCTAssertEqual(records.count, 3)
XCTAssertEqual(records[0], ["qwe", "asd"]) XCTAssertEqual(records[0], ["qwe", "asd"])
XCTAssertEqual(records[1], [""]) XCTAssertEqual(records[1], [""])
@ -147,8 +147,8 @@ class CSVReaderTests: XCTestCase {
func testLineBreakCRCR() { func testLineBreakCRCR() {
let csv = "qwe,asd\r\rzxc,rty" let csv = "qwe,asd\r\rzxc,rty"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 3) XCTAssertEqual(records.count, 3)
XCTAssertEqual(records[0], ["qwe", "asd"]) XCTAssertEqual(records[0], ["qwe", "asd"])
XCTAssertEqual(records[1], [""]) XCTAssertEqual(records[1], [""])
@ -157,8 +157,8 @@ class CSVReaderTests: XCTestCase {
func testLineBreakCRLFCRLF() { func testLineBreakCRLFCRLF() {
let csv = "qwe,asd\r\n\r\nzxc,rty" let csv = "qwe,asd\r\n\r\nzxc,rty"
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records.count, 3) XCTAssertEqual(records.count, 3)
XCTAssertEqual(records[0], ["qwe", "asd"]) XCTAssertEqual(records[0], ["qwe", "asd"])
XCTAssertEqual(records[1], [""]) XCTAssertEqual(records[1], [""])
@ -170,7 +170,7 @@ class CSVReaderTests: XCTestCase {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"," let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\","
for encoding in allEncodings() { for encoding in allEncodings() {
print("index: \(index)") print("index: \(index)")
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
index += 1 index += 1
@ -179,96 +179,96 @@ class CSVReaderTests: XCTestCase {
func testUTF8WithBOM() { func testUTF8WithBOM() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"," let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\","
let encoding = NSUTF8StringEncoding let encoding = String.Encoding.utf8
let mutableData = NSMutableData() var mutableData = Data()
mutableData.appendBytes(utf8BOM, length: utf8BOM.count) mutableData.append(utf8BOM, count: utf8BOM.count)
mutableData.appendData(csv.dataUsingEncoding(encoding)!) mutableData.append(csv.data(using: encoding)!)
let records = parseData(mutableData, encoding: encoding) let records = parse(data: mutableData, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
} }
func testUTF16WithNativeEndianBOM() { func testUTF16WithNativeEndianBOM() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"," let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\","
let encoding = NSUTF16StringEncoding let encoding = String.Encoding.utf16
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
} }
func testUTF16WithBigEndianBOM() { func testUTF16WithBigEndianBOM() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"," let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\","
let encoding = NSUTF16StringEncoding let encoding = String.Encoding.utf16
let mutableData = NSMutableData() var mutableData = Data()
mutableData.appendBytes(utf16BigEndianBOM, length: utf16BigEndianBOM.count) mutableData.append(utf16BigEndianBOM, count: utf16BigEndianBOM.count)
mutableData.appendData(csv.dataUsingEncoding(NSUTF16BigEndianStringEncoding)!) mutableData.append(csv.data(using: String.Encoding.utf16BigEndian)!)
let records = parseData(mutableData, encoding: encoding) let records = parse(data: mutableData, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
} }
func testUTF16WithLittleEndianBOM() { func testUTF16WithLittleEndianBOM() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"," let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\","
let encoding = NSUTF16StringEncoding let encoding = String.Encoding.utf16
let mutableData = NSMutableData() var mutableData = Data()
mutableData.appendBytes(utf16LittleEndianBOM, length: utf16LittleEndianBOM.count) mutableData.append(utf16LittleEndianBOM, count: utf16LittleEndianBOM.count)
mutableData.appendData(csv.dataUsingEncoding(NSUTF16LittleEndianStringEncoding)!) mutableData.append(csv.data(using: String.Encoding.utf16LittleEndian)!)
let records = parseData(mutableData, encoding: encoding) let records = parse(data: mutableData, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
} }
func testUTF32WithNativeEndianBOM() { func testUTF32WithNativeEndianBOM() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"," let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\","
let encoding = NSUTF32StringEncoding let encoding = String.Encoding.utf32
let records = parseCSV(csv, encoding: encoding) let records = parse(csv: csv, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
} }
func testUTF32WithBigEndianBOM() { func testUTF32WithBigEndianBOM() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"," let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\","
let encoding = NSUTF32StringEncoding let encoding = String.Encoding.utf32
let mutableData = NSMutableData() var mutableData = Data()
mutableData.appendBytes(utf32BigEndianBOM, length: utf32BigEndianBOM.count) mutableData.append(utf32BigEndianBOM, count: utf32BigEndianBOM.count)
mutableData.appendData(csv.dataUsingEncoding(NSUTF32BigEndianStringEncoding)!) mutableData.append(csv.data(using: String.Encoding.utf32BigEndian)!)
let records = parseData(mutableData, encoding: encoding) let records = parse(data: mutableData, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
} }
func testUTF32WithLittleEndianBOM() { func testUTF32WithLittleEndianBOM() {
let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\"," let csv = "abab,,cdcd,efef\r\nzxcv,asdf,\"qw\"\"er\","
let encoding = NSUTF32StringEncoding let encoding = String.Encoding.utf32
let mutableData = NSMutableData() var mutableData = Data()
mutableData.appendBytes(utf32LittleEndianBOM, length: utf32LittleEndianBOM.count) mutableData.append(utf32LittleEndianBOM, count: utf32LittleEndianBOM.count)
mutableData.appendData(csv.dataUsingEncoding(NSUTF32LittleEndianStringEncoding)!) mutableData.append(csv.data(using: String.Encoding.utf32LittleEndian)!)
let records = parseData(mutableData, encoding: encoding) let records = parse(data: mutableData, encoding: encoding)
XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"]) XCTAssertEqual(records[0], ["abab", "", "cdcd", "efef"])
XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""]) XCTAssertEqual(records[1], ["zxcv", "asdf", "qw\"er", ""])
} }
func allEncodings() -> [NSStringEncoding] { func allEncodings() -> [String.Encoding] {
return [ return [
// multi-byte character encodings // multi-byte character encodings
NSShiftJISStringEncoding, String.Encoding.shiftJIS,
NSJapaneseEUCStringEncoding, String.Encoding.japaneseEUC,
NSUTF8StringEncoding, String.Encoding.utf8,
// wide character encodings // wide character encodings
NSUTF16BigEndianStringEncoding, String.Encoding.utf16BigEndian,
NSUTF16LittleEndianStringEncoding, String.Encoding.utf16LittleEndian,
NSUTF32BigEndianStringEncoding, String.Encoding.utf32BigEndian,
NSUTF32LittleEndianStringEncoding, String.Encoding.utf32LittleEndian,
] ]
} }
func parseCSV(csv: String, encoding: NSStringEncoding) -> [[String]] { func parse(csv: String, encoding: String.Encoding) -> [[String]] {
let data = csv.dataUsingEncoding(encoding)! let data = csv.data(using: encoding)!
return parseData(data, encoding: encoding) return parse(data: data, encoding: encoding)
} }
func parseData(data: NSData, encoding: NSStringEncoding) -> [[String]] { func parse(data: Data, encoding: String.Encoding) -> [[String]] {
let stream = NSInputStream(data: data) let stream = InputStream(data: data)
let reader = try! CSV(stream: stream, encoding: encoding) let reader = try! CSV(stream: stream, encoding: encoding)
var records = [[String]]() var records = [[String]]()
for row in reader { for row in reader {