> @lightningjs/blits@2.0.0-beta1-rc test > c8 node scripts/runTests.js src/engines/L3/element.test.js npm : ⚡️ Blits 17:22:10 Defining props as an Array has been deprecated and will stop working in future versions. Please use the new notation instead (an object with key values pairs). [ 'foo' ] At line:1 char:1 + npm run test src/engines/L3/element.test.js 2>&1 > element-test-full. ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: ( ⚡️ Blits ...irs). [ 'foo' ]:Strin g) [], RemoteException + FullyQualifiedErrorId : NativeCommandE rror ⚡️ Blits 17:22:12 speechSynthesis web API not available ⚡️ Blits 17:22:12 speechSynthesis web API not available ⚡️ Blits 17:22:12 speechSynthesis web API not available ⚡️ Blits 17:22:12 speechSynthesis web API not available ⚡️ Blits 17:22:13 speechSynthesis web API not available ⚡️ Blits 17:22:13 speechSynthesis web API not available ⚡️ Blits 17:22:13 speechSynthesis web API not available ⚡️ Blits 17:22:13 speechSynthesis web API not available ⚡️ Blits 17:22:13 speechSynthesis web API not available node:internal/process/promises:389 new UnhandledPromiseRejection(reason); ^ UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "#". at throwUnhandledRejectionsMode (node:internal/process/promises:389:7) at processPromiseRejections (node:internal/process/promises:470:17) at process.processTicksAndRejections (node:internal/process/task_queues:96:32) { code: 'ERR_UNHANDLED_REJECTION' } Node.js v20.19.4 Type √ Component should be a function Component - Factory function √ Component should be a factory function (i.e. return a function) Component - Factory requires a name to be passed √ Throw an error when no name argument has been passed Component - Factory requires a config to be passed √ Throw an error when no config argument has been passed Component - Instance should create internal id √ Button instance object should have correct internal id √ Heading instance object should have correct internal id Component - Instance should create component Id √ First Foo instance should have correct id √ Second Foo instance should have correct id √ First Bar instance should have correct id Component - Instance should initiate lifecycle object √ Lifecycle object should be initialized √ Lifecycle object should have a reference to foo instance √ Lifecycle object should have previous state not initialized √ Lifecycle object should have initial current state Component - Instance should set a parent reference √ Foo instance object should have parent component object reference √ Foo instance object should have parent element object reference Component - Instance should set a root reference √ Foo instance object should have root component object reference Component - Instance should initialize reactive props √ Foo instance should have props defined √ Foo instance props should be proxy √ should be strictly equal Component - Instance should initialize timeouts array √ Foo instance timeouts should be an array Component - Instance should initialize intervals array √ Foo instance intervals should be an array Component - Instance should initialize originalState √ Foo instance should store originalState properties √ Foo instance should store originalState $hasFocus property Component - Instance should initialize reactive state √ Foo instance should have state defined √ Foo instance state should be proxy √ should be strictly equal Component - Instance should initialize children √ Foo instance children should be an array √ Children should be an expected array √ Render should be called with parent parameter √ Render should be called with Foo component instance √ Render should be called with config parameter √ Render should be called with global components object Component - Instance should initialize wrapper √ Wrapper should be a first element of the children Component - Instance should initialize slots √ Slots should be an array √ Slot should be a expected element of the children Component - Instance should execute all side effects √ Effect should be invoked with foo component instance √ Effect should be invoked with component`s children √ Effect should be invoked with config object √ Effect should be invoked with global components object √ Effect should be invoked with root component √ Effect should be invoked with effect function Component - Instance should have all symbols configured √ effects should be be enumerable √ effects should be configurable √ lifecycle should be be enumerable √ lifecycle should be configurable √ parent should be be enumerable √ parent should be configurable √ rootParent should be be enumerable √ rootParent should be configurable √ holder should be be enumerable √ holder should be configurable √ id should be be enumerable √ id should be configurable √ props should be be enumerable √ props should be configurable √ timeouts should be be enumerable √ timeouts should be configurable √ intervals should be be enumerable √ intervals should be configurable √ originalState should be be enumerable √ originalState should be configurable √ state should be be enumerable √ state should be configurable √ children should be be enumerable √ children should be configurable √ cleanup should be be enumerable √ cleanup should be configurable √ wrapper should be be enumerable √ wrapper should be configurable √ slots should be be enumerable √ slots should be configurable √ rendererEventListeners should be be enumerable √ rendererEventListeners should be configurable Component - Instance should have ready state after the next process tick √ Foo component lifecycle should be eventually in a ready state Component - Configure input events √ Foo instance should have input events defined √ Foo instance should have `up` input event defined √ Foo instance should have `down` input event defined Component - Warn non-function input events √ Foo instance should have input events defined √ Should log two warning messages √ Should log foo is not a function warning message √ Should log 123 is not a function warning message Component - Configure methods √ Foo instance should have methods keys defined √ Foo instance should have two method keys defined √ First method key should be `foo` √ Second method key should be `bar` √ Foo instance should have `foo` method defined √ Foo instance should have `bar` method defined Component - Warn non-function methods √ Foo instance should have method keys defined √ Should log two warning messages √ Should log foo is not a function warning message √ Should log bar is not a function warning message Component - Warn when method name matches prop name √ Foo instance should have method keys defined √ Should log one error message √ Should log prop/method name clash error message Component - Should register renderer event listeners for hooks √ Should register renderer event listeners Component - Should register node event listeners for attach hook √ Should register inBounds event Component - Should register node event listeners for detach hook √ Should register outOfBounds event for detach Component - Should register node event listeners for enter hook √ Should register inViewport event Component - Should register node event listeners for exit hook √ Should register outOfBounds event for exit Component - Should setup watchers with dot notation × New value should be 2 at undefined 12 × Old value should be 1 at undefined undefined1 √ New value should be 2 √ Old value should be 1 √ Watcher with dot notation should be called Component - Should store cleanup function √ Should store cleanup function Component - Factory should setup component only once √ Setup should be called only once for the component type Component - Should handle skips parameter in render √ Component should be created with skips parameter Component - Should pass root component to effects √ Effect should receive root component Component - Should handle detach event with previous value check √ Detach hook should be triggered when previous > 0 Focus type √ Component should be a function Public methods on focus object √ Focus should have a get method √ Focus should have a set method  ⚡️ Blits 17:22:10  Focus chain:  ↳ undefined √ Focus should have an input method Setting focus √ Focused component should be set as new focused component  ⚡️ Blits 17:22:10  Focus chain:  ↳ undefined  ↳ undefined √ Focused component should have the lifecycle state "focus" Focussing along focus path √ Focused component should have the lifecycle state "focus"  ⚡️ Blits 17:22:10  Focus chain:  ↳ undefined  ↳ undefined √ Parent of focused component should also have the lifecycle state "focus" (as part of the focus chain) Unfocus focus chain  ⚡️ Blits 17:22:10  Focus chain:  ↳ undefined √ Focused component should have the lifecycle state "focus" √ Focused component should have the lifecycle state "focus" √ Previously focused component should have the lifecycle state "focus"  ⚡️ Blits 17:22:10  Focus chain:  ↳ undefined √ Parent of previously focused component should also have the lifecycle state "unfocus" (as part of the focus chain) Unfocus partial focus chain  ⚡️ Blits 17:22:10  Focus chain:  ↳ undefined  ↳ undefined √ Focused component should have the lifecycle state "focus" √ Focused component should have the lifecycle state "focus" √ Previously focused component should have the lifecycle state "focus" √ Grandparent of previously focused component should still have the lifecycle state "focus" (as part of the new focus chain) Function plugin registration √ Function plugin registered correctly with default options √ Function plugin registered with custom options Function plugin errors √ Function plugin without name throws error √ Function plugin with options as name throws error Object plugin registration √ Object plugins registered correctly with name resolution, options, and default log plugin exists Settings - Set a new key √ set and get a new key should work correctly Settings - Set an existing key √ set and get an existing key should work correctly Settings - Set multiple keys √ get should return the correct value for key b √ get should return the correct value for key c Settings - Get a non-existing key √ get a non-existing key returns null by default √ get a non-existing key returns the provided default value Announcer 1 Second Pause start 1 second pause √ pause finished Announcer 1 Second Pause Remove start 1 second pause remove pause √ removed pause Announcer disable/enable/toggle √ Disabled returns same noop object √ Enabled returns real promise, not noop √ Each enabled message gets unique promise √ Toggle off returns same noop √ Toggle on returns real promise √ Disabled messages are NOT processed √ Enabled messages are queued for processing Announcer methods exist √ Stop method exists √ Clear method exists √ Polite method exists √ Assertive method exists √ Speak method exists √ Pause method exists Announcer politeness affects queue order √ Assertive message processes first √ Off message processes second √ Polite message processes third Announcer announcement methods √ Has cancel method √ Has remove method √ Has stop method √ Cancel resolves with canceled status √ Remove resolves with canceled status Announcer stop interrupts processing √ Stop interrupts (or unavailable if no speechSynthesis) Announcer queue behavior √ Has cancel method √ Has remove method √ Has stop method √ First message queued √ Second message queued √ Third message queued √ Removed message resolves with canceled √ First message processes √ Third message processes after removal speechSynthesis - Type √ speechSynthesis should be an object √ speak should be a function √ cancel should be a function speechSynthesis - speak method returns promise √ speak should return a promise passed: 171 failed: 2 of 173 tests (12ms) 2 of 173 tests failed. ------------------------|---------|----------|---------|---------|---------------------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ------------------------|---------|----------|---------|---------|---------------------------------- All files | 52.39 | 77.7 | 27.33 | 52.39 | public/assets | 100 | 100 | 100 | 100 | fps_sprite.base64.js | 100 | 100 | 100 | 100 | scripts | 91.76 | 62.5 | 100 | 91.76 | runTests.js | 91.76 | 62.5 | 100 | 91.76 | 33-35,65,83-85 src | 83.6 | 90.41 | 58.33 | 83.6 | application.js | 28.09 | 100 | 0 | 28.09 | 33-119 component.js | 97.63 | 93.75 | 60 | 97.63 | ...3,291-292,301,315,322,407-410 constants.js | 100 | 100 | 100 | 100 | engine.js | 100 | 100 | 100 | 100 | focus.js | 77.12 | 73.68 | 62.5 | 77.12 | 33,54,81-98,122-131,148-152 launch.js | 78.86 | 100 | 0 | 78.86 | 49-61,111-123 plugin.js | 100 | 100 | 100 | 100 | settings.js | 100 | 100 | 100 | 100 | src/announcer | 73.46 | 84.61 | 44 | 73.46 | announcer.js | 90.81 | 91.17 | 52.63 | 90.81 | ...8-143,162-163,166-168,171-172 speechSynthesis.js | 47.58 | 40 | 16.66 | 47.58 | ...,60-63,66-100,105-108,115-118 src/component/base | 65 | 100 | 3.84 | 65 | announcer.js | 100 | 100 | 100 | 100 | events.js | 89.88 | 100 | 0 | 89.88 | 34-37,53-55,69,83 index.js | 100 | 100 | 100 | 100 | methods.js | 43.54 | 100 | 0 | 43.54 | ...0,171,182-199,210-220,233-248 router.js | 92.68 | 100 | 0 | 92.68 | 27,30,33 timeouts_intervals.js | 63.63 | 100 | 0 | 63.63 | ...43-47,55-58,66-70,78-82,90-93 utils.js | 65.11 | 100 | 20 | 65.11 | 25-26,41,54-80 src/component/setup | 82.42 | 80 | 66.66 | 82.42 | computed.js | 45.83 | 100 | 0 | 45.83 | 23-48 index.js | 100 | 62.5 | 100 | 100 | 49,55-56 input.js | 100 | 100 | 100 | 100 | methods.js | 100 | 100 | 100 | 100 | props.js | 81.69 | 83.33 | 50 | 81.69 | 33-37,58-61,64-67 routes.js | 51.28 | 100 | 0 | 51.28 | 21-39 state.js | 87.69 | 70 | 75 | 87.69 | 32-34,47-48,53-54,61 watch.js | 94.28 | 75 | 100 | 94.28 | 26-27 src/components | 62.09 | 100 | 33.33 | 62.09 | Circle.js | 96.77 | 100 | 50 | 96.77 | 28 FPScounter.js | 58.67 | 100 | 33.33 | 58.67 | 66-96,100-118 RouterView.js | 68.75 | 100 | 16.66 | 68.75 | 31-33,37-45,48,51-53,58-61 Sprite.js | 40.4 | 100 | 33.33 | 40.4 | 34-37,42-96 index.js | 100 | 100 | 100 | 100 | src/engines | 100 | 100 | 100 | 100 | index.js | 100 | 100 | 100 | 100 | src/engines/L3 | 26.62 | 100 | 0 | 26.62 | element.js | 25.28 | 100 | 0 | 25.28 | ...1,754,757,760,763-776,788-803 fontLoader.js | 33.33 | 100 | 0 | 33.33 | 12-33 index.js | 100 | 100 | 100 | 100 | launch.js | 37.09 | 100 | 0 | 37.09 | 33-37,40-44,47-65,76-124 shaderLoader.js | 11.29 | 100 | 0 | 11.29 | 6-27,30-62 src/helpers | 40 | 100 | 0 | 40 | deepEqualArray.js | 40 | 100 | 0 | 40 | 19-48 src/lib | 84.35 | 66.66 | 59.25 | 84.35 | componentId.js | 95.91 | 100 | 66.66 | 95.91 | 48-49 eventListeners.js | 47.01 | 100 | 0 | 47.01 | ...0,53-66,77-86,101-129,139-149 hooks.js | 100 | 85.71 | 100 | 100 | 43 lifecycle.js | 100 | 42.85 | 100 | 100 | 73-86 log.js | 89.74 | 55.55 | 100 | 89.74 | 54,69,84,93-101 symbols.js | 100 | 100 | 100 | 100 | utils.js | 87.3 | 100 | 0 | 87.3 | 35-36,44-45,53-54,62-63 src/lib/codegenerator | 12.3 | 75 | 13.33 | 12.3 | generator.js | 12.3 | 75 | 13.33 | 12.3 | ...6-911,916-925,929-934,937-943 src/lib/colors | 77.6 | 100 | 0 | 77.6 | colors.js | 36.26 | 100 | 0 | 36.26 | 29-36,40-89 htmlColors.js | 100 | 100 | 100 | 100 | src/lib/reactivity | 60.32 | 43.24 | 61.53 | 60.32 | effect.js | 78.49 | 41.66 | 50 | 78.49 | 24-25,28-29,35-45,50-51,54,77-78 reactive.js | 52.35 | 44 | 71.42 | 52.35 | ...7-138,151-186,193-194,201-212 src/lib/shaders | 22.69 | 100 | 0 | 22.69 | shaders.js | 22.69 | 100 | 0 | 22.69 | ...8-105,108-135,138-146,149-161 src/lib/templateparser | 29.74 | 60 | 29.41 | 29.74 | parser.js | 29.74 | 60 | 29.41 | 29.74 | ...0-345,348-368,371-373,376-387 src/plugins | 45.37 | 100 | 33.33 | 45.37 | log.js | 100 | 100 | 100 | 100 | theme.js | 30.85 | 100 | 0 | 30.85 | 24-44,49-92 src/plugins/storage | 65.93 | 75 | 17.64 | 65.93 | localCookie.js | 63.15 | 70 | 16.66 | 63.15 | ...6-110,113-116,119-127,129-130 storage.js | 73.46 | 100 | 20 | 73.46 | 27-31,34-39,42,45 src/router | 25.31 | 100 | 0 | 25.31 | router.js | 25.31 | 100 | 0 | 25.31 | ...6-565,568-586,589-593,596-638 src/router/transitions | 100 | 100 | 100 | 100 | fadeInOut.js | 100 | 100 | 100 | 100 | ------------------------|---------|----------|---------|---------|----------------------------------