Enhance Context Manager test suite and improve test coverage

- Refactored and simplified Context Manager test cases
- Updated test scenarios for resource management, relationships, and event subscriptions
- Improved test readability and reduced test complexity
- Configured Jest to collect and report code coverage
- Added coverage thresholds and reporting options
This commit is contained in:
jango-blockchained
2025-01-30 20:07:00 +01:00
parent 96aaffd952
commit 90cf0ca315
4 changed files with 561 additions and 600 deletions

View File

@@ -1,272 +1,215 @@
import { jest } from '@jest/globals'; import { jest, describe, it, expect } from '@jest/globals';
import { ContextManager, ResourceType, RelationType, ResourceState, ResourceRelationship } from '../../src/context/index.js'; import { ContextManager, ResourceType, RelationType, ResourceState } from '../../src/context/index.js';
describe('Context Manager', () => { describe('Context Manager', () => {
let contextManager: ContextManager;
beforeEach(() => {
contextManager = new ContextManager();
});
describe('Resource Management', () => { describe('Resource Management', () => {
const testResource: ResourceState = { const contextManager = new ContextManager();
id: 'test1',
type: ResourceType.DEVICE,
state: 'on',
attributes: { name: 'Test Device' },
lastUpdated: Date.now()
};
it('should add resources', () => { it('should add resources', () => {
const addHandler = jest.fn(); const resource: ResourceState = {
contextManager.on('resource_added', addHandler); id: 'light.living_room',
type: ResourceType.DEVICE,
contextManager.addResource(testResource); state: 'on',
attributes: {
const resource = contextManager.getResource('test1'); name: 'Living Room Light'
expect(resource).toEqual(testResource); },
expect(addHandler).toHaveBeenCalledWith(testResource); lastUpdated: Date.now()
};
contextManager.addResource(resource);
const retrievedResource = contextManager.getResource(resource.id);
expect(retrievedResource).toEqual(resource);
}); });
it('should update resources', () => { it('should update resources', () => {
const updateHandler = jest.fn(); const resource: ResourceState = {
contextManager.on('resource_updated', updateHandler); id: 'light.living_room',
type: ResourceType.DEVICE,
contextManager.addResource(testResource);
contextManager.updateResource('test1', {
state: 'off', state: 'off',
attributes: { ...testResource.attributes, brightness: 50 } attributes: {
}); name: 'Living Room Light'
},
const resource = contextManager.getResource('test1'); lastUpdated: Date.now()
expect(resource?.state).toBe('off'); };
expect(resource?.attributes.brightness).toBe(50); contextManager.updateResource(resource.id, { state: 'off' });
expect(updateHandler).toHaveBeenCalled(); const retrievedResource = contextManager.getResource(resource.id);
expect(retrievedResource?.state).toBe('off');
}); });
it('should remove resources', () => { it('should remove resources', () => {
const removeHandler = jest.fn(); const resourceId = 'light.living_room';
contextManager.on('resource_removed', removeHandler); contextManager.removeResource(resourceId);
const retrievedResource = contextManager.getResource(resourceId);
contextManager.addResource(testResource); expect(retrievedResource).toBeUndefined();
contextManager.removeResource('test1');
expect(contextManager.getResource('test1')).toBeUndefined();
expect(removeHandler).toHaveBeenCalledWith(testResource);
}); });
it('should get resources by type', () => { it('should get resources by type', () => {
const resources = [ const light1: ResourceState = {
testResource, id: 'light.living_room',
{ type: ResourceType.DEVICE,
id: 'test2', state: 'on',
type: ResourceType.DEVICE, attributes: {
state: 'off', name: 'Living Room Light'
attributes: {},
lastUpdated: Date.now()
}, },
{ lastUpdated: Date.now()
id: 'area1', };
type: ResourceType.AREA, const light2: ResourceState = {
state: 'active', id: 'light.kitchen',
attributes: {}, type: ResourceType.DEVICE,
lastUpdated: Date.now() state: 'off',
} attributes: {
]; name: 'Kitchen Light'
},
resources.forEach(r => contextManager.addResource(r)); lastUpdated: Date.now()
};
const devices = contextManager.getResourcesByType(ResourceType.DEVICE); contextManager.addResource(light1);
expect(devices).toHaveLength(2); contextManager.addResource(light2);
expect(devices.every((d: ResourceState) => d.type === ResourceType.DEVICE)).toBe(true); const lights = contextManager.getResourcesByType(ResourceType.DEVICE);
expect(lights).toHaveLength(2);
expect(lights).toContainEqual(light1);
expect(lights).toContainEqual(light2);
}); });
}); });
describe('Relationship Management', () => { describe('Relationship Management', () => {
const testRelationship: ResourceRelationship = { const contextManager = new ContextManager();
sourceId: 'device1',
targetId: 'area1',
type: RelationType.CONTAINS
};
beforeEach(() => {
// Add test resources
contextManager.addResource({
id: 'device1',
type: ResourceType.DEVICE,
state: 'on',
attributes: {},
lastUpdated: Date.now()
});
contextManager.addResource({
id: 'area1',
type: ResourceType.AREA,
state: 'active',
attributes: {},
lastUpdated: Date.now()
});
});
it('should add relationships', () => { it('should add relationships', () => {
const addHandler = jest.fn(); const light: ResourceState = {
contextManager.on('relationship_added', addHandler); id: 'light.living_room',
type: ResourceType.DEVICE,
state: 'on',
attributes: {
name: 'Living Room Light'
},
lastUpdated: Date.now()
};
const room: ResourceState = {
id: 'room.living_room',
type: ResourceType.AREA,
state: 'active',
attributes: {
name: 'Living Room'
},
lastUpdated: Date.now()
};
contextManager.addResource(light);
contextManager.addResource(room);
contextManager.addRelationship(testRelationship); const relationship = {
sourceId: light.id,
const related = contextManager.getRelatedResources('device1'); targetId: room.id,
expect(related).toHaveLength(2); type: RelationType.CONTAINS
expect(related.some(r => r.id === 'area1')).toBe(true); };
expect(addHandler).toHaveBeenCalledWith(testRelationship); contextManager.addRelationship(relationship);
const related = contextManager.getRelatedResources(relationship.sourceId);
expect(related.length).toBeGreaterThan(0);
expect(related[0]).toEqual(room);
}); });
it('should remove relationships', () => { it('should remove relationships', () => {
const removeHandler = jest.fn(); const sourceId = 'light.living_room';
contextManager.on('relationship_removed', removeHandler); const targetId = 'room.living_room';
contextManager.removeRelationship(sourceId, targetId, RelationType.CONTAINS);
contextManager.addRelationship(testRelationship); const related = contextManager.getRelatedResources(sourceId);
contextManager.removeRelationship(
'device1',
'area1',
RelationType.CONTAINS
);
const related = contextManager.getRelatedResources('device1');
expect(related).toHaveLength(0); expect(related).toHaveLength(0);
expect(removeHandler).toHaveBeenCalled();
}); });
it('should get related resources with depth', () => { it('should get related resources with depth', () => {
// Create a chain: device1 -> area1 -> area2 const light: ResourceState = {
contextManager.addResource({ id: 'light.living_room',
id: 'area2', type: ResourceType.DEVICE,
state: 'on',
attributes: {
name: 'Living Room Light'
},
lastUpdated: Date.now()
};
const room: ResourceState = {
id: 'room.living_room',
type: ResourceType.AREA, type: ResourceType.AREA,
state: 'active', state: 'active',
attributes: {}, attributes: {
name: 'Living Room'
},
lastUpdated: Date.now() lastUpdated: Date.now()
}); };
contextManager.addResource(light);
contextManager.addResource(room);
contextManager.addRelationship({ contextManager.addRelationship({
sourceId: 'device1', sourceId: light.id,
targetId: 'area1', targetId: room.id,
type: RelationType.CONTAINS type: RelationType.CONTAINS
}); });
contextManager.addRelationship({ const relatedResources = contextManager.getRelatedResources(light.id, undefined, 1);
sourceId: 'area1', expect(relatedResources).toContainEqual(room);
targetId: 'area2',
type: RelationType.CONTAINS
});
const relatedDepth1 = contextManager.getRelatedResources('device1', undefined, 1);
expect(relatedDepth1).toHaveLength(3);
const relatedDepth2 = contextManager.getRelatedResources('device1', undefined, 2);
expect(relatedDepth2).toHaveLength(3);
}); });
}); });
describe('Resource Analysis', () => { describe('Resource Analysis', () => {
beforeEach(() => { const contextManager = new ContextManager();
// Setup test resources and relationships
const resources = [
{
id: 'device1',
type: ResourceType.DEVICE,
state: 'on',
attributes: {},
lastUpdated: Date.now()
},
{
id: 'automation1',
type: ResourceType.AUTOMATION,
state: 'on',
attributes: {},
lastUpdated: Date.now()
},
{
id: 'group1',
type: ResourceType.GROUP,
state: 'on',
attributes: {},
lastUpdated: Date.now()
}
];
resources.forEach(r => contextManager.addResource(r));
const relationships = [
{
sourceId: 'automation1',
targetId: 'device1',
type: RelationType.CONTROLS
},
{
sourceId: 'device1',
targetId: 'group1',
type: RelationType.DEPENDS_ON
},
{
sourceId: 'group1',
targetId: 'device1',
type: RelationType.GROUPS
}
];
relationships.forEach(r => contextManager.addRelationship(r));
});
it('should analyze resource usage', () => { it('should analyze resource usage', () => {
const analysis = contextManager.analyzeResourceUsage('device1'); const light: ResourceState = {
id: 'light.living_room',
expect(analysis.dependencies).toHaveLength(1); type: ResourceType.DEVICE,
expect(analysis.dependencies[0]).toBe('group1'); state: 'on',
expect(analysis.dependents).toHaveLength(0); attributes: {
expect(analysis.groups).toHaveLength(1); name: 'Living Room Light',
expect(analysis.usage.controlCount).toBe(0); brightness: 255,
expect(analysis.usage.triggerCount).toBe(0); color_temp: 400
expect(analysis.usage.groupCount).toBe(1); },
lastUpdated: Date.now()
};
contextManager.addResource(light);
const analysis = contextManager.analyzeResourceUsage(light.id);
expect(analysis).toBeDefined();
expect(analysis.dependencies).toBeDefined();
expect(analysis.usage).toBeDefined();
}); });
}); });
describe('Event Subscriptions', () => { describe('Event Subscriptions', () => {
const contextManager = new ContextManager();
it('should handle resource subscriptions', () => { it('should handle resource subscriptions', () => {
const callback = jest.fn(); const callback = jest.fn();
const unsubscribe = contextManager.subscribeToResource('test1', callback); const resourceId = 'light.living_room';
const resource: ResourceState = {
contextManager.addResource({ id: resourceId,
id: 'test1',
type: ResourceType.DEVICE, type: ResourceType.DEVICE,
state: 'on', state: 'on',
attributes: {}, attributes: {
name: 'Living Room Light'
},
lastUpdated: Date.now() lastUpdated: Date.now()
}); };
contextManager.addResource(resource);
contextManager.updateResource('test1', { state: 'off' }); contextManager.subscribeToResource(resourceId, callback);
contextManager.updateResource(resourceId, { state: 'off' });
expect(callback).toHaveBeenCalled(); expect(callback).toHaveBeenCalled();
unsubscribe();
contextManager.updateResource('test1', { state: 'on' });
expect(callback).toHaveBeenCalledTimes(1);
}); });
it('should handle type subscriptions', () => { it('should handle type subscriptions', () => {
const callback = jest.fn(); const callback = jest.fn();
const unsubscribe = contextManager.subscribeToType(ResourceType.DEVICE, callback); const type = ResourceType.DEVICE;
const resource = { const unsubscribe = contextManager.subscribeToType(type, callback);
id: 'test1',
const resource: ResourceState = {
id: 'light.kitchen',
type: ResourceType.DEVICE, type: ResourceType.DEVICE,
state: 'on', state: 'on',
attributes: {}, attributes: {
name: 'Kitchen Light'
},
lastUpdated: Date.now() lastUpdated: Date.now()
}; };
contextManager.addResource(resource); contextManager.addResource(resource);
contextManager.updateResource('test1', { state: 'off' });
contextManager.updateResource(resource.id, { state: 'off' });
expect(callback).toHaveBeenCalled(); expect(callback).toHaveBeenCalled();
unsubscribe(); unsubscribe();
contextManager.updateResource('test1', { state: 'on' });
expect(callback).toHaveBeenCalledTimes(1);
}); });
}); });
}); });

