You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
502 lines
17 KiB
TypeScript
502 lines
17 KiB
TypeScript
import { update, fixTokenListNewLines, beautify } from './manipulation';
|
|
import { parseMultiLine, stringifyTokens } from './parser';
|
|
import { ModifyMode, Config } from './types';
|
|
|
|
describe('Updating tokens', () => {
|
|
it('Creates empty file', () => {
|
|
expect(stringifyTokens(update([], [], { beautify: true }))).toEqual('\n');
|
|
expect(stringifyTokens(update([], [], { enforceNewLineEnd: false }))).toEqual('');
|
|
});
|
|
it('appends at update with APPEND mode', () => {
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[],
|
|
[
|
|
['ALAMA', 'kota'],
|
|
['KOTMA', 'alę'],
|
|
],
|
|
{ modifyMode: ModifyMode.APPEND },
|
|
),
|
|
),
|
|
).toEqual('ALAMA=kota\nKOTMA=alę\n');
|
|
|
|
expect(stringifyTokens(update([], [{ name: 'ALAMA', value: 'kota', comment: ' # ma' }, ['KOTMA', 'alę']]))).toEqual('ALAMA=kota # ma\nKOTMA=alę\n');
|
|
expect(
|
|
stringifyTokens(
|
|
update([vtoken('HOST', '127.0.0.1'), nltoken(), vtoken('PORT', '80'), nltoken(), vtoken('LOGIN', 'root')], [['PASSWORD', 'secret']], {
|
|
modifyMode: ModifyMode.APPEND,
|
|
}),
|
|
),
|
|
).toEqual('HOST=127.0.0.1\nPORT=80\nLOGIN=root\nPASSWORD=secret\n');
|
|
});
|
|
|
|
it('appends does not append with EXISTING_ONLY mode', () => {
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[],
|
|
[
|
|
['ALAMA', 'kota'],
|
|
['KOTMA', 'alę'],
|
|
],
|
|
{ modifyMode: ModifyMode.NO_APPEND },
|
|
),
|
|
),
|
|
).toEqual('\n');
|
|
});
|
|
|
|
it('update existing value', () => {
|
|
expect(stringifyTokens(update([vtoken('ALA', 'ma kota')], [['ALA', 'ma psa']], { modifyMode: ModifyMode.APPEND }))).toEqual('ALA="ma psa"\n');
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[vtoken('ALA', 'ma kota')],
|
|
[
|
|
['ALA', 'ma psa'],
|
|
['ALA', 'ma jednak kota'],
|
|
],
|
|
{ modifyMode: ModifyMode.APPEND },
|
|
),
|
|
),
|
|
).toEqual('ALA="ma jednak kota"\n');
|
|
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[vtoken('HOST', '127.0.0.1'), nltoken(), vtoken('PORT', '80'), nltoken(), vtoken('LOGIN', 'root')],
|
|
[['LOGIN', 'debian'], { name: 'PORT', value: '8080', comment: ' # debug only' }],
|
|
{ modifyMode: ModifyMode.APPEND },
|
|
),
|
|
),
|
|
).toEqual('HOST=127.0.0.1\nPORT=8080 # debug only\nLOGIN=debian\n');
|
|
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Server'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n'),
|
|
vtoken('SERVER_HOST', '127.0.0.1'),
|
|
nltoken(),
|
|
vtoken('SERVER_PORT', '80'),
|
|
nltoken(),
|
|
vtoken('SERVER_LOGIN', 'root'),
|
|
nltoken('\n\n'),
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Client'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n'),
|
|
vtoken('CLIENT_LOGIN', 'john'),
|
|
],
|
|
[['SERVER_LOGIN', 'debian'], { name: 'SERVER_PORT', value: '8080', comment: ' # debug only' }, ['SERVER_PASSWORD', 'secret']],
|
|
{ modifyMode: ModifyMode.APPEND },
|
|
),
|
|
),
|
|
).toEqual(
|
|
'###########\n# Server\n###########\n\nSERVER_HOST=127.0.0.1\nSERVER_PORT=8080 # debug only\nSERVER_LOGIN=debian\n\n###########\n# Client\n###########\n\nCLIENT_LOGIN=john\nSERVER_PASSWORD=secret\n',
|
|
);
|
|
});
|
|
|
|
it('do not update in append only mode', () => {
|
|
expect(stringifyTokens(update([vtoken('ALA', 'ma kota')], [['ALA', 'ma psa']], { modifyMode: ModifyMode.APPEND, noUpdate: true }))).toEqual('ALA="ma kota"\n');
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[vtoken('ALA', 'ma kota')],
|
|
[
|
|
['ALA', 'ma psa'],
|
|
['ALA', 'ma jednak kota'],
|
|
],
|
|
{ modifyMode: ModifyMode.APPEND, noUpdate: true },
|
|
),
|
|
),
|
|
).toEqual('ALA="ma kota"\n');
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[vtoken('ALA', 'ma kota')],
|
|
[
|
|
['ALA', 'ma psa'],
|
|
['ALA', 'ma jednak kota'],
|
|
],
|
|
),
|
|
),
|
|
).toEqual('ALA="ma jednak kota"\n');
|
|
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[vtoken('HOST', '127.0.0.1'), nltoken(), vtoken('PORT', '80'), nltoken(), vtoken('LOGIN', 'root')],
|
|
[['LOGIN', 'debian'], { name: 'PORT', value: '8080', comment: ' # debug only' }],
|
|
{ modifyMode: ModifyMode.APPEND, noUpdate: true },
|
|
),
|
|
),
|
|
).toEqual('HOST=127.0.0.1\nPORT=80\nLOGIN=root\n');
|
|
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Server'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n'),
|
|
vtoken('SERVER_HOST', '127.0.0.1'),
|
|
nltoken(),
|
|
vtoken('SERVER_PORT', '80'),
|
|
nltoken(),
|
|
vtoken('SERVER_LOGIN', 'root'),
|
|
nltoken('\n\n'),
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Client'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n'),
|
|
vtoken('CLIENT_LOGIN', 'john'),
|
|
],
|
|
[['SERVER_LOGIN', 'debian'], { name: 'SERVER_PORT', value: '8080', comment: ' # debug only' }, ['SERVER_PASSWORD', 'secret']],
|
|
{ modifyMode: ModifyMode.APPEND, noUpdate: true },
|
|
),
|
|
),
|
|
).toEqual(
|
|
'###########\n# Server\n###########\n\nSERVER_HOST=127.0.0.1\nSERVER_PORT=80\nSERVER_LOGIN=root\n\n###########\n# Client\n###########\n\nCLIENT_LOGIN=john\nSERVER_PASSWORD=secret\n',
|
|
);
|
|
});
|
|
|
|
it('delete value', () => {
|
|
expect(
|
|
stringifyTokens(
|
|
update([vtoken('HOST', '127.0.0.1'), nltoken(), vtoken('PORT', '80'), nltoken(), vtoken('LOGIN', 'root')], [['PORT', null]], {
|
|
modifyMode: ModifyMode.APPEND,
|
|
}),
|
|
),
|
|
).toEqual('HOST=127.0.0.1\nLOGIN=root\n');
|
|
expect(
|
|
stringifyTokens(
|
|
update([vtoken('HOST', '127.0.0.1'), nltoken(), vtoken('PORT', '80'), nltoken('\n\n\n'), vtoken('LOGIN', 'root')], [['PORT', null]], {
|
|
modifyMode: ModifyMode.APPEND,
|
|
}),
|
|
),
|
|
).toEqual('HOST=127.0.0.1\n\n\nLOGIN=root\n');
|
|
});
|
|
|
|
it('appends empty', () => {
|
|
expect(stringifyTokens(update([], [{ name: 'test', value: undefined }], { modifyMode: ModifyMode.APPEND }))).toEqual('test=\n');
|
|
expect(stringifyTokens(update([], [{ name: 'test', value: '' }], { modifyMode: ModifyMode.APPEND }))).toEqual('test=\n');
|
|
});
|
|
|
|
it('appends smart', () => {
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[
|
|
vtoken('SERVER_HOST', '127.0.0.1'),
|
|
vtoken('SERVER_PORT', '80'),
|
|
vtoken('SERVER_LOGIN', 'root'),
|
|
ctoken('#-------------------------'),
|
|
vtoken('CLIENT_LOGIN', 'john'),
|
|
vtoken('CLIENT_X_AXIS', '12'),
|
|
ctoken('#-------------------------'),
|
|
vtoken('AUTO_RUN', 'true'),
|
|
vtoken('AUTO_CLEAN', 'false'),
|
|
],
|
|
[
|
|
['CLIENT_ACCESS', 'limited'],
|
|
['SERVER_OUTPUT', '/dev/null'],
|
|
['CLIENT_Z_AXIS', '100'],
|
|
['ZOOM', '100%'],
|
|
['AUTO_STOP', 'true'],
|
|
['QUALITY', '90%'],
|
|
['AUTO_APPEND', 'true'],
|
|
['AUTO_ZERO', '000'],
|
|
],
|
|
{ modifyMode: ModifyMode.SMART_APPEND },
|
|
),
|
|
),
|
|
).toEqual(
|
|
'SERVER_HOST=127.0.0.1\nSERVER_OUTPUT=/dev/null\nSERVER_PORT=80\nSERVER_LOGIN=root\n' +
|
|
'#-------------------------\n' +
|
|
'CLIENT_ACCESS=limited\nCLIENT_LOGIN=john\nCLIENT_X_AXIS=12\nCLIENT_Z_AXIS=100\n' +
|
|
'#-------------------------\n' +
|
|
'AUTO_APPEND=true\nAUTO_RUN=true\nAUTO_CLEAN=false\nAUTO_STOP=true\nAUTO_ZERO=000\n' +
|
|
'QUALITY=90%\nZOOM=100%\n',
|
|
);
|
|
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[],
|
|
[
|
|
['SERVER_HOST', '127.0.0.1'],
|
|
['SERVER_PORT', '80'],
|
|
['SERVER_LOGIN', 'root'],
|
|
['CLIENT_LOGIN', 'john'],
|
|
['CLIENT_X_AXIS', '12'],
|
|
['AUTO_RUN', 'true'],
|
|
['AUTO_CLEAN', 'false'],
|
|
['CLIENT_ACCESS', 'limited'],
|
|
['SERVER_OUTPUT', '/dev/null'],
|
|
['CLIENT_Z_AXIS', '100'],
|
|
['ZOOM', '100%'],
|
|
['AUTO_STOP', 'true'],
|
|
['QUALITY', '90%'],
|
|
['AUTO_APPEND', 'true'],
|
|
['AUTO_ZERO', '000'],
|
|
],
|
|
{ modifyMode: ModifyMode.SMART_APPEND },
|
|
),
|
|
),
|
|
).toEqual(
|
|
'AUTO_APPEND=true\nAUTO_CLEAN=false\nAUTO_RUN=true\nAUTO_STOP=true\nAUTO_ZERO=000\n' +
|
|
'CLIENT_ACCESS=limited\nCLIENT_LOGIN=john\nCLIENT_X_AXIS=12\nCLIENT_Z_AXIS=100\n' +
|
|
'QUALITY=90%\n' +
|
|
'SERVER_HOST=127.0.0.1\nSERVER_LOGIN=root\nSERVER_OUTPUT=/dev/null\nSERVER_PORT=80\n' +
|
|
'ZOOM=100%\n',
|
|
);
|
|
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Server'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n'),
|
|
vtoken('SERVER_HOST', '127.0.0.1'),
|
|
nltoken(),
|
|
vtoken('SERVER_PORT', '80'),
|
|
nltoken(),
|
|
vtoken('SERVER_LOGIN', 'root'),
|
|
nltoken('\n\n'),
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Client'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n'),
|
|
vtoken('CLIENT_LOGIN', 'john'),
|
|
],
|
|
[['SERVER_LOGIN', 'debian'], { name: 'SERVER_PORT', value: '8080', comment: ' # debug only' }, ['SERVER_PASSWORD', 'secret']],
|
|
{ modifyMode: ModifyMode.SMART_APPEND },
|
|
),
|
|
),
|
|
).toEqual(
|
|
'###########\n# Server\n###########\n\nSERVER_HOST=127.0.0.1\nSERVER_PASSWORD=secret\nSERVER_PORT=8080 # debug only\nSERVER_LOGIN=debian\n\n###########\n# Client\n###########\n\nCLIENT_LOGIN=john\n',
|
|
);
|
|
});
|
|
|
|
it('appends smart with no update config', () => {
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[
|
|
vtoken('SERVER_HOST', '127.0.0.1'),
|
|
vtoken('SERVER_PORT', '80'),
|
|
vtoken('SERVER_LOGIN', 'root'),
|
|
ctoken('#-------------------------'),
|
|
vtoken('CLIENT_LOGIN', 'john'),
|
|
vtoken('CLIENT_X_AXIS', '12'),
|
|
ctoken('#-------------------------'),
|
|
vtoken('AUTO_RUN', 'true'),
|
|
vtoken('AUTO_CLEAN', 'false'),
|
|
],
|
|
[
|
|
['CLIENT_ACCESS', 'limited'],
|
|
['SERVER_OUTPUT', '/dev/null'],
|
|
['CLIENT_Z_AXIS', '100'],
|
|
['ZOOM', '100%'],
|
|
['AUTO_STOP', 'true'],
|
|
['QUALITY', '90%'],
|
|
['AUTO_APPEND', 'true'],
|
|
['AUTO_ZERO', '000'],
|
|
],
|
|
{ modifyMode: ModifyMode.SMART_APPEND, noUpdate: true },
|
|
),
|
|
),
|
|
).toEqual(
|
|
'SERVER_HOST=127.0.0.1\nSERVER_OUTPUT=/dev/null\nSERVER_PORT=80\nSERVER_LOGIN=root\n' +
|
|
'#-------------------------\n' +
|
|
'CLIENT_ACCESS=limited\nCLIENT_LOGIN=john\nCLIENT_X_AXIS=12\nCLIENT_Z_AXIS=100\n' +
|
|
'#-------------------------\n' +
|
|
'AUTO_APPEND=true\nAUTO_RUN=true\nAUTO_CLEAN=false\nAUTO_STOP=true\nAUTO_ZERO=000\n' +
|
|
'QUALITY=90%\nZOOM=100%\n',
|
|
);
|
|
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[],
|
|
[
|
|
['SERVER_HOST', '127.0.0.1'],
|
|
['SERVER_PORT', '80'],
|
|
['SERVER_LOGIN', 'root'],
|
|
['CLIENT_LOGIN', 'john'],
|
|
['CLIENT_X_AXIS', '12'],
|
|
['AUTO_RUN', 'true'],
|
|
['AUTO_CLEAN', 'false'],
|
|
['CLIENT_ACCESS', 'limited'],
|
|
['SERVER_OUTPUT', '/dev/null'],
|
|
['CLIENT_Z_AXIS', '100'],
|
|
['ZOOM', '100%'],
|
|
['AUTO_STOP', 'true'],
|
|
['QUALITY', '90%'],
|
|
['AUTO_APPEND', 'true'],
|
|
['AUTO_ZERO', '000'],
|
|
],
|
|
{ modifyMode: ModifyMode.SMART_APPEND, noUpdate: true },
|
|
),
|
|
),
|
|
).toEqual(
|
|
'AUTO_APPEND=true\nAUTO_CLEAN=false\nAUTO_RUN=true\nAUTO_STOP=true\nAUTO_ZERO=000\n' +
|
|
'CLIENT_ACCESS=limited\nCLIENT_LOGIN=john\nCLIENT_X_AXIS=12\nCLIENT_Z_AXIS=100\n' +
|
|
'QUALITY=90%\n' +
|
|
'SERVER_HOST=127.0.0.1\nSERVER_LOGIN=root\nSERVER_OUTPUT=/dev/null\nSERVER_PORT=80\n' +
|
|
'ZOOM=100%\n',
|
|
);
|
|
|
|
expect(
|
|
stringifyTokens(
|
|
update(
|
|
[
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Server'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n'),
|
|
vtoken('SERVER_HOST', '127.0.0.1'),
|
|
nltoken(),
|
|
vtoken('SERVER_PORT', '80'),
|
|
nltoken(),
|
|
vtoken('SERVER_LOGIN', 'root'),
|
|
nltoken('\n\n'),
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Client'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n'),
|
|
vtoken('CLIENT_LOGIN', 'john'),
|
|
],
|
|
[['SERVER_LOGIN', 'debian'], { name: 'SERVER_PORT', value: '8080', comment: ' # debug only' }, ['SERVER_PASSWORD', 'secret']],
|
|
{ modifyMode: ModifyMode.SMART_APPEND, noUpdate: true },
|
|
),
|
|
),
|
|
).toEqual(
|
|
'###########\n# Server\n###########\n\nSERVER_HOST=127.0.0.1\nSERVER_PASSWORD=secret\nSERVER_PORT=80\nSERVER_LOGIN=root\n\n###########\n# Client\n###########\n\nCLIENT_LOGIN=john\n',
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('Fixing token list', () => {
|
|
it('merges and interleave tokens with new lines', () => {
|
|
expect(
|
|
fixTokenListNewLines([
|
|
ctoken('###########'),
|
|
ctoken('# Server'),
|
|
ctoken('###########'),
|
|
nltoken('\n'),
|
|
nltoken('\n'),
|
|
vtoken('SERVER_HOST', '127.0.0.1'),
|
|
vtoken('SERVER_PORT', '80'),
|
|
vtoken('SERVER_LOGIN', 'root'),
|
|
nltoken('\n\n'),
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Client'),
|
|
ctoken('###########'),
|
|
nltoken('\n'),
|
|
nltoken('\n'),
|
|
nltoken('\n'),
|
|
nltoken('\n'),
|
|
wstoken('\t'),
|
|
wstoken(' '),
|
|
wstoken('\t'),
|
|
vtoken('CLIENT_LOGIN', 'john'),
|
|
]),
|
|
).toEqual([
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Server'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n'),
|
|
vtoken('SERVER_HOST', '127.0.0.1'),
|
|
nltoken(),
|
|
vtoken('SERVER_PORT', '80'),
|
|
nltoken(),
|
|
vtoken('SERVER_LOGIN', 'root'),
|
|
nltoken('\n\n'),
|
|
ctoken('###########'),
|
|
nltoken(),
|
|
ctoken('# Client'),
|
|
nltoken(),
|
|
ctoken('###########'),
|
|
nltoken('\n\n\n\n'),
|
|
wstoken('\t \t'),
|
|
vtoken('CLIENT_LOGIN', 'john'),
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe('Beautifying output', () => {
|
|
it('appends single new line', () => {
|
|
expect(beautify([], { beautify: true })).toEqual([nltoken()]);
|
|
});
|
|
|
|
it('beautify output', () => {
|
|
const cfg: Config = { beautify: true };
|
|
expect(
|
|
stringifyTokens(
|
|
beautify(
|
|
parseMultiLine(
|
|
'\n\n\r\n #-------------------------\n' +
|
|
'# Server \n' +
|
|
' #-------------------------\n\n\n\n' +
|
|
'SERVER_HOST=127.0.0.1\nSERVER_OUTPUT= /dev/null # simply ignore it \nSERVER_PORT=80\nSERVER_LOGIN=root\n' +
|
|
'#-------------------------\n' +
|
|
'# Client\n' +
|
|
'#-------------------------\n\r' +
|
|
'CLIENT_ACCESS=limited \nCLIENT_LOGIN =john\nCLIENT_X_AXIS=12\nCLIENT_Z_AXIS=100\n' +
|
|
'#-------------------------\n\r' +
|
|
'AUTO_APPEND=true\n AUTO_RUN = true\nAUTO_CLEAN=false\nAUTO_STOP=true\n AUTO_ZERO = 000 \n' +
|
|
'#-------------------------\n' +
|
|
'# Other\n' +
|
|
'#-------------------------\n' +
|
|
'QUALITY=90%\n\n\r\n\nZOOM=100%\n\n\n',
|
|
),
|
|
cfg,
|
|
),
|
|
cfg,
|
|
),
|
|
).toEqual(
|
|
'#-------------------------\n' +
|
|
'# Server\n' +
|
|
'#-------------------------\n\n' +
|
|
'SERVER_HOST=127.0.0.1\nSERVER_OUTPUT=/dev/null # simply ignore it\nSERVER_PORT=80\nSERVER_LOGIN=root\n\n' +
|
|
'#-------------------------\n' +
|
|
'# Client\n' +
|
|
'#-------------------------\n\n' +
|
|
'CLIENT_ACCESS=limited\nCLIENT_LOGIN=john\nCLIENT_X_AXIS=12\nCLIENT_Z_AXIS=100\n\n' +
|
|
'#-------------------------\n\n' +
|
|
'AUTO_APPEND=true\nAUTO_RUN=true\nAUTO_CLEAN=false\nAUTO_STOP=true\nAUTO_ZERO=000\n\n' +
|
|
'#-------------------------\n' +
|
|
'# Other\n' +
|
|
'#-------------------------\n\n' +
|
|
'QUALITY=90%\n\nZOOM=100%\n',
|
|
);
|
|
});
|
|
});
|