@@ -4,6 +4,7 @@ import XCTest
44class ImportTests : XCTestCase {
55
66 static var allTests = [
7+ ( " testBadEncoding " , testBadEncoding) ,
78 ( " testEscapeCharacter " , testEscapeCharacter) ,
89 ( " testEscapeDoubleQuote " , testEscapeDoubleQuote) ,
910 ( " testHeadersOnly " , testHeadersOnly) ,
@@ -21,10 +22,24 @@ class ImportTests: XCTestCase {
2122 ( " testTrailingComma " , testTrailingComma) ,
2223 ( " testUnescapedQuotes " , testUnescapedQuotes) ,
2324 ( " testUnquotedHeaders " , testUnquotedHeaders) ,
24- ( " testBadEncoding " , testBadEncoding ) ,
25- ( " testVariableWidthEncodedStreamSplit " , testVariableWidthEncodedStreamSplit )
25+ ( " testVariableWidthEncodedStreamSplit " , testVariableWidthEncodedStreamSplit ) ,
26+ ( " testWestern1252Encoding " , testWestern1252Encoding )
2627 ]
2728
29+ func testBadEncoding( ) throws {
30+ let fileURL = Utility . fixtureURL ( named: " western1252Encoded.csv " )
31+ let fileHandle = try FileHandle ( forReadingFrom: fileURL)
32+ do {
33+ _ = try Document ( fileHandle: fileHandle)
34+ } catch ImportParser . ImportError . badEncoding {
35+ return
36+ } catch {
37+ XCTFail ( )
38+ return
39+ }
40+ XCTFail ( )
41+ }
42+
2843 func testEscapeCharacter( ) {
2944 let data = Utility . fixture ( named: " escapeCharacter.csv " )
3045 var dialect = Dialect ( )
@@ -290,52 +305,38 @@ class ImportTests: XCTestCase {
290305 XCTAssertEqual ( document. header![ 1 ] , HeaderFields . author. rawValue + " name " )
291306 }
292307
293- func testBadEncoding( ) throws {
294- let fileURL = Utility . fixtureURL ( named: " western1252Encoded.csv " )
295- let fileHandle = try FileHandle ( forReadingFrom: fileURL)
296- do {
297- _ = try Document ( fileHandle: fileHandle)
298- } catch ImportParser . ImportError . badEncoding {
299- return
300- } catch {
301- XCTFail ( )
302- return
303- }
304- XCTFail ( )
305- }
306-
307308 func testVariableWidthEncodedStreamSplit( ) throws {
308309 let inputURL = Utility . fixtureURL ( named: " variableWidthEncodedStreamSplit.csv " )
309310 var dialect = Dialect ( )
310311 dialect. header = false
311312
312313 let inputFileHandle = try FileHandle ( forReadingFrom: inputURL)
313314 var inputHandler = InputHandler ( fileHandle: inputFileHandle, dialect: dialect)
314- var handler = SpyInputHandlerDelegate ( )
315- inputHandler. delegate = handler
315+ var outputSpy = SpyInputHandlerDelegate ( )
316+ inputHandler. delegate = outputSpy
316317
317318 for numberOfBytes in 1 ... 4 {
318319 try inputHandler. readToEndOfFile ( length: numberOfBytes)
319- XCTAssertEqual ( handler . records. count, 2 )
320+ XCTAssertEqual ( outputSpy . records. count, 2 )
320321
321- let first = try XCTUnwrap ( handler . records [ safe: 0 ] )
322+ let first = try XCTUnwrap ( outputSpy . records [ safe: 0 ] )
322323 XCTAssertEqual ( first. count, 4 )
323- XCTAssertEqual ( first [ 0 ] , " éab " )
324- XCTAssertEqual ( first [ 1 ] , " abé " )
325- XCTAssertEqual ( first [ 2 ] , " aéb " )
326- XCTAssertEqual ( first [ 3 ] , " abcé " )
324+ XCTAssertEqual ( first [ safe : 0 ] , " éab " )
325+ XCTAssertEqual ( first [ safe : 1 ] , " abé " )
326+ XCTAssertEqual ( first [ safe : 2 ] , " aéb " )
327+ XCTAssertEqual ( first [ safe : 3 ] , " abcé " )
327328
328- let second = try XCTUnwrap ( handler . records [ safe: 1 ] )
329+ let second = try XCTUnwrap ( outputSpy . records [ safe: 1 ] )
329330 XCTAssertEqual ( second. count, 4 )
330- XCTAssertEqual ( second [ 0 ] , " 123 " )
331- XCTAssertEqual ( second [ 1 ] , " 456 " )
332- XCTAssertEqual ( second [ 2 ] , " 789 " )
333- XCTAssertEqual ( second [ 3 ] , " 321 " )
331+ XCTAssertEqual ( second [ safe : 0 ] , " 123 " )
332+ XCTAssertEqual ( second [ safe : 1 ] , " 456 " )
333+ XCTAssertEqual ( second [ safe : 2 ] , " 789 " )
334+ XCTAssertEqual ( second [ safe : 3 ] , " 321 " )
334335 }
335336
336337 inputHandler = InputHandler ( fileHandle: inputFileHandle, dialect: dialect, maxRetries: 0 )
337- handler = SpyInputHandlerDelegate ( )
338- inputHandler. delegate = handler
338+ outputSpy = SpyInputHandlerDelegate ( )
339+ inputHandler. delegate = outputSpy
339340
340341 for numberOfBytes in 1 ... 4 {
341342 do {
@@ -349,4 +350,18 @@ class ImportTests: XCTestCase {
349350 }
350351 }
351352
353+ func testWestern1252Encoding( ) throws {
354+ let inputURL = Utility . fixtureURL ( named: " western1252Encoded.csv " )
355+ let inputFileHandle = try FileHandle ( forReadingFrom: inputURL)
356+ let inputHandler = InputHandler ( fileHandle: inputFileHandle, encoding: . windowsCP1252)
357+ let outputSpy = SpyInputHandlerDelegate ( )
358+ inputHandler. delegate = outputSpy
359+
360+ try inputHandler. readToEndOfFile ( )
361+ XCTAssertEqual ( outputSpy. records. count, 1 )
362+ let first = try XCTUnwrap ( outputSpy. records. first)
363+ XCTAssertEqual ( first [ safe: 0 ] , " Always bear in mind that your own resolütion to succeed is more important than any other. " )
364+ XCTAssertEqual ( first [ safe: 1 ] , " Abraham Lincoln " )
365+ }
366+
352367}
0 commit comments