diff options
Diffstat (limited to 'unit_tests/init_and_shutdown.cpp')
-rw-r--r-- | unit_tests/init_and_shutdown.cpp | 680 |
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 | ||
6 | TEST_CASE("lanes.require 'lanes'") | 6 | TEST_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 |
61 | TEST_CASE("lanes.configure.allocator") | 61 | TEST_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 | |||
102 | TEST_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 | ||
178 | TEST_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 | ||
200 | TEST_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 | |||
194 | TEST_CASE("lanes.configure.internal_allocator") | 211 | TEST_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 | ||
292 | TEST_CASE("lanes.configure.the rest") | 309 | TEST_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 | |||
365 | TEST_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>") | 421 | TEST_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>") | 481 | TEST_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 | |||
537 | TEST_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") | 586 | TEST_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") | 635 | TEST_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") | 684 | TEST_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 | |||
733 | TEST_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 |
682 | TEST_CASE("lanes.finally.no fixture") | 778 | TEST_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 | ||
703 | TEST_CASE("lanes.finally.with fixture") | 799 | TEST_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 | ||
721 | TEST_CASE("lanes.finally.shutdown with an uncooperative lane") | 817 | TEST_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 | ||
770 | TEST_CASE("lanes.on_state_create setting") | 866 | TEST_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 | ||