1+ import { describe , it , expect , beforeEach , vi } from 'vitest' ;
2+ import { IRacingSDK } from './irsdk-node' ;
3+ import { getSdkOrMock } from './get-sdk' ;
4+ import type { INativeSDK } from '../native' ;
5+
6+ // Mock the getSdkOrMock module
7+ vi . mock ( './get-sdk' , ( ) => ( {
8+ getSdkOrMock : vi . fn ( ) . mockResolvedValue ( {
9+ startSDK : vi . fn ( ) ,
10+ getSessionData : vi . fn ( ) ,
11+ currDataVersion : 0 ,
12+ enableLogging : false ,
13+ stopSDK : vi . fn ( ) ,
14+ isRunning : vi . fn ( ) . mockReturnValue ( true ) ,
15+ waitForData : vi . fn ( ) . mockReturnValue ( true ) ,
16+ getTelemetryData : vi . fn ( ) . mockReturnValue ( { } ) ,
17+ getTelemetryVariable : vi . fn ( ) ,
18+ broadcast : vi . fn ( ) ,
19+ } as INativeSDK ) ,
20+ } ) ) ;
21+
22+ describe ( 'irsdk-node' , ( ) => {
23+ let sdk : IRacingSDK ;
24+ let mockSdk : INativeSDK ;
25+
26+ beforeEach ( async ( ) => {
27+ sdk = new IRacingSDK ( ) ;
28+ // Wait for SDK to be ready
29+ await sdk . ready ( ) ;
30+ // Get the mock SDK instance
31+ mockSdk = await getSdkOrMock ( ) ;
32+ } ) ;
33+
34+ it ( 'should handle malformed YAML with trailing commas' , ( ) => {
35+ const malformedYaml = `
36+ WeekendInfo:
37+ TrackName: test track
38+ TrackID: 123
39+ DriverInfo:
40+ Drivers:
41+ - CarIdx: 1
42+ UserName: test
43+ AbbrevName: test, # Trailing comma
44+ Initials: T
45+ UserID: 12345
46+ ` ;
47+
48+ vi . mocked ( mockSdk . getSessionData ) . mockReturnValue ( malformedYaml ) ;
49+
50+ const result = sdk . getSessionData ( ) ;
51+
52+ expect ( result ) . toBeDefined ( ) ;
53+ expect ( result ?. WeekendInfo ) . toBeDefined ( ) ;
54+ expect ( result ?. WeekendInfo ?. TrackName ) . toBe ( 'test track' ) ;
55+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. UserName ) . toBe ( 'test' ) ;
56+ } ) ;
57+
58+ it ( 'should handle empty or null values' , ( ) => {
59+ const malformedYaml = `
60+ WeekendInfo:
61+ TrackName: test track
62+ TrackID: 123
63+ DriverInfo:
64+ Drivers:
65+ - CarIdx: 1
66+ UserName: # Empty value
67+ AbbrevName: # Empty value
68+ Initials: # Empty value
69+ UserID: 12345
70+ ` ;
71+
72+ vi . mocked ( mockSdk . getSessionData ) . mockReturnValue ( malformedYaml ) ;
73+
74+ const result = sdk . getSessionData ( ) ;
75+
76+ expect ( result ) . toBeDefined ( ) ;
77+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. UserName ) . toBe ( null ) ;
78+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. AbbrevName ) . toBe ( null ) ;
79+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. Initials ) . toBe ( null ) ;
80+ } ) ;
81+
82+ it ( 'should handle empty value with trailing comma' , ( ) => {
83+ const malformedYaml = `
84+ WeekendInfo:
85+ TrackName: navarra speedlong
86+ TrackID: 515
87+ DriverInfo:
88+ Drivers:
89+ - CarIdx: 11
90+ UserName:
91+ AbbrevName: ,
92+ Initials:
93+ UserID: 1195427
94+ ` ;
95+
96+ vi . mocked ( mockSdk . getSessionData ) . mockReturnValue ( malformedYaml ) ;
97+
98+ const result = sdk . getSessionData ( ) ;
99+
100+ expect ( result ) . toBeDefined ( ) ;
101+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. UserName ) . toBe ( null ) ;
102+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. AbbrevName ) . toBe ( null ) ;
103+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. Initials ) . toBe ( null ) ;
104+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. UserID ) . toBe ( 1195427 ) ;
105+ } ) ;
106+
107+ it ( 'should handle quotes in names' , ( ) => {
108+ const malformedYaml = `
109+ WeekendInfo:
110+ TrackName: navarra speedlong
111+ TrackID: 515
112+ DriverInfo:
113+ Drivers:
114+ - CarIdx: 11
115+ TeamName: Mike's Team
116+ UserName: Coolio O'Brien
117+ ` ;
118+
119+ vi . mocked ( mockSdk . getSessionData ) . mockReturnValue ( malformedYaml ) ;
120+
121+ const result = sdk . getSessionData ( ) ;
122+
123+ expect ( result ) . toBeDefined ( ) ;
124+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. TeamName ) . toBe ( "Mike's Team" ) ;
125+ expect ( result ?. DriverInfo ?. Drivers [ 0 ] ?. UserName ) . toBe ( "Coolio O'Brien" ) ;
126+ } ) ;
127+ } ) ;
0 commit comments