@@ -104,6 +104,14 @@ fileprivate extension ByteBuffer {
104104// MARK: Parse
105105
106106extension RESPTranslatorTests {
107+ func testParsing_invalidToken( ) {
108+ var buffer = self . allocator. buffer ( capacity: 128 )
109+ buffer. writeString ( " !!!! " )
110+ XCTAssertThrowsError ( try self . parser. parseBytes ( from: & buffer) ) { error in
111+ XCTAssertEqual ( error as? RESPTranslator . ParsingError , . invalidToken)
112+ }
113+ }
114+
107115 func testParsing_invalidSymbols( ) {
108116 let testRESP = " &3 \r \n "
109117 var buffer = allocator. buffer ( capacity: testRESP. count)
@@ -337,6 +345,33 @@ extension RESPTranslatorTests {
337345// MARK: Bulk Strings
338346
339347extension RESPTranslatorTests {
348+ func testParsing_bulkString_sizeMismatch( ) {
349+ var buffer = self . allocator. buffer ( capacity: 128 )
350+ buffer. writeString ( " $2 \r \n too long \r \n " )
351+ buffer. mimicTokenParse ( )
352+ XCTAssertThrowsError ( try self . parser. parseBulkString ( from: & buffer) ) { error in
353+ XCTAssertEqual ( error as? RESPTranslator . ParsingError , . bulkStringSizeMismatch)
354+ }
355+ }
356+
357+ func testParsing_bulkString_invalidNegativeSize( ) {
358+ var buffer = self . allocator. buffer ( capacity: 128 )
359+ buffer. writeString ( " $-4 \r \n what \r \n " )
360+ buffer. mimicTokenParse ( )
361+ XCTAssertThrowsError ( try self . parser. parseBulkString ( from: & buffer) ) { error in
362+ XCTAssertEqual ( error as? RESPTranslator . ParsingError , . invalidBulkStringSize)
363+ }
364+ }
365+
366+ func testParsing_bulkString_SizeIsNaN( ) {
367+ var buffer = self . allocator. buffer ( capacity: 128 )
368+ buffer. writeString ( " $FOO \r \n what \r \n " )
369+ buffer. mimicTokenParse ( )
370+ XCTAssertThrowsError ( try self . parser. parseBulkString ( from: & buffer) ) { error in
371+ XCTAssertEqual ( error as? RESPTranslator . ParsingError , . invalidBulkStringSize)
372+ }
373+ }
374+
340375 func testParsing_bulkString_missingEndings( ) {
341376 for message in [ " $6 " , " $6 \r \n " , " $6 \r \n abcdef " , " $0 \r \n " ] {
342377 XCTAssertNil ( bulkStringParseTest ( inputRESP: message) )
@@ -374,11 +409,11 @@ extension RESPTranslatorTests {
374409 buffer. writeString ( testString)
375410
376411 buffer. mimicTokenParse ( )
377- let first = parser. parseBulkString ( from: & buffer)
412+ let first = try ? parser. parseBulkString ( from: & buffer)
378413 XCTAssertEqual ( buffer. readerIndex, 6 ) // position of the 2nd '$'
379414
380415 buffer. mimicTokenParse ( )
381- let second = parser. parseBulkString ( from: & buffer)
416+ let second = try ? parser. parseBulkString ( from: & buffer)
382417 XCTAssertEqual ( buffer. readerIndex, 17 )
383418
384419 XCTAssertEqual ( first? . string, " " )
@@ -395,7 +430,7 @@ extension RESPTranslatorTests {
395430
396431 buffer. mimicTokenParse ( )
397432
398- guard let result = parser. parseBulkString ( from: & buffer) else { return nil }
433+ guard let result = try ? parser. parseBulkString ( from: & buffer) else { return nil }
399434 return result
400435 }
401436}
0 commit comments