import { test } from 'node:test' import assert from 'node:assert/strict' import { parseScalar, parseYamlConfig } from './yaml-config.mjs' test('parseScalar strips one layer of matching quotes', () => { assert.equal(parseScalar(' "hello world" '), 'hello world') assert.equal(parseScalar("'a: b: c'"), 'a: b: c') }) test('parseScalar drops a trailing inline comment after a quoted value', () => { assert.equal(parseScalar("'' # default empty"), '') assert.equal(parseScalar("'mysql.dev' # remote test host"), 'mysql.dev') }) test('parseScalar cuts an unquoted value at a space-hash comment', () => { assert.equal(parseScalar('8080 # default port'), '8080') assert.equal(parseScalar('com.acme.erp'), 'com.acme.erp') }) test('parseScalar treats empty / comment-only values as empty', () => { assert.equal(parseScalar(''), '') assert.equal(parseScalar(' '), '') assert.equal(parseScalar('# just a comment'), '') }) test('parseScalar does NOT expand variables and keeps special chars literally', () => { assert.equal(parseScalar('${A}'), '${A}') assert.equal(parseScalar('$(whoami)'), '$(whoami)') assert.equal(parseScalar("'p@ss$w0rd!'"), 'p@ss$w0rd!') // a `#` not preceded by a space stays part of an unquoted value assert.equal(parseScalar('a#b'), 'a#b') }) test('parseYamlConfig builds a two-level nested object', () => { const cfg = parseYamlConfig( [ 'backend:', ' base_package: com.acme.erp', ' http_port: 8080', 'database:', ' host: 127.0.0.1', ' schema: erp_dev', '', ].join('\n') ) assert.deepEqual(cfg.backend, { base_package: 'com.acme.erp', http_port: '8080' }) assert.deepEqual(cfg.database, { host: '127.0.0.1', schema: 'erp_dev' }) }) test('parseYamlConfig skips blank lines, full-line and indented comments', () => { const cfg = parseYamlConfig( ['# top comment', 'database:', ' # inline section comment', ' host: localhost', '', ' '].join('\n') ) assert.deepEqual(cfg.database, { host: 'localhost' }) }) test('parseYamlConfig keeps a quoted empty value and ignores its trailing comment', () => { const cfg = parseYamlConfig(['database:', " password: '' # default empty"].join('\n')) assert.equal(cfg.database.password, '') }) test('parseYamlConfig only splits on the first colon (values may contain colons)', () => { const cfg = parseYamlConfig(['secrets:', ' jwt_secret: a:b:c'].join('\n')) assert.equal(cfg.secrets.jwt_secret, 'a:b:c') }) test('parseYamlConfig tolerates CRLF and returns {} for non-string input', () => { const cfg = parseYamlConfig('backend:\r\n http_port: 9090\r\n') assert.equal(cfg.backend.http_port, '9090') assert.deepEqual(parseYamlConfig(undefined), {}) assert.deepEqual(parseYamlConfig(null), {}) }) test('parseYamlConfig supports a top-level scalar (no section)', () => { const cfg = parseYamlConfig('project_name: Acme ERP\n') assert.equal(cfg.project_name, 'Acme ERP') })