|
1 | 1 | import { expect, test } from 'vitest'; |
2 | 2 | import { resolveMaestroTimingPolicy } from '../compatibility-policy.ts'; |
| 3 | +import { resolveNumeric } from '../engine-flow.ts'; |
3 | 4 |
|
4 | 5 | test('uses the Maestro-compatible extended wait default', () => { |
5 | 6 | expect(resolveMaestroTimingPolicy().extendedWaitUntilTimeoutMs).toBe(17_000); |
6 | 7 | }); |
| 8 | + |
| 9 | +test('resolveNumeric coerces valid resolved strings and numbers', () => { |
| 10 | + expect(resolveNumeric('42', 'x', {})).toBe(42); |
| 11 | + expect(resolveNumeric('3.5', 'x', {})).toBe(3.5); |
| 12 | + expect(resolveNumeric(3.5, 'x', {})).toBe(3.5); |
| 13 | + expect(resolveNumeric('0', 'x', { integer: true, nonNegative: true })).toBe(0); |
| 14 | + expect(resolveNumeric('5', 'x', { integer: true, positive: true })).toBe(5); |
| 15 | + expect(resolveNumeric(5, 'x', { integer: true, positive: true })).toBe(5); |
| 16 | + expect(resolveNumeric(undefined, 'x', {})).toBeUndefined(); |
| 17 | +}); |
| 18 | + |
| 19 | +test('resolveNumeric rejects blank, whitespace, and malformed resolved strings', () => { |
| 20 | + expect(() => resolveNumeric('', 'x', {})).toThrow(/must be a finite number/); |
| 21 | + expect(() => resolveNumeric(' ', 'x', {})).toThrow(/must be a finite number/); |
| 22 | + expect(() => resolveNumeric('', 'x', { integer: true, nonNegative: true })).toThrow( |
| 23 | + /must be a non-negative integer/, |
| 24 | + ); |
| 25 | + expect(() => resolveNumeric(' ', 'x', { integer: true, nonNegative: true })).toThrow( |
| 26 | + /must be a non-negative integer/, |
| 27 | + ); |
| 28 | + expect(() => resolveNumeric('abc', 'x', {})).toThrow(/must be a finite number/); |
| 29 | + expect(() => resolveNumeric('1.2.3', 'x', {})).toThrow(/must be a finite number/); |
| 30 | + expect(() => resolveNumeric('1.5', 'x', { integer: true })).toThrow(/must be an integer/); |
| 31 | +}); |
0 commit comments