aboutsummaryrefslogtreecommitdiff
path: root/unit_tests/init_and_shutdown.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unit_tests/init_and_shutdown.cpp')
-rw-r--r--unit_tests/init_and_shutdown.cpp680
1 files changed, 388 insertions, 292 deletions
diff --git a/unit_tests/init_and_shutdown.cpp b/unit_tests/init_and_shutdown.cpp
index b8174fd..69e4f1b 100644
--- a/unit_tests/init_and_shutdown.cpp
+++ b/unit_tests/init_and_shutdown.cpp
@@ -3,7 +3,7 @@
3 3
4// ################################################################################################# 4// #################################################################################################
5 5
6TEST_CASE("lanes.require 'lanes'") 6TEST_CASE("Lua.require_lanes")
7{ 7{
8 LuaState L{ LuaState::WithBaseLibs{ false }, LuaState::WithFixture{ false } }; 8 LuaState L{ LuaState::WithBaseLibs{ false }, LuaState::WithFixture{ false } };
9 9
@@ -58,7 +58,7 @@ TEST_CASE("lanes.require 'lanes'")
58// ################################################################################################# 58// #################################################################################################
59 59
60// allocator should be "protected", a C function returning a suitable userdata, or nil 60// allocator should be "protected", a C function returning a suitable userdata, or nil
61TEST_CASE("lanes.configure.allocator") 61TEST_CASE("lanes.configure.allocator/bool_number_table_string")
62{ 62{
63 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; 63 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
64 64
@@ -90,49 +90,33 @@ TEST_CASE("lanes.configure.allocator")
90 90
91 // --------------------------------------------------------------------------------------------- 91 // ---------------------------------------------------------------------------------------------
92 92
93 SECTION("allocator = <Lua function>")
94 {
95 L.requireFailure("require 'lanes'.configure{allocator = function() return {}, 12, 'yoy' end}");
96 }
97
98 // ---------------------------------------------------------------------------------------------
99
100 SECTION("allocator = <bad C function>")
101 {
102 // a C function that doesn't return what we expect should cause an error too
103 // TODO: for some reason, we use os.getenv here because using 'print' as the culprit, the tests deadlock in Release builds
104 L.requireFailure("return type(require 'lanes'.configure{allocator = os.getenv})");
105 }
106
107 // ---------------------------------------------------------------------------------------------
108
109 SECTION("allocator = <string with a typo>") 93 SECTION("allocator = <string with a typo>")
110 { 94 {
111 // oops, a typo 95 // oops, a typo
112 L.requireFailure("require 'lanes'.configure{allocator = 'Protected'}"); 96 L.requireFailure("require 'lanes'.configure{allocator = 'Protected'}");
113 } 97 }
98}
99
100// #################################################################################################
101
102TEST_CASE("lanes.configure.allocator/bad_functions")
103{
104 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
114 105
115 // --------------------------------------------------------------------------------------------- 106 // ---------------------------------------------------------------------------------------------
116 107
117 SECTION("allocator = 'protected'") 108 SECTION("allocator = <Lua function>")
118 { 109 {
119 // no typo, should work 110 L.requireFailure("require 'lanes'.configure{allocator = function() return {}, 12, 'yoy' end}");
120 L.requireSuccess("require 'lanes'.configure{allocator = 'protected'}");
121 } 111 }
122 112
123 // --------------------------------------------------------------------------------------------- 113 // ---------------------------------------------------------------------------------------------
124 114
125 SECTION("allocator = <good custom C allocator>") 115 SECTION("allocator = <bad C function>")
126 { 116 {
127 // a function that provides what we expect is fine 117 // a C function that doesn't return what we expect should cause an error too
128 static constexpr lua_CFunction _provideAllocator = +[](lua_State* const L_) { 118 // TODO: for some reason, we use os.getenv here because using 'print' as the culprit, the tests deadlock in Release builds
129 lanes::AllocatorDefinition* const _def{ new (L_) lanes::AllocatorDefinition{} }; 119 L.requireFailure("return type(require 'lanes'.configure{allocator = os.getenv})");
130 _def->initFrom(L_);
131 return 1;
132 };
133 lua_pushcfunction(L, _provideAllocator);
134 lua_setglobal(L, "ProvideAllocator");
135 L.requireSuccess("require 'lanes'.configure{allocator = ProvideAllocator}");
136 } 120 }
137 121
138 // --------------------------------------------------------------------------------------------- 122 // ---------------------------------------------------------------------------------------------
@@ -191,6 +175,39 @@ TEST_CASE("lanes.configure.allocator")
191 175
192// ################################################################################################# 176// #################################################################################################
193 177
178TEST_CASE("lanes.configure.allocator/good_function")
179{
180 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
181
182 SECTION("allocator = <good custom C allocator>")
183 {
184 // a function that provides what we expect is fine
185 static constexpr lua_CFunction _provideAllocator = +[](lua_State* const L_) {
186 lanes::AllocatorDefinition* const _def{ new (L_) lanes::AllocatorDefinition{} };
187 _def->initFrom(L_);
188 return 1;
189 };
190 lua_pushcfunction(L, _provideAllocator);
191 lua_setglobal(L, "ProvideAllocator");
192 L.requireSuccess("require 'lanes'.configure{allocator = ProvideAllocator}");
193 }
194}
195
196// #################################################################################################
197
198// TODO: investigate why this test crashes under AppVerifier on lanes_core.dll unload when running against Lua 5.1, 5.2 and 5.4 RELEASE ONLY!
199// apparently, the mutex of ProtectedAllocator is deemed still in use. Crash goes away if I don't use it in protected_lua_Alloc
200TEST_CASE(("lanes.configure.allocator/protected"))
201{
202 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
203
204 // no typo, should work
205 L.requireSuccess("require 'lanes'.configure{allocator = 'protected'}");
206}
207
208
209// #################################################################################################
210
194TEST_CASE("lanes.configure.internal_allocator") 211TEST_CASE("lanes.configure.internal_allocator")
195{ 212{
196 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; 213 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
@@ -289,388 +306,467 @@ TEST_CASE("lanes.configure.keepers_gc_threshold")
289 306
290// ################################################################################################# 307// #################################################################################################
291 308
292TEST_CASE("lanes.configure.the rest") 309TEST_CASE("lanes.configure.linda_wake_period")
293{ 310{
294 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; 311 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
295 312
313 // linda_wake_period should be a number > 0, or 'never'
314
315 SECTION("linda_wake_period = <table>")
316 {
317 L.requireFailure("require 'lanes'.configure{linda_wake_period = {}}");
318 }
296 319
297 // --------------------------------------------------------------------------------------------- 320 // ---------------------------------------------------------------------------------------------
298 // nb_user_keepers should be a number in [0, 100]
299 321
300 SECTION("nb_user_keepers") 322 SECTION("linda_wake_period = <string>")
301 { 323 {
302 SECTION("nb_user_keepers = <table>") 324 L.requireFailure("require 'lanes'.configure{linda_wake_period = 'gluh'}");
303 { 325 }
304 L.requireFailure("require 'lanes'.configure{nb_user_keepers = {}}");
305 }
306 326
307 // ----------------------------------------------------------------------------------------- 327 // ---------------------------------------------------------------------------------------------
308 328
309 SECTION("nb_user_keepers = <string>") 329 SECTION("linda_wake_period = 'never'")
310 { 330 {
311 L.requireFailure("require 'lanes'.configure{nb_user_keepers = 'gluh'}"); 331 L.requireSuccess("require 'lanes'.configure{linda_wake_period = 'never'}");
312 } 332 }
313 333
314 // ----------------------------------------------------------------------------------------- 334 // ---------------------------------------------------------------------------------------------
315 335
316 SECTION("nb_user_keepers = -1") 336 SECTION("linda_wake_period = <negative number>")
317 { 337 {
318 L.requireFailure("require 'lanes'.configure{nb_user_keepers = -1}"); 338 L.requireFailure("require 'lanes'.configure{linda_wake_period = -0.001}");
319 } 339 }
320 340
321 // ----------------------------------------------------------------------------------------- 341 // ---------------------------------------------------------------------------------------------
322 342
323 SECTION("nb_user_keepers = 0") 343 SECTION("linda_wake_period = 0")
324 { 344 {
325 L.requireSuccess("require 'lanes'.configure{nb_user_keepers = 0}"); 345 L.requireFailure("require 'lanes'.configure{linda_wake_period = 0}");
326 } 346 }
327 347
328 // ----------------------------------------------------------------------------------------- 348 // ---------------------------------------------------------------------------------------------
329 349
330 SECTION("nb_user_keepers = 100") 350 SECTION("linda_wake_period = 0.0001s")
331 { 351 {
332 L.requireSuccess("require 'lanes'.configure{nb_user_keepers = 100}"); 352 L.requireSuccess("require 'lanes'.configure{linda_wake_period = 0.0001}");
333 } 353 }
334 354
335 // ----------------------------------------------------------------------------------------- 355 // ---------------------------------------------------------------------------------------------
336 356
337 SECTION("nb_user_keepers = 101") 357 SECTION("linda_wake_period = 1e30")
338 { 358 {
339 L.requireFailure("require 'lanes'.configure{nb_user_keepers = 101}"); 359 L.requireSuccess("require 'lanes'.configure{linda_wake_period = 1e30}");
340 } 360 }
361}
362
363// #################################################################################################
364
365TEST_CASE("lanes.configure.nb_user_keepers")
366{
367 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
368
369 // nb_user_keepers should be a number in [0, 100]
370
371 SECTION("nb_user_keepers = <table>")
372 {
373 L.requireFailure("require 'lanes'.configure{nb_user_keepers = {}}");
341 } 374 }
342 375
343 // --------------------------------------------------------------------------------------------- 376 // ---------------------------------------------------------------------------------------------
344 // on_state_create should be a function, either C or Lua, without upvalues
345 377
346 SECTION("on_state_create") 378 SECTION("nb_user_keepers = <string>")
347 { 379 {
348 SECTION("on_state_create = <table>") 380 L.requireFailure("require 'lanes'.configure{nb_user_keepers = 'gluh'}");
349 { 381 }
350 L.requireFailure("require 'lanes'.configure{on_state_create = {}}");
351 }
352 382
353 // ----------------------------------------------------------------------------------------- 383 // ---------------------------------------------------------------------------------------------
354 384
355 SECTION("on_state_create = <string>") 385 SECTION("nb_user_keepers = -1")
356 { 386 {
357 L.requireFailure("require 'lanes'.configure{on_state_create = 'gluh'}"); 387 L.requireFailure("require 'lanes'.configure{nb_user_keepers = -1}");
358 } 388 }
359 389
360 // ----------------------------------------------------------------------------------------- 390 // ---------------------------------------------------------------------------------------------
361 391
362 SECTION("on_state_create = <number>") 392 SECTION("nb_user_keepers = 0")
363 { 393 {
364 L.requireFailure("require 'lanes'.configure{on_state_create = 1}"); 394 L.requireSuccess("require 'lanes'.configure{nb_user_keepers = 0}");
365 } 395 }
366 396
367 // ----------------------------------------------------------------------------------------- 397 // ---------------------------------------------------------------------------------------------
368 398
369 SECTION("on_state_create = false") 399 SECTION("nb_user_keepers = 1")
370 { 400 {
371 L.requireFailure("require 'lanes'.configure{on_state_create = false}"); 401 L.requireSuccess("require 'lanes'.configure{nb_user_keepers = 1}");
372 } 402 }
373 403
374 // ----------------------------------------------------------------------------------------- 404 // ---------------------------------------------------------------------------------------------
375 405
376 SECTION("on_state_create = true") 406 SECTION("nb_user_keepers = 100")
377 { 407 {
378 L.requireFailure("require 'lanes'.configure{on_state_create = true}"); 408 L.requireSuccess("require 'lanes'.configure{nb_user_keepers = 100}");
379 } 409 }
380 410
381 // ----------------------------------------------------------------------------------------- 411 // -----------------------------------------------------------------------------------------
382 412
383 SECTION("on_state_create = <Lua function>") 413 SECTION("nb_user_keepers = 101")
384 { 414 {
385 // on_state_create isn't called inside a Keeper state if it's a Lua function (which is good as print() doesn't exist there!) 415 L.requireFailure("require 'lanes'.configure{nb_user_keepers = 101}");
386 L.requireSuccess("local print = print; require 'lanes'.configure{on_state_create = function() print 'hello' end}"); 416 }
387 } 417}
388 418
389 // ----------------------------------------------------------------------------------------- 419// #################################################################################################
390 420
391 SECTION("on_state_create = <C function>") 421TEST_CASE("lanes.configure.on_state_create/configuration")
392 { 422{
393 // funnily enough, in Lua 5.3, print() uses global tostring(), that doesn't exist in a keeper since we didn't open libs -> "attempt to call a nil value" 423 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
394 // conclusion, don't use print() as a fake on_state_create() callback! 424
395 // assert() should be fine since we pass a non-false argument to on_state_create 425 // on_state_create should be a function, either C or Lua, without upvalues
396 L.requireSuccess("require 'lanes'.configure{on_state_create = assert}"); 426
397 } 427 SECTION("on_state_create = <table>")
428 {
429 L.requireFailure("require 'lanes'.configure{on_state_create = {}}");
398 } 430 }
399 431
400 // --------------------------------------------------------------------------------------------- 432 // ---------------------------------------------------------------------------------------------
401 // shutdown_timeout should be a number in [0,3600]
402 433
403 SECTION("shutdown_timeout") 434 SECTION("on_state_create = <string>")
404 { 435 {
405 SECTION("shutdown_timeout = <table>") 436 L.requireFailure("require 'lanes'.configure{on_state_create = 'gluh'}");
406 { 437 }
407 L.requireFailure("require 'lanes'.configure{shutdown_timeout = {}}");
408 }
409 438
410 // ----------------------------------------------------------------------------------------- 439 // ---------------------------------------------------------------------------------------------
411 440
412 SECTION("shutdown_timeout = <string>") 441 SECTION("on_state_create = <number>")
413 { 442 {
414 L.requireFailure("require 'lanes'.configure{shutdown_timeout = 'gluh'}"); 443 L.requireFailure("require 'lanes'.configure{on_state_create = 1}");
415 } 444 }
416 445
417 // ----------------------------------------------------------------------------------------- 446 // ---------------------------------------------------------------------------------------------
418 447
419 SECTION("shutdown_timeout = <negative number>") 448 SECTION("on_state_create = false")
420 { 449 {
421 L.requireFailure("require 'lanes'.configure{shutdown_timeout = -0.001}"); 450 L.requireFailure("require 'lanes'.configure{on_state_create = false}");
422 } 451 }
423 452
424 // ----------------------------------------------------------------------------------------- 453 // ---------------------------------------------------------------------------------------------
425 454
426 SECTION("shutdown_timeout = 0") 455 SECTION("on_state_create = true")
427 { 456 {
428 L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 0}"); 457 L.requireFailure("require 'lanes'.configure{on_state_create = true}");
429 } 458 }
430 459
431 // ----------------------------------------------------------------------------------------- 460 // ---------------------------------------------------------------------------------------------
432 461
433 SECTION("shutdown_timeout = 1s") 462 SECTION("on_state_create = <Lua function>")
434 { 463 {
435 L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 1}"); 464 // on_state_create isn't called inside a Keeper state if it's a Lua function (which is good as print() doesn't exist there!)
436 } 465 L.requireSuccess("local print = print; require 'lanes'.configure{on_state_create = function() print 'hello' end}");
466 }
437 467
438 // ----------------------------------------------------------------------------------------- 468 // ---------------------------------------------------------------------------------------------
439 469
440 SECTION("shutdown_timeout = 3600s") 470 SECTION("on_state_create = <C function>")
441 { 471 {
442 L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 3600}"); 472 // funnily enough, in Lua 5.3, print() uses global tostring(), that doesn't exist in a keeper since we didn't open libs -> "attempt to call a nil value"
443 } 473 // conclusion, don't use print() as a fake on_state_create() callback!
474 // assert() should be fine since we pass a non-false argument to on_state_create
475 L.requireSuccess("require 'lanes'.configure{on_state_create = assert}");
476 }
477}
444 478
445 // ----------------------------------------------------------------------------------------- 479// #################################################################################################
446 480
447 SECTION("shutdown_timeout = <too long>") 481TEST_CASE("lanes.configure.shutdown_timeout")
448 { 482{
449 L.requireFailure("require 'lanes'.configure{shutdown_timeout = 3600.001}"); 483 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
450 } 484
485 // shutdown_timeout should be a number in [0,3600]
486
487 SECTION("shutdown_timeout = <table>")
488 {
489 L.requireFailure("require 'lanes'.configure{shutdown_timeout = {}}");
451 } 490 }
452 491
453 // --------------------------------------------------------------------------------------------- 492 // ---------------------------------------------------------------------------------------------
454 // strip_functions should be a boolean
455 493
456 SECTION("strip_functions") 494 SECTION("shutdown_timeout = <string>")
457 { 495 {
458 SECTION("strip_functions = <table>") 496 L.requireFailure("require 'lanes'.configure{shutdown_timeout = 'gluh'}");
459 { 497 }
460 L.requireFailure("require 'lanes'.configure{strip_functions = {}}");
461 }
462 498
463 // ----------------------------------------------------------------------------------------- 499 // ---------------------------------------------------------------------------------------------
464 500
465 SECTION("strip_functions = <string>") 501 SECTION("shutdown_timeout = <negative number>")
466 { 502 {
467 L.requireFailure("require 'lanes'.configure{strip_functions = 'gluh'}"); 503 L.requireFailure("require 'lanes'.configure{shutdown_timeout = -0.001}");
468 } 504 }
469 505
470 // ----------------------------------------------------------------------------------------- 506 // ---------------------------------------------------------------------------------------------
471 507
472 SECTION("strip_functions = <number>") 508 SECTION("shutdown_timeout = 0")
473 { 509 {
474 L.requireFailure("require 'lanes'.configure{strip_functions = 1}"); 510 L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 0}");
475 } 511 }
476 512
477 // ----------------------------------------------------------------------------------------- 513 // ---------------------------------------------------------------------------------------------
478 514
479 SECTION("strip_functions = <C function>") 515 SECTION("shutdown_timeout = 1s")
480 { 516 {
481 L.requireFailure("require 'lanes'.configure{strip_functions = print}"); 517 L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 1}");
482 } 518 }
483 519
484 // ----------------------------------------------------------------------------------------- 520 // ---------------------------------------------------------------------------------------------
485 521
486 SECTION("strip_functions = false") 522 SECTION("shutdown_timeout = 3600s")
487 { 523 {
488 L.requireSuccess("require 'lanes'.configure{strip_functions = false}"); 524 L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 3600}");
489 } 525 }
490 526
491 // ----------------------------------------------------------------------------------------- 527 // ---------------------------------------------------------------------------------------------
492 528
493 SECTION("strip_functions = true") 529 SECTION("shutdown_timeout = <too long>")
494 { 530 {
495 L.requireSuccess("require 'lanes'.configure{strip_functions = true}"); 531 L.requireFailure("require 'lanes'.configure{shutdown_timeout = 3600.001}");
496 } 532 }
533}
534
535// #################################################################################################
536
537TEST_CASE("lanes.configure.strip_functions")
538{
539 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
540
541 // strip_functions should be a boolean
542
543 SECTION("strip_functions = <table>")
544 {
545 L.requireFailure("require 'lanes'.configure{strip_functions = {}}");
497 } 546 }
498 547
499 // --------------------------------------------------------------------------------------------- 548 // ---------------------------------------------------------------------------------------------
500 // track_lanes should be a boolean
501 549
502 SECTION("track_lanes") 550 SECTION("strip_functions = <string>")
503 { 551 {
504 SECTION("track_lanes = <table>") 552 L.requireFailure("require 'lanes'.configure{strip_functions = 'gluh'}");
505 { 553 }
506 L.requireFailure("require 'lanes'.configure{track_lanes = {}}");
507 }
508 554
509 // ----------------------------------------------------------------------------------------- 555 // ---------------------------------------------------------------------------------------------
510 556
511 SECTION("track_lanes = <string>") 557 SECTION("strip_functions = <number>")
512 { 558 {
513 L.requireFailure("require 'lanes'.configure{track_lanes = 'gluh'}"); 559 L.requireFailure("require 'lanes'.configure{strip_functions = 1}");
514 } 560 }
515 561
516 // ----------------------------------------------------------------------------------------- 562 // ---------------------------------------------------------------------------------------------
517 563
518 SECTION("track_lanes = <number>") 564 SECTION("strip_functions = <C function>")
519 { 565 {
520 L.requireFailure("require 'lanes'.configure{track_lanes = 1}"); 566 L.requireFailure("require 'lanes'.configure{strip_functions = print}");
521 } 567 }
522 568
523 // ----------------------------------------------------------------------------------------- 569 // ---------------------------------------------------------------------------------------------
524 570
525 SECTION("track_lanes = <C function>") 571 SECTION("strip_functions = false")
526 { 572 {
527 L.requireFailure("require 'lanes'.configure{track_lanes = print}"); 573 L.requireSuccess("require 'lanes'.configure{strip_functions = false}");
528 } 574 }
529 575
530 // ----------------------------------------------------------------------------------------- 576 // ---------------------------------------------------------------------------------------------
531 577
532 SECTION("track_lanes = false") 578 SECTION("strip_functions = true")
533 { 579 {
534 L.requireSuccess("require 'lanes'.configure{track_lanes = false}"); 580 L.requireSuccess("require 'lanes'.configure{strip_functions = true}");
535 } 581 }
582}
536 583
537 // ----------------------------------------------------------------------------------------- 584// #################################################################################################
538 585
539 SECTION("track_lanes = true") 586TEST_CASE("lanes.configure.track_lanes")
540 { 587{
541 L.requireSuccess("require 'lanes'.configure{track_lanes = true}"); 588 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
542 } 589
590 // track_lanes should be a boolean
591
592 SECTION("track_lanes = <table>")
593 {
594 L.requireFailure("require 'lanes'.configure{track_lanes = {}}");
543 } 595 }
544 596
545 // --------------------------------------------------------------------------------------------- 597 // ---------------------------------------------------------------------------------------------
546 // verbose_errors should be a boolean
547 598
548 SECTION("verbose_errors") 599 SECTION("track_lanes = <string>")
549 { 600 {
550 SECTION("verbose_errors = <table>") 601 L.requireFailure("require 'lanes'.configure{track_lanes = 'gluh'}");
551 { 602 }
552 L.requireFailure("require 'lanes'.configure{verbose_errors = {}}");
553 }
554 603
555 // ----------------------------------------------------------------------------------------- 604 // ---------------------------------------------------------------------------------------------
556 605
557 SECTION("verbose_errors = <string>") 606 SECTION("track_lanes = <number>")
558 { 607 {
559 L.requireFailure("require 'lanes'.configure{verbose_errors = 'gluh'}"); 608 L.requireFailure("require 'lanes'.configure{track_lanes = 1}");
560 } 609 }
561 610
562 // ----------------------------------------------------------------------------------------- 611 // ---------------------------------------------------------------------------------------------
563 612
564 SECTION("verbose_errors = <number>") 613 SECTION("track_lanes = <C function>")
565 { 614 {
566 L.requireFailure("require 'lanes'.configure{verbose_errors = 1}"); 615 L.requireFailure("require 'lanes'.configure{track_lanes = print}");
567 } 616 }
568 617
569 // ----------------------------------------------------------------------------------------- 618 // ---------------------------------------------------------------------------------------------
570 619
571 SECTION("verbose_errors = <C function>") 620 SECTION("track_lanes = false")
572 { 621 {
573 L.requireFailure("require 'lanes'.configure{verbose_errors = print}"); 622 L.requireSuccess("require 'lanes'.configure{track_lanes = false}");
574 } 623 }
575 624
576 // ----------------------------------------------------------------------------------------- 625 // ---------------------------------------------------------------------------------------------
577 626
578 SECTION("verbose_errors = false") 627 SECTION("track_lanes = true")
579 { 628 {
580 L.requireSuccess("require 'lanes'.configure{verbose_errors = false}"); 629 L.requireSuccess("require 'lanes'.configure{track_lanes = true}");
581 } 630 }
631}
582 632
583 // ----------------------------------------------------------------------------------------- 633// #################################################################################################
584 634
585 SECTION("verbose_errors = true") 635TEST_CASE("lanes.configure.verbose_errors")
586 { 636{
587 L.requireSuccess("require 'lanes'.configure{verbose_errors = true}"); 637 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
588 } 638
639 // verbose_errors should be a boolean
640
641 SECTION("verbose_errors = <table>")
642 {
643 L.requireFailure("require 'lanes'.configure{verbose_errors = {}}");
589 } 644 }
590 645
591 // --------------------------------------------------------------------------------------------- 646 // ---------------------------------------------------------------------------------------------
592 // with_timers should be a boolean
593 647
594 SECTION("with_timers") 648 SECTION("verbose_errors = <string>")
595 { 649 {
596 SECTION("with_timers = <table>") 650 L.requireFailure("require 'lanes'.configure{verbose_errors = 'gluh'}");
597 { 651 }
598 L.requireFailure("require 'lanes'.configure{with_timers = {}}");
599 }
600 652
601 // ----------------------------------------------------------------------------------------- 653 // ---------------------------------------------------------------------------------------------
602 654
603 SECTION("with_timers = <string>") 655 SECTION("verbose_errors = <number>")
604 { 656 {
605 L.requireFailure("require 'lanes'.configure{with_timers = 'gluh'}"); 657 L.requireFailure("require 'lanes'.configure{verbose_errors = 1}");
606 } 658 }
607 659
608 // ----------------------------------------------------------------------------------------- 660 // ---------------------------------------------------------------------------------------------
609 661
610 SECTION("with_timers = <number>") 662 SECTION("verbose_errors = <C function>")
611 { 663 {
612 L.requireFailure("require 'lanes'.configure{with_timers = 1}"); 664 L.requireFailure("require 'lanes'.configure{verbose_errors = print}");
613 } 665 }
614 666
615 // ----------------------------------------------------------------------------------------- 667 // ---------------------------------------------------------------------------------------------
616 668
617 SECTION("with_timers = <C function>") 669 SECTION("verbose_errors = false")
618 { 670 {
619 L.requireFailure("require 'lanes'.configure{with_timers = print}"); 671 L.requireSuccess("require 'lanes'.configure{verbose_errors = false}");
620 } 672 }
621 673
622 // ----------------------------------------------------------------------------------------- 674 // ---------------------------------------------------------------------------------------------
623 675
624 SECTION("with_timers = false") 676 SECTION("verbose_errors = true")
625 { 677 {
626 L.requireSuccess("require 'lanes'.configure{with_timers = false}"); 678 L.requireSuccess("require 'lanes'.configure{verbose_errors = true}");
627 } 679 }
680}
628 681
629 // ----------------------------------------------------------------------------------------- 682// #################################################################################################
630 683
631 SECTION("with_timers = true") 684TEST_CASE("lanes.configure.with_timers")
632 { 685{
633 L.requireSuccess("require 'lanes'.configure{with_timers = true}"); 686 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
634 } 687
688 // with_timers should be a boolean
689
690 SECTION("with_timers = <table>")
691 {
692 L.requireFailure("require 'lanes'.configure{with_timers = {}}");
693 }
694
695 // ---------------------------------------------------------------------------------------------
696
697 SECTION("with_timers = <string>")
698 {
699 L.requireFailure("require 'lanes'.configure{with_timers = 'gluh'}");
635 } 700 }
636 701
637 // --------------------------------------------------------------------------------------------- 702 // ---------------------------------------------------------------------------------------------
703
704 SECTION("with_timers = <number>")
705 {
706 L.requireFailure("require 'lanes'.configure{with_timers = 1}");
707 }
708
709 // ---------------------------------------------------------------------------------------------
710
711 SECTION("with_timers = <C function>")
712 {
713 L.requireFailure("require 'lanes'.configure{with_timers = print}");
714 }
715
716 // ---------------------------------------------------------------------------------------------
717
718 SECTION("with_timers = false")
719 {
720 L.requireSuccess("require 'lanes'.configure{with_timers = false}");
721 }
722
723 // ---------------------------------------------------------------------------------------------
724
725 SECTION("with_timers = true")
726 {
727 L.requireSuccess("require 'lanes'.configure{with_timers = true}");
728 }
729}
730
731// #################################################################################################
732
733TEST_CASE("lanes.configure.unknown_setting")
734{
735 LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
736
638 // any unknown setting should be rejected 737 // any unknown setting should be rejected
639 738
640 SECTION("unknown_setting") 739 SECTION("table setting")
641 { 740 {
642 SECTION("table setting") 741 L.requireFailure("require 'lanes'.configure{[{}] = {}}");
643 { 742 }
644 L.requireFailure("require 'lanes'.configure{[{}] = {}}");
645 }
646 743
647 // ----------------------------------------------------------------------------------------- 744 // ---------------------------------------------------------------------------------------------
648 745
649 SECTION("boolean setting") 746 SECTION("boolean setting")
650 { 747 {
651 L.requireFailure("require 'lanes'.configure{[true] = 'gluh'}"); 748 L.requireFailure("require 'lanes'.configure{[true] = 'gluh'}");
652 } 749 }
653 750
654 // ----------------------------------------------------------------------------------------- 751 // ---------------------------------------------------------------------------------------------
655 752
656 SECTION("function setting") 753 SECTION("function setting")
657 { 754 {
658 L.requireFailure("require 'lanes'.configure{[function() end] = 1}"); 755 L.requireFailure("require 'lanes'.configure{[function() end] = 1}");
659 } 756 }
660 757
661 // ----------------------------------------------------------------------------------------- 758 // ---------------------------------------------------------------------------------------------
662 759
663 SECTION("number setting") 760 SECTION("number setting")
664 { 761 {
665 L.requireFailure("require 'lanes'.configure{[1] = function() end}"); 762 L.requireFailure("require 'lanes'.configure{[1] = function() end}");
666 } 763 }
667 764
668 // ----------------------------------------------------------------------------------------- 765 // ---------------------------------------------------------------------------------------------
669 766
670 SECTION("unknown string setting") 767 SECTION("unknown string setting")
671 { 768 {
672 L.requireFailure("require 'lanes'.configure{['gluh'] = false}"); 769 L.requireFailure("require 'lanes'.configure{['gluh'] = false}");
673 }
674 } 770 }
675} 771}
676 772
@@ -679,7 +775,7 @@ TEST_CASE("lanes.configure.the rest")
679 775
680#if LUAJIT_FLAVOR() == 0 776#if LUAJIT_FLAVOR() == 0
681// TODO: this test crashes inside S.close() against LuaJIT. to be investigated 777// TODO: this test crashes inside S.close() against LuaJIT. to be investigated
682TEST_CASE("lanes.finally.no fixture") 778TEST_CASE("lanes.finally.no_fixture")
683{ 779{
684 LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; 780 LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
685 // we need Lanes to be up. Since we run several 'scripts', we store it as a global 781 // we need Lanes to be up. Since we run several 'scripts', we store it as a global
@@ -700,7 +796,7 @@ TEST_CASE("lanes.finally.no fixture")
700 796
701// ################################################################################################# 797// #################################################################################################
702 798
703TEST_CASE("lanes.finally.with fixture") 799TEST_CASE("lanes.finally.with_fixture")
704{ 800{
705 LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; 801 LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } };
706 802
@@ -718,7 +814,7 @@ TEST_CASE("lanes.finally.with fixture")
718 814
719// ################################################################################################# 815// #################################################################################################
720 816
721TEST_CASE("lanes.finally.shutdown with an uncooperative lane") 817TEST_CASE("lanes.finally.shutdown_with_an_uncooperative_lane")
722{ 818{
723 LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; 819 LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } };
724 S.requireSuccess("lanes = require 'lanes'.configure()"); 820 S.requireSuccess("lanes = require 'lanes'.configure()");
@@ -767,7 +863,7 @@ namespace
767 863
768// ################################################################################################# 864// #################################################################################################
769 865
770TEST_CASE("lanes.on_state_create setting") 866TEST_CASE("lanes.configure.on_state_create/details")
771{ 867{
772 LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; 868 LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } };
773 869