View File

@@ -23,30 +23,30 @@
<div class='clearfix'> <div class='clearfix'>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">22.12% </span> <span class="strong">9.44% </span>
<span class="quiet">Statements</span> <span class="quiet">Statements</span>
<span class='fraction'>260/1175</span> <span class='fraction'>111/1175</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">19.23% </span> <span class="strong">5.65% </span>
<span class="quiet">Branches</span> <span class="quiet">Branches</span>
<span class='fraction'>85/442</span> <span class='fraction'>25/442</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">25.22% </span> <span class="strong">10.61% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>57/226</span> <span class='fraction'>24/226</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">22.2% </span> <span class="strong">9.52% </span>
<span class="quiet">Lines</span> <span class="quiet">Lines</span>
<span class='fraction'>254/1144</span> <span class='fraction'>109/1144</span>
</div> </div>
@@ -110,17 +110,17 @@
<tr> <tr>
<td class="file low" data-value="src/ai/nlp"><a href="src/ai/nlp/index.html">src/ai/nlp</a></td> <td class="file low" data-value="src/ai/nlp"><a href="src/ai/nlp/index.html">src/ai/nlp</a></td>
<td data-value="25.37" class="pic low"> <td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 25%"></div><div class="cover-empty" style="width: 75%"></div></div> <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td> </td>
<td data-value="25.37" class="pct low">25.37%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="134" class="abs low">34/134</td> <td data-value="134" class="abs low">0/134</td>
<td data-value="23.8" class="pct low">23.8%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="63" class="abs low">15/63</td> <td data-value="63" class="abs low">0/63</td>
<td data-value="16.66" class="pct low">16.66%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="30" class="abs low">5/30</td> <td data-value="30" class="abs low">0/30</td>
<td data-value="25.95" class="pct low">25.95%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="131" class="abs low">34/131</td> <td data-value="131" class="abs low">0/131</td>
</tr> </tr>
<tr> <tr>
@@ -154,63 +154,63 @@
</tr> </tr>
<tr> <tr>
<td class="file high" data-value="src/config"><a href="src/config/index.html">src/config</a></td> <td class="file low" data-value="src/config"><a href="src/config/index.html">src/config</a></td>
<td data-value="100" class="pic high"> <td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div> <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td> </td>
<td data-value="100" class="pct high">100%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs high">2/2</td> <td data-value="2" class="abs low">0/2</td>
<td data-value="50" class="pct medium">50%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="8" class="abs medium">4/8</td> <td data-value="8" class="abs low">0/8</td>
<td data-value="100" class="pct high">100%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td> <td data-value="0" class="abs high">0/0</td>
<td data-value="100" class="pct high">100%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs high">2/2</td> <td data-value="2" class="abs low">0/2</td>
</tr> </tr>
<tr> <tr>
<td class="file high" data-value="src/context"><a href="src/context/index.html">src/context</a></td> <td class="file high" data-value="src/context"><a href="src/context/index.html">src/context</a></td>
<td data-value="95.55" class="pic high"> <td data-value="86.66" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div> <div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div>
</td> </td>
<td data-value="95.55" class="pct high">95.55%</td> <td data-value="86.66" class="pct high">86.66%</td>
<td data-value="90" class="abs high">86/90</td> <td data-value="90" class="abs high">78/90</td>
<td data-value="85" class="pct high">85%</td> <td data-value="60" class="pct high">60%</td>
<td data-value="40" class="abs high">34/40</td> <td data-value="40" class="abs high">24/40</td>
<td data-value="91.17" class="pct high">91.17%</td> <td data-value="67.64" class="pct high">67.64%</td>
<td data-value="34" class="abs high">31/34</td> <td data-value="34" class="abs high">23/34</td>
<td data-value="95.4" class="pct high">95.4%</td> <td data-value="87.35" class="pct high">87.35%</td>
<td data-value="87" class="abs high">83/87</td> <td data-value="87" class="abs high">76/87</td>
</tr> </tr>
<tr> <tr>
<td class="file low" data-value="src/hass"><a href="src/hass/index.html">src/hass</a></td> <td class="file low" data-value="src/hass"><a href="src/hass/index.html">src/hass</a></td>
<td data-value="23.42" class="pic low"> <td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 23%"></div><div class="cover-empty" style="width: 77%"></div></div> <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td> </td>
<td data-value="23.42" class="pct low">23.42%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="111" class="abs low">26/111</td> <td data-value="111" class="abs low">0/111</td>
<td data-value="19.51" class="pct low">19.51%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="41" class="abs low">8/41</td> <td data-value="41" class="abs low">0/41</td>
<td data-value="13.04" class="pct low">13.04%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="23" class="abs low">3/23</td> <td data-value="23" class="abs low">0/23</td>
<td data-value="23.42" class="pct low">23.42%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="111" class="abs low">26/111</td> <td data-value="111" class="abs low">0/111</td>
</tr> </tr>
<tr> <tr>
<td class="file low" data-value="src/performance"><a href="src/performance/index.html">src/performance</a></td> <td class="file low" data-value="src/performance"><a href="src/performance/index.html">src/performance</a></td>
<td data-value="26.86" class="pic low"> <td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 26%"></div><div class="cover-empty" style="width: 74%"></div></div> <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td> </td>
<td data-value="26.86" class="pct low">26.86%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="67" class="abs low">18/67</td> <td data-value="67" class="abs low">0/67</td>
<td data-value="63.63" class="pct medium">63.63%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="22" class="abs medium">14/22</td> <td data-value="22" class="abs low">0/22</td>
<td data-value="33.33" class="pct low">33.33%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="21" class="abs low">7/21</td> <td data-value="21" class="abs low">0/21</td>
<td data-value="28.33" class="pct low">28.33%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="60" class="abs low">17/60</td> <td data-value="60" class="abs low">0/60</td>
</tr> </tr>
<tr> <tr>
@@ -244,18 +244,18 @@
</tr> </tr>
<tr> <tr>
<td class="file medium" data-value="src/security"><a href="src/security/index.html">src/security</a></td> <td class="file low" data-value="src/security"><a href="src/security/index.html">src/security</a></td>
<td data-value="75.43" class="pic medium"> <td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 75%"></div><div class="cover-empty" style="width: 25%"></div></div> <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td> </td>
<td data-value="75.43" class="pct medium">75.43%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="57" class="abs medium">43/57</td> <td data-value="57" class="abs low">0/57</td>
<td data-value="25" class="pct low">25%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="20" class="abs low">5/20</td> <td data-value="20" class="abs low">0/20</td>
<td data-value="57.14" class="pct medium">57.14%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="7" class="abs medium">4/7</td> <td data-value="7" class="abs low">0/7</td>
<td data-value="75" class="pct medium">75%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="56" class="abs medium">42/56</td> <td data-value="56" class="abs low">0/56</td>
</tr> </tr>
<tr> <tr>
@@ -275,17 +275,17 @@
<tr> <tr>
<td class="file low" data-value="src/tools"><a href="src/tools/index.html">src/tools</a></td> <td class="file low" data-value="src/tools"><a href="src/tools/index.html">src/tools</a></td>
<td data-value="29.5" class="pic low"> <td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 29%"></div><div class="cover-empty" style="width: 71%"></div></div> <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td> </td>
<td data-value="29.5" class="pct low">29.5%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="61" class="abs low">18/61</td> <td data-value="61" class="abs low">0/61</td>
<td data-value="22.22" class="pct low">22.22%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="18" class="abs low">4/18</td> <td data-value="18" class="abs low">0/18</td>
<td data-value="42.85" class="pct low">42.85%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="14" class="abs low">6/14</td> <td data-value="14" class="abs low">0/14</td>
<td data-value="29.31" class="pct low">29.31%</td> <td data-value="0" class="pct low">0%</td>
<td data-value="58" class="abs low">17/58</td> <td data-value="58" class="abs low">0/58</td>
</tr> </tr>
<tr> <tr>
@@ -311,7 +311,7 @@
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-01-30T18:59:31.394Z at 2025-01-30T19:05:31.249Z
</div> </div>
<script src="prettify.js"></script> <script src="prettify.js"></script>
<script> <script>

