'use strict' const TestRunner = require('test-runner') const commandLineArgs = require('../') const a = require('assert') const runner = new TestRunner() runner.test('groups', function () { const definitions = [ { name: 'one', group: 'a' }, { name: 'two', group: 'a' }, { name: 'three', group: 'b' } ] const argv = [ '--one', '1', '--two', '2', '--three', '3' ] const output = commandLineArgs(definitions, { argv }) a.deepStrictEqual(output, { a: { one: '1', two: '2' }, b: { three: '3' }, _all: { one: '1', two: '2', three: '3' } }) }) runner.test('groups: multiple and _none', function () { const definitions = [ { name: 'one', group: ['a', 'f'] }, { name: 'two', group: ['a', 'g'] }, { name: 'three' } ] a.deepStrictEqual(commandLineArgs(definitions, { argv: [ '--one', '1', '--two', '2', '--three', '3' ] }), { a: { one: '1', two: '2' }, f: { one: '1' }, g: { two: '2' }, _none: { three: '3' }, _all: { one: '1', two: '2', three: '3' } }) }) runner.test('groups: nothing set', function () { const definitions = [ { name: 'one', group: 'a' }, { name: 'two', group: 'a' }, { name: 'three', group: 'b' } ] const argv = [ ] const output = commandLineArgs(definitions, { argv }) a.deepStrictEqual(output, { a: {}, b: {}, _all: {} }) }) runner.test('groups: nothing set with one ungrouped', function () { const definitions = [ { name: 'one', group: 'a' }, { name: 'two', group: 'a' }, { name: 'three' } ] const argv = [ ] const output = commandLineArgs(definitions, { argv }) a.deepStrictEqual(output, { a: {}, _all: {} }) }) runner.test('groups: two ungrouped, one set', function () { const definitions = [ { name: 'one', group: 'a' }, { name: 'two', group: 'a' }, { name: 'three' }, { name: 'four' } ] const argv = [ '--three', '3' ] const output = commandLineArgs(definitions, { argv }) a.deepStrictEqual(output, { a: {}, _all: { three: '3' }, _none: { three: '3' } }) }) runner.test('groups: two ungrouped, both set', function () { const definitions = [ { name: 'one', group: 'a' }, { name: 'two', group: 'a' }, { name: 'three' }, { name: 'four' } ] const argv = [ '--three', '3', '--four', '4' ] const output = commandLineArgs(definitions, { argv }) a.deepStrictEqual(output, { a: {}, _all: { three: '3', four: '4' }, _none: { three: '3', four: '4' } }) }) runner.test('groups: with partial', function () { const definitions = [ { name: 'one', group: 'a' }, { name: 'two', group: 'a' }, { name: 'three', group: 'b' } ] const argv = [ '--one', '1', '--two', '2', '--three', '3', 'ham', '--cheese' ] a.deepStrictEqual(commandLineArgs(definitions, { argv, partial: true }), { a: { one: '1', two: '2' }, b: { three: '3' }, _all: { one: '1', two: '2', three: '3' }, _unknown: [ 'ham', '--cheese' ] }) }) runner.test('partial: with partial, multiple groups and _none', function () { const definitions = [ { name: 'one', group: ['a', 'f'] }, { name: 'two', group: ['a', 'g'] }, { name: 'three' } ] const argv = [ '--cheese', '--one', '1', 'ham', '--two', '2', '--three', '3', '-c' ] a.deepStrictEqual(commandLineArgs(definitions, { argv, partial: true }), { a: { one: '1', two: '2' }, f: { one: '1' }, g: { two: '2' }, _none: { three: '3' }, _all: { one: '1', two: '2', three: '3' }, _unknown: [ '--cheese', 'ham', '-c' ] }) })