// IP.ipCheck as Java FILIUS runs it: every case in ip-check.cases.txt was run // through Java (ip-check.java.json, tools/java-oracle) and must come out the // same here. import { readFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { describe, expect, it } from 'vitest'; import { javaIpCheck, javaParseInt } from '../src/javaIp.js'; const here = dirname(fileURLToPath(import.meta.url)); const measured = JSON.parse(readFileSync(join(here, 'ip-check.java.json'), 'utf8')) as [string, string | null][]; /** The cases file's escapes: a backslash, `u` and four hex digits for one UTF-16 unit. */ function unescape(line: string): string { return line.replace(/\\u([0-9a-fA-F]{4})/g, (_, hex: string) => String.fromCharCode(Number.parseInt(hex, 16))); } describe('javaIpCheck against Java', () => { it('covers every line of the cases file', () => { const lines = readFileSync(join(here, 'ip-check.cases.txt'), 'ascii').split('\n').slice(0, -1); expect(measured.map(([line]) => line)).toEqual(lines); }); for (const [line, expected] of measured) { it(JSON.stringify(line), () => { expect(javaIpCheck(unescape(line))).toBe(expected); }); } }); describe('javaParseInt', () => { it('keeps to the int range', () => { expect(javaParseInt('2147483647')).toBe(2147483647); expect(javaParseInt('-2147483648')).toBe(-2147483648); expect(javaParseInt('2147483648')).toBeUndefined(); expect(javaParseInt('-2147483649')).toBeUndefined(); }); });