FMResultSetTests.m 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // FMResultSetTests.m
  3. // fmdb
  4. //
  5. // Created by Muralidharan,Roshan on 10/6/14.
  6. //
  7. //
  8. #import "FMDBTempDBTests.h"
  9. #import "FMDatabase.h"
  10. #import "FMResultSet.h"
  11. #if FMDB_SQLITE_STANDALONE
  12. #import <sqlite3/sqlite3.h>
  13. #else
  14. #import <sqlite3.h>
  15. #endif
  16. @interface FMResultSetTests : FMDBTempDBTests
  17. @end
  18. @implementation FMResultSetTests
  19. + (void)populateDatabase:(FMDatabase *)db
  20. {
  21. [db executeUpdate:@"create table test (a text, b text, c integer, d double, e double)"];
  22. [db beginTransaction];
  23. int i = 0;
  24. while (i++ < 20) {
  25. [db executeUpdate:@"insert into test (a, b, c, d, e) values (?, ?, ?, ?, ?)" ,
  26. @"hi'",
  27. [NSString stringWithFormat:@"number %d", i],
  28. [NSNumber numberWithInt:i],
  29. [NSDate date],
  30. [NSNumber numberWithFloat:2.2f]];
  31. }
  32. [db commit];
  33. }
  34. - (void)testNextWithError_WithoutError
  35. {
  36. [self.db executeUpdate:@"CREATE TABLE testTable(key INTEGER PRIMARY KEY, value INTEGER)"];
  37. [self.db executeUpdate:@"INSERT INTO testTable (key, value) VALUES (1, 2)"];
  38. [self.db executeUpdate:@"INSERT INTO testTable (key, value) VALUES (2, 4)"];
  39. FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM testTable WHERE key=1"];
  40. XCTAssertNotNil(resultSet);
  41. NSError *error;
  42. XCTAssertTrue([resultSet nextWithError:&error]);
  43. XCTAssertNil(error);
  44. XCTAssertFalse([resultSet nextWithError:&error]);
  45. XCTAssertNil(error);
  46. [resultSet close];
  47. }
  48. - (void)testNextWithError_WithBusyError
  49. {
  50. [self.db executeUpdate:@"CREATE TABLE testTable(key INTEGER PRIMARY KEY, value INTEGER)"];
  51. [self.db executeUpdate:@"INSERT INTO testTable (key, value) VALUES (1, 2)"];
  52. [self.db executeUpdate:@"INSERT INTO testTable (key, value) VALUES (2, 4)"];
  53. FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM testTable WHERE key=1"];
  54. XCTAssertNotNil(resultSet);
  55. FMDatabase *newDB = [FMDatabase databaseWithPath:self.databasePath];
  56. [newDB open];
  57. [newDB beginExclusiveTransaction];
  58. NSError *error;
  59. XCTAssertFalse([resultSet nextWithError:&error]);
  60. [newDB commit];
  61. XCTAssertEqual(error.code, SQLITE_BUSY, @"SQLITE_BUSY should be the last error");
  62. [resultSet close];
  63. }
  64. - (void)testNextWithError_WithMisuseError
  65. {
  66. [self.db executeUpdate:@"CREATE TABLE testTable(key INTEGER PRIMARY KEY, value INTEGER)"];
  67. [self.db executeUpdate:@"INSERT INTO testTable (key, value) VALUES (1, 2)"];
  68. [self.db executeUpdate:@"INSERT INTO testTable (key, value) VALUES (2, 4)"];
  69. FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM testTable WHERE key=9"];
  70. XCTAssertNotNil(resultSet);
  71. XCTAssertFalse([resultSet next]);
  72. NSError *error;
  73. XCTAssertFalse([resultSet nextWithError:&error]);
  74. XCTAssertEqual(error.code, SQLITE_MISUSE, @"SQLITE_MISUSE should be the last error");
  75. }
  76. @end