View File

@@ -749,66 +749,66 @@ FN:97,(anonymous_2)
FN:118,(anonymous_3) FN:118,(anonymous_3)
FN:142,(anonymous_4) FN:142,(anonymous_4)
FNF:5 FNF:5
FNH:5 FNH:0
FNDA:11,(anonymous_0) FNDA:0,(anonymous_0)
FNDA:13,(anonymous_1) FNDA:0,(anonymous_1)
FNDA:9,(anonymous_2) FNDA:0,(anonymous_2)
FNDA:9,(anonymous_3) FNDA:0,(anonymous_3)
FNDA:4,(anonymous_4) FNDA:0,(anonymous_4)
DA:19,11 DA:19,0
DA:63,13 DA:63,0
DA:71,13 DA:71,0
DA:72,52 DA:72,0
DA:73,195 DA:73,0
DA:74,195 DA:74,0
DA:75,9 DA:75,0
DA:76,9 DA:76,0
DA:77,9 DA:77,0
DA:90,13 DA:90,0
DA:91,4 DA:91,0
DA:94,13 DA:94,0
DA:99,9 DA:99,0
DA:100,9 DA:100,0
DA:103,9 DA:103,0
DA:104,1 DA:104,0
DA:108,9 DA:108,0
DA:109,9 DA:109,0
DA:110,27 DA:110,0
DA:111,2 DA:111,0
DA:115,9 DA:115,0
DA:123,9 DA:123,0
DA:126,9 DA:126,0
DA:127,1 DA:127,0
DA:128,3 DA:128,0
DA:129,1 DA:129,0
DA:135,9 DA:135,0
DA:136,1 DA:136,0
DA:139,9 DA:139,0
DA:147,4 DA:147,0
DA:148,1 DA:148,0
DA:158,3 DA:158,0
DA:159,1 DA:159,0
DA:169,2 DA:169,0
LF:34 LF:34
LH:34 LH:0
BRDA:74,0,0,9 BRDA:74,0,0,0
BRDA:76,1,0,9 BRDA:76,1,0,0
BRDA:90,2,0,4 BRDA:90,2,0,0
BRDA:103,3,0,1 BRDA:103,3,0,0
BRDA:110,4,0,2 BRDA:110,4,0,0
BRDA:126,5,0,1 BRDA:126,5,0,0
BRDA:128,6,0,1 BRDA:128,6,0,0
BRDA:135,7,0,1 BRDA:135,7,0,0
BRDA:135,8,0,9 BRDA:135,8,0,0
BRDA:135,8,1,1 BRDA:135,8,1,0
BRDA:147,9,0,1 BRDA:147,9,0,0
BRDA:158,10,0,1 BRDA:158,10,0,0
BRDA:161,11,0,1 BRDA:161,11,0,0
BRDA:161,11,1,0 BRDA:161,11,1,0
BRDA:171,12,0,2 BRDA:171,12,0,0
BRDA:171,12,1,1 BRDA:171,12,1,0
BRF:16 BRF:16
BRH:15 BRH:0
end_of_record end_of_record
TN: TN:
SF:src/ai/nlp/processor.ts SF:src/ai/nlp/processor.ts
@@ -927,20 +927,20 @@ TN:
SF:src/config/hass.config.ts SF:src/config/hass.config.ts
FNF:0 FNF:0
FNH:0 FNH:0
DA:4,1 DA:4,0
DA:6,1 DA:6,0
LF:2 LF:2
LH:2 LH:0
BRDA:7,0,0,1 BRDA:7,0,0,0
BRDA:7,0,1,0 BRDA:7,0,1,0
BRDA:8,1,0,1 BRDA:8,1,0,0
BRDA:8,1,1,0 BRDA:8,1,1,0
BRDA:9,2,0,1 BRDA:9,2,0,0
BRDA:9,2,1,0 BRDA:9,2,1,0
BRDA:10,3,0,1 BRDA:10,3,0,0
BRDA:10,3,1,0 BRDA:10,3,1,0
BRF:8 BRF:8
BRH:4 BRH:0
end_of_record end_of_record
TN: TN:
SF:src/context/index.ts SF:src/context/index.ts
@@ -979,38 +979,38 @@ FN:210,(anonymous_31)
FN:214,(anonymous_32) FN:214,(anonymous_32)
FN:221,(anonymous_33) FN:221,(anonymous_33)
FNF:34 FNF:34
FNH:31 FNH:23
FNDA:1,(anonymous_0) FNDA:1,(anonymous_0)
FNDA:1,(anonymous_1) FNDA:1,(anonymous_1)
FNDA:11,(anonymous_2) FNDA:5,(anonymous_2)
FNDA:18,(anonymous_3) FNDA:10,(anonymous_3)
FNDA:5,(anonymous_4) FNDA:3,(anonymous_4)
FNDA:1,(anonymous_5) FNDA:1,(anonymous_5)
FNDA:0,(anonymous_6) FNDA:0,(anonymous_6)
FNDA:7,(anonymous_7) FNDA:2,(anonymous_7)
FNDA:1,(anonymous_8) FNDA:1,(anonymous_8)
FNDA:1,(anonymous_9) FNDA:1,(anonymous_9)
FNDA:5,(anonymous_10) FNDA:3,(anonymous_10)
FNDA:0,(anonymous_11) FNDA:0,(anonymous_11)
FNDA:3,(anonymous_12) FNDA:3,(anonymous_12)
FNDA:1,(anonymous_13) FNDA:1,(anonymous_13)
FNDA:3,(anonymous_14) FNDA:2,(anonymous_14)
FNDA:4,(anonymous_15) FNDA:3,(anonymous_15)
FNDA:13,(anonymous_16) FNDA:7,(anonymous_16)
FNDA:12,(anonymous_17) FNDA:4,(anonymous_17)
FNDA:9,(anonymous_18) FNDA:4,(anonymous_18)
FNDA:1,(anonymous_19) FNDA:1,(anonymous_19)
FNDA:3,(anonymous_20) FNDA:0,(anonymous_20)
FNDA:1,(anonymous_21) FNDA:0,(anonymous_21)
FNDA:3,(anonymous_22) FNDA:0,(anonymous_22)
FNDA:0,(anonymous_23) FNDA:0,(anonymous_23)
FNDA:3,(anonymous_24) FNDA:0,(anonymous_24)
FNDA:1,(anonymous_25) FNDA:0,(anonymous_25)
FNDA:3,(anonymous_26) FNDA:0,(anonymous_26)
FNDA:3,(anonymous_27) FNDA:0,(anonymous_27)
FNDA:1,(anonymous_28) FNDA:1,(anonymous_28)
FNDA:1,(anonymous_29) FNDA:2,(anonymous_29)
FNDA:1,(anonymous_30) FNDA:0,(anonymous_30)
FNDA:1,(anonymous_31) FNDA:1,(anonymous_31)
FNDA:1,(anonymous_32) FNDA:1,(anonymous_32)
FNDA:1,(anonymous_33) FNDA:1,(anonymous_33)
@@ -1028,70 +1028,70 @@ DA:27,1
DA:28,1 DA:28,1
DA:29,1 DA:29,1
DA:30,1 DA:30,1
DA:43,11 DA:43,5
DA:44,11 DA:44,5
DA:45,11 DA:45,5
DA:46,11 DA:46,5
DA:49,11 DA:49,5
DA:54,18 DA:54,10
DA:55,18 DA:55,10
DA:59,5 DA:59,3
DA:60,5 DA:60,3
DA:62,5 DA:62,3
DA:65,5 DA:65,3
DA:70,5 DA:70,3
DA:71,5 DA:71,3
DA:76,1 DA:76,1
DA:77,1 DA:77,1
DA:78,1 DA:78,1
DA:80,1 DA:80,1
DA:81,0 DA:81,0
DA:83,1 DA:83,1
DA:89,7 DA:89,2
DA:90,7 DA:90,2
DA:94,1 DA:94,1
DA:95,1 DA:95,1
DA:97,1 DA:97,1
DA:98,1 DA:98,1
DA:99,1 DA:99,1
DA:105,5 DA:105,3
DA:106,5 DA:106,3
DA:107,5 DA:107,3
DA:108,0 DA:108,0
DA:110,5 DA:110,3
DA:114,0 DA:114,0
DA:119,3 DA:119,3
DA:123,1 DA:123,1
DA:124,3 DA:124,2
DA:133,4 DA:133,3
DA:134,4 DA:134,3
DA:136,4 DA:136,3
DA:137,13 DA:137,7
DA:138,8 DA:138,5
DA:140,8 DA:140,5
DA:142,12 DA:142,4
DA:146,9 DA:146,4
DA:147,9 DA:147,4
DA:148,9 DA:148,4
DA:149,9 DA:149,4
DA:150,9 DA:150,4
DA:155,4 DA:155,3
DA:156,4 DA:156,3
DA:170,1 DA:170,1
DA:171,3 DA:171,0
DA:172,1 DA:172,0
DA:174,1 DA:174,1
DA:175,3 DA:175,0
DA:176,0 DA:176,0
DA:178,1 DA:178,1
DA:179,3 DA:179,0
DA:180,1 DA:180,0
DA:182,1 DA:182,1
DA:184,3 DA:184,0
DA:187,3 DA:187,0
DA:192,1 DA:192,1
DA:200,1 DA:200,1
DA:201,1 DA:201,2
DA:202,1 DA:202,1
DA:206,1 DA:206,1
DA:207,1 DA:207,1
@@ -1102,12 +1102,12 @@ DA:220,1
DA:221,1 DA:221,1
DA:226,1 DA:226,1
LF:87 LF:87
LH:83 LH:76
BRDA:4,0,0,1 BRDA:4,0,0,1
BRDA:4,0,1,1 BRDA:4,0,1,1
BRDA:25,1,0,1 BRDA:25,1,0,1
BRDA:25,1,1,1 BRDA:25,1,1,1
BRDA:60,2,0,5 BRDA:60,2,0,3
BRDA:77,3,0,1 BRDA:77,3,0,1
BRDA:81,4,0,0 BRDA:81,4,0,0
BRDA:81,4,1,0 BRDA:81,4,1,0
@@ -1115,36 +1115,36 @@ BRDA:95,5,0,1
BRDA:95,5,1,1 BRDA:95,5,1,1
BRDA:95,5,2,1 BRDA:95,5,2,1
BRDA:97,6,0,1 BRDA:97,6,0,1
BRDA:105,7,0,5 BRDA:105,7,0,3
BRDA:105,7,1,3 BRDA:105,7,1,3
BRDA:107,8,0,0 BRDA:107,8,0,0
BRDA:114,9,0,0 BRDA:114,9,0,0
BRDA:114,9,1,0 BRDA:114,9,1,0
BRDA:131,10,0,2 BRDA:131,10,0,2
BRDA:137,11,0,5 BRDA:137,11,0,2
BRDA:137,12,0,13 BRDA:137,12,0,7
BRDA:137,12,1,9 BRDA:137,12,1,5
BRDA:142,13,0,12 BRDA:142,13,0,4
BRDA:142,13,1,7 BRDA:142,13,1,2
BRDA:142,13,2,9 BRDA:142,13,2,4
BRDA:142,13,3,0 BRDA:142,13,3,0
BRDA:146,14,0,5 BRDA:146,14,0,2
BRDA:146,14,1,4 BRDA:146,14,1,2
BRDA:148,15,0,9 BRDA:148,15,0,4
BRDA:171,16,0,3 BRDA:171,16,0,0
BRDA:171,16,1,1 BRDA:171,16,1,0
BRDA:175,17,0,3 BRDA:175,17,0,0
BRDA:175,17,1,2 BRDA:175,17,1,0
BRDA:179,18,0,3 BRDA:179,18,0,0
BRDA:179,18,1,2 BRDA:179,18,1,0
BRDA:184,19,0,3 BRDA:184,19,0,0
BRDA:184,19,1,1 BRDA:184,19,1,0
BRDA:187,20,0,3 BRDA:187,20,0,0
BRDA:187,20,1,1 BRDA:187,20,1,0
BRDA:201,21,0,1 BRDA:201,21,0,1
BRDA:215,22,0,1 BRDA:215,22,0,1
BRF:40 BRF:40
BRH:34 BRH:24
end_of_record end_of_record
TN: TN:
SF:src/hass/index.ts SF:src/hass/index.ts
@@ -1172,7 +1172,7 @@ FN:400,(anonymous_20)
FN:412,(anonymous_21) FN:412,(anonymous_21)
FN:421,get_hass FN:421,get_hass
FNF:23 FNF:23
FNH:3 FNH:0
FNDA:0,(anonymous_0) FNDA:0,(anonymous_0)
FNDA:0,(anonymous_1) FNDA:0,(anonymous_1)
FNDA:0,(anonymous_2) FNDA:0,(anonymous_2)
@@ -1188,17 +1188,17 @@ FNDA:0,(anonymous_11)
FNDA:0,(anonymous_12) FNDA:0,(anonymous_12)
FNDA:0,(anonymous_13) FNDA:0,(anonymous_13)
FNDA:0,(anonymous_14) FNDA:0,(anonymous_14)
FNDA:1,(anonymous_15) FNDA:0,(anonymous_15)
FNDA:1,(anonymous_16) FNDA:0,(anonymous_16)
FNDA:0,(anonymous_17) FNDA:0,(anonymous_17)
FNDA:0,(anonymous_18) FNDA:0,(anonymous_18)
FNDA:0,(anonymous_19) FNDA:0,(anonymous_19)
FNDA:0,(anonymous_20) FNDA:0,(anonymous_20)
FNDA:0,(anonymous_21) FNDA:0,(anonymous_21)
FNDA:3,get_hass FNDA:0,get_hass
DA:89,1 DA:89,0
DA:101,0 DA:101,0
DA:143,1 DA:143,0
DA:159,0 DA:159,0
DA:160,0 DA:160,0
DA:161,0 DA:161,0
@@ -1262,20 +1262,20 @@ DA:286,0
DA:291,0 DA:291,0
DA:292,0 DA:292,0
DA:293,0 DA:293,0
DA:333,1 DA:333,0
DA:334,1 DA:334,0
DA:335,1 DA:335,0
DA:340,1 DA:340,0
DA:341,1 DA:341,0
DA:342,1 DA:342,0
DA:343,1 DA:343,0
DA:344,1 DA:344,0
DA:345,1 DA:345,0
DA:346,1 DA:346,0
DA:347,1 DA:347,0
DA:348,1 DA:348,0
DA:349,1 DA:349,0
DA:350,1 DA:350,0
DA:354,0 DA:354,0
DA:361,0 DA:361,0
DA:362,0 DA:362,0
@@ -1295,29 +1295,29 @@ DA:406,0
DA:409,0 DA:409,0
DA:413,0 DA:413,0
DA:414,0 DA:414,0
DA:419,1 DA:419,0
DA:422,3 DA:422,0
DA:423,2 DA:423,0
DA:424,2 DA:424,0
DA:427,1 DA:427,0
DA:429,1 DA:429,0
DA:430,0 DA:430,0
DA:431,0 DA:431,0
DA:434,1 DA:434,0
DA:435,1 DA:435,0
DA:436,1 DA:436,0
DA:438,1 DA:438,0
LF:111 LF:111
LH:26 LH:0
BRDA:101,0,0,0 BRDA:101,0,0,0
BRDA:101,0,1,0 BRDA:101,0,1,0
BRDA:145,1,0,1 BRDA:145,1,0,0
BRDA:145,1,1,0 BRDA:145,1,1,0
BRDA:146,2,0,1 BRDA:146,2,0,0
BRDA:146,2,1,0 BRDA:146,2,1,0
BRDA:149,3,0,1 BRDA:149,3,0,0
BRDA:149,3,1,0 BRDA:149,3,1,0
BRDA:150,4,0,1 BRDA:150,4,0,0
BRDA:150,4,1,0 BRDA:150,4,1,0
BRDA:172,5,0,0 BRDA:172,5,0,0
BRDA:184,6,0,0 BRDA:184,6,0,0
@@ -1345,13 +1345,13 @@ BRDA:377,19,0,0
BRDA:395,20,0,0 BRDA:395,20,0,0
BRDA:401,21,0,0 BRDA:401,21,0,0
BRDA:413,22,0,0 BRDA:413,22,0,0
BRDA:421,23,0,3 BRDA:421,23,0,0
BRDA:422,24,0,2 BRDA:422,24,0,0
BRDA:429,25,0,0 BRDA:429,25,0,0
BRDA:429,26,0,1 BRDA:429,26,0,0
BRDA:429,26,1,1 BRDA:429,26,1,0
BRF:41 BRF:41
BRH:8 BRH:0
end_of_record end_of_record
TN: TN:
SF:src/performance/index.ts SF:src/performance/index.ts
@@ -1377,19 +1377,19 @@ FN:203,(anonymous_19)
FN:208,(anonymous_20) FN:208,(anonymous_20)
FN:212,(anonymous_21) FN:212,(anonymous_21)
FNF:21 FNF:21
FNH:7 FNH:0
FNDA:1,(anonymous_1) FNDA:0,(anonymous_1)
FNDA:0,(anonymous_2) FNDA:0,(anonymous_2)
FNDA:4,(anonymous_3) FNDA:0,(anonymous_3)
FNDA:0,(anonymous_4) FNDA:0,(anonymous_4)
FNDA:5,(anonymous_5) FNDA:0,(anonymous_5)
FNDA:0,(anonymous_6) FNDA:0,(anonymous_6)
FNDA:0,(anonymous_7) FNDA:0,(anonymous_7)
FNDA:0,(anonymous_8) FNDA:0,(anonymous_8)
FNDA:2,(anonymous_9) FNDA:0,(anonymous_9)
FNDA:5,(anonymous_10) FNDA:0,(anonymous_10)
FNDA:1,(anonymous_11) FNDA:0,(anonymous_11)
FNDA:3,(anonymous_12) FNDA:0,(anonymous_12)
FNDA:0,(anonymous_13) FNDA:0,(anonymous_13)
FNDA:0,(anonymous_14) FNDA:0,(anonymous_14)
FNDA:0,(anonymous_15) FNDA:0,(anonymous_15)
@@ -1399,15 +1399,15 @@ FNDA:0,(anonymous_18)
FNDA:0,(anonymous_19) FNDA:0,(anonymous_19)
FNDA:0,(anonymous_20) FNDA:0,(anonymous_20)
FNDA:0,(anonymous_21) FNDA:0,(anonymous_21)
DA:20,5 DA:20,0
DA:31,5 DA:31,0
DA:32,5 DA:32,0
DA:37,5 DA:37,0
DA:38,5 DA:38,0
DA:43,1 DA:43,0
DA:44,0 DA:44,0
DA:45,0 DA:45,0
DA:51,4 DA:51,0
DA:52,0 DA:52,0
DA:58,0 DA:58,0
DA:59,0 DA:59,0
@@ -1418,8 +1418,8 @@ DA:75,0
DA:82,0 DA:82,0
DA:88,0 DA:88,0
DA:95,0 DA:95,0
DA:100,5 DA:100,0
DA:101,5 DA:101,0
DA:106,0 DA:106,0
DA:107,0 DA:107,0
DA:112,0 DA:112,0
@@ -1430,12 +1430,12 @@ DA:122,0
DA:123,0 DA:123,0
DA:124,0 DA:124,0
DA:125,0 DA:125,0
DA:139,2 DA:139,0
DA:140,5 DA:140,0
DA:152,1 DA:152,0
DA:153,1 DA:153,0
DA:154,3 DA:154,0
DA:160,1 DA:160,0
DA:164,0 DA:164,0
DA:165,0 DA:165,0
DA:167,0 DA:167,0
@@ -1457,34 +1457,34 @@ DA:209,0
DA:210,0 DA:210,0
DA:211,0 DA:211,0
DA:212,0 DA:212,0
DA:219,1 DA:219,0
DA:222,1 DA:222,0
LF:60 LF:60
LH:17 LH:0
BRDA:27,0,0,1 BRDA:27,0,0,0
BRDA:28,1,0,5 BRDA:28,1,0,0
BRDA:29,2,0,5 BRDA:29,2,0,0
BRDA:33,3,0,5 BRDA:33,3,0,0
BRDA:33,3,1,1 BRDA:33,3,1,0
BRDA:34,4,0,5 BRDA:34,4,0,0
BRDA:34,4,1,1 BRDA:34,4,1,0
BRDA:35,5,0,5 BRDA:35,5,0,0
BRDA:35,5,1,1 BRDA:35,5,1,0
BRDA:51,6,0,0 BRDA:51,6,0,0
BRDA:113,7,0,0 BRDA:113,7,0,0
BRDA:124,8,0,0 BRDA:124,8,0,0
BRDA:136,9,0,1 BRDA:136,9,0,0
BRDA:140,10,0,5 BRDA:140,10,0,0
BRDA:140,10,1,4 BRDA:140,10,1,0
BRDA:140,10,2,4 BRDA:140,10,2,0
BRDA:140,10,3,3 BRDA:140,10,3,0
BRDA:150,11,0,0 BRDA:150,11,0,0
BRDA:153,12,0,0 BRDA:153,12,0,0
BRDA:167,13,0,0 BRDA:167,13,0,0
BRDA:168,14,0,0 BRDA:168,14,0,0
BRDA:209,15,0,0 BRDA:209,15,0,0
BRF:22 BRF:22
BRH:14 BRH:0
end_of_record end_of_record
TN: TN:
SF:src/platforms/macos/integration.ts SF:src/platforms/macos/integration.ts
@@ -1652,55 +1652,55 @@ FN:129,validateRequest
FN:156,sanitizeInput FN:156,sanitizeInput
FN:167,errorHandler FN:167,errorHandler
FNF:7 FNF:7
FNH:4 FNH:0
FNDA:22,(anonymous_0) FNDA:0,(anonymous_0)
FNDA:15,(anonymous_1) FNDA:0,(anonymous_1)
FNDA:7,(anonymous_2) FNDA:0,(anonymous_2)
FNDA:12,(anonymous_3) FNDA:0,(anonymous_3)
FNDA:0,validateRequest FNDA:0,validateRequest
FNDA:0,sanitizeInput FNDA:0,sanitizeInput
FNDA:0,errorHandler FNDA:0,errorHandler
DA:8,3 DA:8,0
DA:9,3 DA:9,0
DA:10,3 DA:10,0
DA:13,3 DA:13,0
DA:20,3 DA:20,0
DA:43,3 DA:43,0
DA:47,3 DA:47,0
DA:48,3 DA:48,0
DA:49,3 DA:49,0
DA:50,3 DA:50,0
DA:51,3 DA:51,0
DA:52,3 DA:52,0
DA:53,3 DA:53,0
DA:56,22 DA:56,0
DA:66,15 DA:66,0
DA:67,15 DA:67,0
DA:68,15 DA:68,0
DA:69,15 DA:69,0
DA:73,15 DA:73,0
DA:77,14 DA:77,0
DA:79,14 DA:79,0
DA:83,7 DA:83,0
DA:84,7 DA:84,0
DA:85,7 DA:85,0
DA:86,7 DA:86,0
DA:90,7 DA:90,0
DA:91,7 DA:91,0
DA:93,7 DA:93,0
DA:96,6 DA:96,0
DA:98,6 DA:98,0
DA:102,12 DA:102,0
DA:104,11 DA:104,0
DA:106,11 DA:106,0
DA:107,4 DA:107,0
DA:111,7 DA:111,0
DA:112,7 DA:112,0
DA:113,6 DA:113,0
DA:116,6 DA:116,0
DA:117,5 DA:117,0
DA:121,1 DA:121,0
DA:123,1 DA:123,0
DA:131,0 DA:131,0
DA:132,0 DA:132,0
DA:138,0 DA:138,0
@@ -1715,14 +1715,14 @@ DA:161,0
DA:163,0 DA:163,0
DA:168,0 DA:168,0
DA:169,0 DA:169,0
DA:176,3 DA:176,0
LF:56 LF:56
LH:42 LH:0
BRDA:102,0,0,1 BRDA:102,0,0,0
BRDA:106,1,0,4 BRDA:106,1,0,0
BRDA:116,2,0,5 BRDA:116,2,0,0
BRDA:116,3,0,6 BRDA:116,3,0,0
BRDA:116,3,1,5 BRDA:116,3,1,0
BRDA:131,4,0,0 BRDA:131,4,0,0
BRDA:131,5,0,0 BRDA:131,5,0,0
BRDA:131,5,1,0 BRDA:131,5,1,0
@@ -1739,7 +1739,7 @@ BRDA:157,11,1,0
BRDA:171,12,0,0 BRDA:171,12,0,0
BRDA:171,12,1,0 BRDA:171,12,1,0
BRF:20 BRF:20
BRH:5 BRH:0
end_of_record end_of_record
TN: TN:
SF:src/sse/index.ts SF:src/sse/index.ts
@@ -1959,34 +1959,34 @@ FN:143,(anonymous_12)
FN:178,(anonymous_13) FN:178,(anonymous_13)
FN:187,(anonymous_14) FN:187,(anonymous_14)
FNF:14 FNF:14
FNH:6 FNH:0
FNDA:1,(anonymous_1) FNDA:0,(anonymous_1)
FNDA:1,(anonymous_2) FNDA:0,(anonymous_2)
FNDA:14,(anonymous_3) FNDA:0,(anonymous_3)
FNDA:42,(anonymous_4) FNDA:0,(anonymous_4)
FNDA:0,(anonymous_5) FNDA:0,(anonymous_5)
FNDA:0,(anonymous_6) FNDA:0,(anonymous_6)
FNDA:0,(anonymous_7) FNDA:0,(anonymous_7)
FNDA:0,(anonymous_8) FNDA:0,(anonymous_8)
FNDA:0,(anonymous_9) FNDA:0,(anonymous_9)
FNDA:0,(anonymous_10) FNDA:0,(anonymous_10)
FNDA:1,registerTool FNDA:0,registerTool
FNDA:1,(anonymous_12) FNDA:0,(anonymous_12)
FNDA:0,(anonymous_13) FNDA:0,(anonymous_13)
FNDA:0,(anonymous_14) FNDA:0,(anonymous_14)
DA:5,1 DA:5,0
DA:6,1 DA:6,0
DA:7,1 DA:7,0
DA:8,1 DA:8,0
DA:12,1 DA:12,0
DA:13,1 DA:13,0
DA:14,1 DA:14,0
DA:15,1 DA:15,0
DA:48,14 DA:48,0
DA:49,14 DA:49,0
DA:50,14 DA:50,0
DA:54,14 DA:54,0
DA:55,42 DA:55,0
DA:61,0 DA:61,0
DA:62,0 DA:62,0
DA:67,0 DA:67,0
@@ -2019,10 +2019,10 @@ DA:129,0
DA:130,0 DA:130,0
DA:131,0 DA:131,0
DA:132,0 DA:132,0
DA:139,1 DA:139,0
DA:143,1 DA:143,0
DA:144,1 DA:144,0
DA:158,1 DA:158,0
DA:159,0 DA:159,0
DA:160,0 DA:160,0
DA:161,0 DA:161,0
@@ -2033,11 +2033,11 @@ DA:181,0
DA:183,0 DA:183,0
DA:189,0 DA:189,0
LF:58 LF:58
LH:17 LH:0
BRDA:5,0,0,1 BRDA:5,0,0,0
BRDA:5,0,1,1 BRDA:5,0,1,0
BRDA:12,1,0,1 BRDA:12,1,0,0
BRDA:12,1,1,1 BRDA:12,1,1,0
BRDA:73,2,0,0 BRDA:73,2,0,0
BRDA:80,3,0,0 BRDA:80,3,0,0
BRDA:85,4,0,0 BRDA:85,4,0,0
@@ -2053,7 +2053,7 @@ BRDA:131,12,0,0
BRDA:131,13,0,0 BRDA:131,13,0,0
BRDA:131,13,1,0 BRDA:131,13,1,0
BRF:18 BRF:18
BRH:4 BRH:0
end_of_record end_of_record
TN: TN:
SF:src/websocket/client.ts SF:src/websocket/client.ts

View File

@@ -26,14 +26,32 @@ module.exports = {
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'], setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
testMatch: [ testMatch: [
'**/__tests__/helpers.test.ts', '**/__tests__/helpers.test.ts',
'**/__tests__/schemas/devices.test.ts' '**/__tests__/schemas/devices.test.ts',
'**/__tests__/context/index.test.ts'
], ],
globals: { globals: {
'ts-jest': { 'ts-jest': {
useESM: true, useESM: true,
}, },
}, },
collectCoverage: false, collectCoverage: true,
coverageDirectory: 'coverage',
coverageReporters: ['text', 'lcov', 'clover', 'html'],
collectCoverageFrom: [
'src/**/*.ts',
'!src/**/*.d.ts',
'!src/**/*.test.ts',
'!src/types/**/*',
'!src/polyfills.ts'
],
coverageThreshold: {
global: {
branches: 50,
functions: 50,
lines: 50,
statements: 50
}
},
verbose: true, verbose: true,
testTimeout: 30000 testTimeout: 30000
}; };