| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 69df688 commit 64efbfd
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -89,19 +89,18 @@ suite('DatabaseSync() constructor', () => { | |||
| 89 | 89 | ||
| 90 | 90 | test('is not read-only by default', (t) => { | |
| 91 | 91 | const dbPath = nextDb(); | |
| 92 | - const db = new DatabaseSync(dbPath); | ||
| 92 | + using db = new DatabaseSync(dbPath); | ||
| 93 | 93 | db.exec('CREATE TABLE foo (id INTEGER PRIMARY KEY)'); | |
| 94 | 94 | }); | |
| 95 | 95 | ||
| 96 | 96 | test('is read-only if readOnly is set', (t) => { | |
| 97 | 97 | const dbPath = nextDb(); | |
| 98 | 98 | { | |
| 99 | - const db = new DatabaseSync(dbPath); | ||
| 99 | + using db = new DatabaseSync(dbPath); | ||
| 100 | 100 | db.exec('CREATE TABLE foo (id INTEGER PRIMARY KEY)'); | |
| 101 | - db.close(); | ||
| 102 | 101 | } | |
| 103 | 102 | { | |
| 104 | - const db = new DatabaseSync(dbPath, { readOnly: true }); | ||
| 103 | + using db = new DatabaseSync(dbPath, { readOnly: true }); | ||
| 105 | 104 | t.assert.throws(() => { | |
| 106 | 105 | db.exec('CREATE TABLE bar (id INTEGER PRIMARY KEY)'); | |
| 107 | 106 | }, { | |
@@ -122,12 +121,11 @@ suite('DatabaseSync() constructor', () => { | |||
| 122 | 121 | ||
| 123 | 122 | test('enables foreign key constraints by default', (t) => { | |
| 124 | 123 | const dbPath = nextDb(); | |
| 125 | - const db = new DatabaseSync(dbPath); | ||
| 124 | + using db = new DatabaseSync(dbPath); | ||
| 126 | 125 | db.exec(` | |
| 127 | 126 | CREATE TABLE foo (id INTEGER PRIMARY KEY); | |
| 128 | 127 | CREATE TABLE bar (foo_id INTEGER REFERENCES foo(id)); | |
| 129 | 128 | `); | |
| 130 | - t.after(() => { db.close(); }); | ||
| 131 | 129 | t.assert.throws(() => { | |
| 132 | 130 | db.exec('INSERT INTO bar (foo_id) VALUES (1)'); | |
| 133 | 131 | }, { | |
@@ -138,12 +136,11 @@ suite('DatabaseSync() constructor', () => { | |||
| 138 | 136 | ||
| 139 | 137 | test('allows disabling foreign key constraints', (t) => { | |
| 140 | 138 | const dbPath = nextDb(); | |
| 141 | - const db = new DatabaseSync(dbPath, { enableForeignKeyConstraints: false }); | ||
| 139 | + using db = new DatabaseSync(dbPath, { enableForeignKeyConstraints: false }); | ||
| 142 | 140 | db.exec(` | |
| 143 | 141 | CREATE TABLE foo (id INTEGER PRIMARY KEY); | |
| 144 | 142 | CREATE TABLE bar (foo_id INTEGER REFERENCES foo(id)); | |
| 145 | 143 | `); | |
| 146 | - t.after(() => { db.close(); }); | ||
| 147 | 144 | db.exec('INSERT INTO bar (foo_id) VALUES (1)'); | |
| 148 | 145 | }); | |
| 149 | 146 | ||
@@ -158,8 +155,7 @@ suite('DatabaseSync() constructor', () => { | |||
| 158 | 155 | ||
| 159 | 156 | test('disables double-quoted string literals by default', (t) => { | |
| 160 | 157 | const dbPath = nextDb(); | |
| 161 | - const db = new DatabaseSync(dbPath); | ||
| 162 | - t.after(() => { db.close(); }); | ||
| 158 | + using db = new DatabaseSync(dbPath); | ||
| 163 | 159 | t.assert.throws(() => { | |
| 164 | 160 | db.exec('SELECT "foo";'); | |
| 165 | 161 | }, { | |
@@ -170,8 +166,7 @@ suite('DatabaseSync() constructor', () => { | |||
| 170 | 166 | ||
| 171 | 167 | test('allows enabling double-quoted string literals', (t) => { | |
| 172 | 168 | const dbPath = nextDb(); | |
| 173 | - const db = new DatabaseSync(dbPath, { enableDoubleQuotedStringLiterals: true }); | ||
| 174 | - t.after(() => { db.close(); }); | ||
| 169 | + using db = new DatabaseSync(dbPath, { enableDoubleQuotedStringLiterals: true }); | ||
| 175 | 170 | db.exec('SELECT "foo";'); | |
| 176 | 171 | }); | |
| 177 | 172 | ||
@@ -186,8 +181,7 @@ suite('DatabaseSync() constructor', () => { | |||
| 186 | 181 | ||
| 187 | 182 | test('allows reading big integers', (t) => { | |
| 188 | 183 | const dbPath = nextDb(); | |
| 189 | - const db = new DatabaseSync(dbPath, { readBigInts: true }); | ||
| 190 | - t.after(() => { db.close(); }); | ||
| 184 | + using db = new DatabaseSync(dbPath, { readBigInts: true }); | ||
| 191 | 185 | ||
| 192 | 186 | const setup = db.exec(` | |
| 193 | 187 | CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT; | |
@@ -216,8 +210,7 @@ suite('DatabaseSync() constructor', () => { | |||
| 216 | 210 | ||
| 217 | 211 | test('allows returning arrays', (t) => { | |
| 218 | 212 | const dbPath = nextDb(); | |
| 219 | - const db = new DatabaseSync(dbPath, { returnArrays: true }); | ||
| 220 | - t.after(() => { db.close(); }); | ||
| 213 | + using db = new DatabaseSync(dbPath, { returnArrays: true }); | ||
| 221 | 214 | const setup = db.exec(` | |
| 222 | 215 | CREATE TABLE data(key INTEGER PRIMARY KEY, val TEXT) STRICT; | |
| 223 | 216 | INSERT INTO data (key, val) VALUES (1, 'one'); | |
@@ -240,8 +233,7 @@ suite('DatabaseSync() constructor', () => { | |||
| 240 | 233 | ||
| 241 | 234 | test('throws if bare named parameters are used when option is false', (t) => { | |
| 242 | 235 | const dbPath = nextDb(); | |
| 243 | - const db = new DatabaseSync(dbPath, { allowBareNamedParameters: false }); | ||
| 244 | - t.after(() => { db.close(); }); | ||
| 236 | + using db = new DatabaseSync(dbPath, { allowBareNamedParameters: false }); | ||
| 245 | 237 | const setup = db.exec( | |
| 246 | 238 | 'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;' | |
| 247 | 239 | ); | |
@@ -267,8 +259,7 @@ suite('DatabaseSync() constructor', () => { | |||
| 267 | 259 | ||
| 268 | 260 | test('allows unknown named parameters', (t) => { | |
| 269 | 261 | const dbPath = nextDb(); | |
| 270 | - const db = new DatabaseSync(dbPath, { allowUnknownNamedParameters: true }); | ||
| 271 | - t.after(() => { db.close(); }); | ||
| 262 | + using db = new DatabaseSync(dbPath, { allowUnknownNamedParameters: true }); | ||
| 272 | 263 | const setup = db.exec( | |
| 273 | 264 | 'CREATE TABLE data(key INTEGER, val INTEGER) STRICT;' | |
| 274 | 265 | ); | |
@@ -284,8 +275,7 @@ suite('DatabaseSync() constructor', () => { | |||
| 284 | 275 | ||
| 285 | 276 | test('has sqlite-type symbol property', (t) => { | |
| 286 | 277 | const dbPath = nextDb(); | |
| 287 | - const db = new DatabaseSync(dbPath); | ||
| 288 | - t.after(() => { db.close(); }); | ||
| 278 | + using db = new DatabaseSync(dbPath); | ||
| 289 | 279 | ||
| 290 | 280 | const sqliteTypeSymbol = Symbol.for('sqlite-type'); | |
| 291 | 281 | t.assert.strictEqual(db[sqliteTypeSymbol], 'node:sqlite'); | |
@@ -295,8 +285,7 @@ suite('DatabaseSync() constructor', () => { | |||
| 295 | 285 | suite('DatabaseSync.prototype.open()', () => { | |
| 296 | 286 | test('opens a database connection', (t) => { | |
| 297 | 287 | const dbPath = nextDb(); | |
| 298 | - const db = new DatabaseSync(dbPath, { open: false }); | ||
| 299 | - t.after(() => { db.close(); }); | ||
| 288 | + using db = new DatabaseSync(dbPath, { open: false }); | ||
| 300 | 289 | ||
| 301 | 290 | t.assert.strictEqual(db.isOpen, false); | |
| 302 | 291 | t.assert.strictEqual(existsSync(dbPath), false); | |
@@ -306,8 +295,7 @@ suite('DatabaseSync.prototype.open()', () => { | |||
| 306 | 295 | }); | |
| 307 | 296 | ||
| 308 | 297 | test('throws if database is already open', (t) => { | |
| 309 | - const db = new DatabaseSync(nextDb(), { open: false }); | ||
| 310 | - t.after(() => { db.close(); }); | ||
| 298 | + using db = new DatabaseSync(nextDb(), { open: false }); | ||
| 311 | 299 | ||
| 312 | 300 | t.assert.strictEqual(db.isOpen, false); | |
| 313 | 301 | db.open(); | |
@@ -324,15 +312,15 @@ suite('DatabaseSync.prototype.open()', () => { | |||
| 324 | 312 | ||
| 325 | 313 | suite('DatabaseSync.prototype.close()', () => { | |
| 326 | 314 | test('closes an open database connection', (t) => { | |
| 327 | - const db = new DatabaseSync(nextDb()); | ||
| 315 | + using db = new DatabaseSync(nextDb()); | ||
| 328 | 316 | ||
| 329 | 317 | t.assert.strictEqual(db.isOpen, true); | |
| 330 | 318 | t.assert.strictEqual(db.close(), undefined); | |
| 331 | 319 | t.assert.strictEqual(db.isOpen, false); | |
| 332 | 320 | }); | |
| 333 | 321 | ||
| 334 | 322 | test('throws if database is not open', (t) => { | |
| 335 | - const db = new DatabaseSync(nextDb(), { open: false }); | ||
| 323 | + using db = new DatabaseSync(nextDb(), { open: false }); | ||
| 336 | 324 | ||
| 337 | 325 | t.assert.strictEqual(db.isOpen, false); | |
| 338 | 326 | t.assert.throws(() => { | |
@@ -347,14 +335,13 @@ suite('DatabaseSync.prototype.close()', () => { | |||
| 347 | 335 | ||
| 348 | 336 | suite('DatabaseSync.prototype.prepare()', () => { | |
| 349 | 337 | test('returns a prepared statement', (t) => { | |
| 350 | - const db = new DatabaseSync(nextDb()); | ||
| 351 | - t.after(() => { db.close(); }); | ||
| 338 | + using db = new DatabaseSync(nextDb()); | ||
| 352 | 339 | const stmt = db.prepare('CREATE TABLE webstorage(key TEXT)'); | |
| 353 | 340 | t.assert.ok(stmt instanceof StatementSync); | |
| 354 | 341 | }); | |
| 355 | 342 | ||
| 356 | 343 | test('throws if database is not open', (t) => { | |
| 357 | - const db = new DatabaseSync(nextDb(), { open: false }); | ||
| 344 | + using db = new DatabaseSync(nextDb(), { open: false }); | ||
| 358 | 345 | ||
| 359 | 346 | t.assert.throws(() => { | |
| 360 | 347 | db.prepare(); | |
@@ -365,8 +352,7 @@ suite('DatabaseSync.prototype.prepare()', () => { | |||
| 365 | 352 | }); | |
| 366 | 353 | ||
| 367 | 354 | test('throws if sql is not a string', (t) => { | |
| 368 | - const db = new DatabaseSync(nextDb()); | ||
| 369 | - t.after(() => { db.close(); }); | ||
| 355 | + using db = new DatabaseSync(nextDb()); | ||
| 370 | 356 | ||
| 371 | 357 | t.assert.throws(() => { | |
| 372 | 358 | db.prepare(); | |
@@ -379,8 +365,7 @@ suite('DatabaseSync.prototype.prepare()', () => { | |||
| 379 | 365 | ||
| 380 | 366 | suite('DatabaseSync.prototype.exec()', () => { | |
| 381 | 367 | test('executes SQL', (t) => { | |
| 382 | - const db = new DatabaseSync(nextDb()); | ||
| 383 | - t.after(() => { db.close(); }); | ||
| 368 | + using db = new DatabaseSync(nextDb()); | ||
| 384 | 369 | const result = db.exec(` | |
| 385 | 370 | CREATE TABLE data( | |
| 386 | 371 | key INTEGER PRIMARY KEY, | |
@@ -398,8 +383,7 @@ suite('DatabaseSync.prototype.exec()', () => { | |||
| 398 | 383 | }); | |
| 399 | 384 | ||
| 400 | 385 | test('reports errors from SQLite', (t) => { | |
| 401 | - const db = new DatabaseSync(nextDb()); | ||
| 402 | - t.after(() => { db.close(); }); | ||
| 386 | + using db = new DatabaseSync(nextDb()); | ||
| 403 | 387 | ||
| 404 | 388 | t.assert.throws(() => { | |
| 405 | 389 | db.exec('CREATE TABLEEEE'); | |
@@ -419,7 +403,7 @@ suite('DatabaseSync.prototype.exec()', () => { | |||
| 419 | 403 | }); | |
| 420 | 404 | ||
| 421 | 405 | test('throws if database is not open', (t) => { | |
| 422 | - const db = new DatabaseSync(nextDb(), { open: false }); | ||
| 406 | + using db = new DatabaseSync(nextDb(), { open: false }); | ||
| 423 | 407 | ||
| 424 | 408 | t.assert.throws(() => { | |
| 425 | 409 | db.exec(); | |
@@ -430,8 +414,7 @@ suite('DatabaseSync.prototype.exec()', () => { | |||
| 430 | 414 | }); | |
| 431 | 415 | ||
| 432 | 416 | test('throws if sql is not a string', (t) => { | |
| 433 | - const db = new DatabaseSync(nextDb()); | ||
| 434 | - t.after(() => { db.close(); }); | ||
| 417 | + using db = new DatabaseSync(nextDb()); | ||
| 435 | 418 | ||
| 436 | 419 | t.assert.throws(() => { | |
| 437 | 420 | db.exec(); | |
@@ -444,7 +427,7 @@ suite('DatabaseSync.prototype.exec()', () => { | |||
| 444 | 427 | ||
| 445 | 428 | suite('DatabaseSync.prototype.isTransaction', () => { | |
| 446 | 429 | test('correctly detects a committed transaction', (t) => { | |
| 447 | - const db = new DatabaseSync(':memory:'); | ||
| 430 | + using db = new DatabaseSync(':memory:'); | ||
| 448 | 431 | ||
| 449 | 432 | t.assert.strictEqual(db.isTransaction, false); | |
| 450 | 433 | db.exec('BEGIN'); | |
@@ -456,7 +439,7 @@ suite('DatabaseSync.prototype.isTransaction', () => { | |||
| 456 | 439 | }); | |
| 457 | 440 | ||
| 458 | 441 | test('correctly detects a rolled back transaction', (t) => { | |
| 459 | - const db = new DatabaseSync(':memory:'); | ||
| 442 | + using db = new DatabaseSync(':memory:'); | ||
| 460 | 443 | ||
| 461 | 444 | t.assert.strictEqual(db.isTransaction, false); | |
| 462 | 445 | db.exec('BEGIN'); | |
@@ -468,7 +451,7 @@ suite('DatabaseSync.prototype.isTransaction', () => { | |||
| 468 | 451 | }); | |
| 469 | 452 | ||
| 470 | 453 | test('throws if database is not open', (t) => { | |
| 471 | - const db = new DatabaseSync(nextDb(), { open: false }); | ||
| 454 | + using db = new DatabaseSync(nextDb(), { open: false }); | ||
| 472 | 455 | ||
| 473 | 456 | t.assert.throws(() => { | |
| 474 | 457 | return db.isTransaction; | |
@@ -481,7 +464,7 @@ suite('DatabaseSync.prototype.isTransaction', () => { | |||
| 481 | 464 | ||
| 482 | 465 | suite('DatabaseSync.prototype.location()', () => { | |
| 483 | 466 | test('throws if database is not open', (t) => { | |
| 484 | - const db = new DatabaseSync(nextDb(), { open: false }); | ||
| 467 | + using db = new DatabaseSync(nextDb(), { open: false }); | ||
| 485 | 468 | ||
| 486 | 469 | t.assert.throws(() => { | |
| 487 | 470 | db.location(); | |
@@ -492,8 +475,7 @@ suite('DatabaseSync.prototype.location()', () => { | |||
| 492 | 475 | }); | |
| 493 | 476 | ||
| 494 | 477 | test('throws if provided dbName is not string', (t) => { | |
| 495 | - const db = new DatabaseSync(nextDb()); | ||
| 496 | - t.after(() => { db.close(); }); | ||
| 478 | + using db = new DatabaseSync(nextDb()); | ||
| 497 | 479 | ||
| 498 | 480 | t.assert.throws(() => { | |
| 499 | 481 | db.location(null); | |
@@ -504,24 +486,20 @@ suite('DatabaseSync.prototype.location()', () => { | |||
| 504 | 486 | }); | |
| 505 | 487 | ||
| 506 | 488 | test('returns null when connected to in-memory database', (t) => { | |
| 507 | - const db = new DatabaseSync(':memory:'); | ||
| 489 | + using db = new DatabaseSync(':memory:'); | ||
| 508 | 490 | t.assert.strictEqual(db.location(), null); | |
| 509 | 491 | }); | |
| 510 | 492 | ||
| 511 | 493 | test('returns db path when connected to a persistent database', (t) => { | |
| 512 | 494 | const dbPath = nextDb(); | |
| 513 | - const db = new DatabaseSync(dbPath); | ||
| 514 | - t.after(() => { db.close(); }); | ||
| 495 | + using db = new DatabaseSync(dbPath); | ||
| 515 | 496 | t.assert.strictEqual(db.location(), dbPath); | |
| 516 | 497 | }); | |
| 517 | 498 | ||
| 518 | 499 | test('returns that specific db path when attached', (t) => { | |
| 519 | 500 | const dbPath = nextDb(); | |
| 520 | 501 | const otherPath = nextDb(); | |
| 521 | - const db = new DatabaseSync(dbPath); | ||
| 522 | - t.after(() => { db.close(); }); | ||
| 523 | - const other = new DatabaseSync(dbPath); | ||
| 524 | - t.after(() => { other.close(); }); | ||
| 502 | + using db = new DatabaseSync(dbPath); | ||
| 525 | 503 | ||
| 526 | 504 | // Adding this escape because the test with unusual chars have a single quote which breaks the query | |
| 527 | 505 | const escapedPath = otherPath.replace("'", "''"); | |
@@ -530,3 +508,18 @@ suite('DatabaseSync.prototype.location()', () => { | |||
| 530 | 508 | t.assert.strictEqual(db.location('other'), otherPath); | |
| 531 | 509 | }); | |
| 532 | 510 | }); | |
| 511 | + | ||
| 512 | + suite('DatabaseSync.prototype[Symbol.dispose]', () => { | ||
| 513 | + test('closes an open database', (t) => { | ||
| 514 | + const db = new DatabaseSync(nextDb()); | ||
| 515 | + t.assert.strictEqual(db.isOpen, true); | ||
| 516 | + db[Symbol.dispose](); | ||
| 517 | + t.assert.strictEqual(db.isOpen, false); | ||
| 518 | + }); | ||
| 519 | + | ||
| 520 | + test('does not throw on databases that are not open', (t) => { | ||
| 521 | + const db = new DatabaseSync(nextDb(), { open: false }); | ||
| 522 | + t.assert.strictEqual(db.isOpen, false); | ||
| 523 | + db[Symbol.dispose](); | ||
| 524 | + }); | ||
| 525 | + }); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments