Convert logging infrastructure to TypeScript
This commit is contained in:
parent
10ace53845
commit
a8787e7c9e
19 changed files with 595 additions and 331 deletions
88
ts/test-both/util/reallyJsonStringify_test.ts
Normal file
88
ts/test-both/util/reallyJsonStringify_test.ts
Normal file
|
@ -0,0 +1,88 @@
|
|||
// Copyright 2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import { assert } from 'chai';
|
||||
import { reallyJsonStringify } from '../../util/reallyJsonStringify';
|
||||
|
||||
describe('reallyJsonStringify', () => {
|
||||
it('returns the same thing as JSON.stringify when JSON.stringify returns a string', () => {
|
||||
[
|
||||
null,
|
||||
true,
|
||||
false,
|
||||
0,
|
||||
-0,
|
||||
123,
|
||||
-Infinity,
|
||||
Infinity,
|
||||
NaN,
|
||||
'',
|
||||
'foo',
|
||||
[],
|
||||
[1],
|
||||
{},
|
||||
{ hi: 5 },
|
||||
new Date(),
|
||||
new Set([1, 2, 3]),
|
||||
new Map([['foo', 'bar']]),
|
||||
Promise.resolve(123),
|
||||
{
|
||||
toJSON() {
|
||||
return 'foo';
|
||||
},
|
||||
},
|
||||
].forEach(value => {
|
||||
const expected = JSON.stringify(value);
|
||||
const actual = reallyJsonStringify(value);
|
||||
|
||||
assert.strictEqual(actual, expected);
|
||||
assert.isString(actual);
|
||||
});
|
||||
});
|
||||
|
||||
it('returns a string when JSON.stringify returns undefined', () => {
|
||||
const check = (value: unknown, expected: string): void => {
|
||||
const actual = reallyJsonStringify(value);
|
||||
assert.strictEqual(actual, expected);
|
||||
// This ensures that our test is set up correctly, not the code under test.
|
||||
assert.isUndefined(JSON.stringify(value));
|
||||
};
|
||||
|
||||
check(undefined, '[object Undefined]');
|
||||
check(Symbol('foo'), '[object Symbol]');
|
||||
check(
|
||||
{
|
||||
toJSON() {
|
||||
return undefined;
|
||||
},
|
||||
},
|
||||
'[object Object]'
|
||||
);
|
||||
});
|
||||
|
||||
it('returns a string when JSON.stringify would error', () => {
|
||||
const check = (value: unknown, expected: string): void => {
|
||||
const actual = reallyJsonStringify(value);
|
||||
assert.strictEqual(actual, expected);
|
||||
// This ensures that our test is set up correctly, not the code under test.
|
||||
assert.throws(() => JSON.stringify(value));
|
||||
};
|
||||
|
||||
check(BigInt(123), '[object BigInt]');
|
||||
|
||||
const a: Record<string, unknown> = {};
|
||||
const b = { a };
|
||||
a.b = b;
|
||||
check(a, '[object Object]');
|
||||
|
||||
check([a], '[object Array]');
|
||||
|
||||
const bad = {
|
||||
toJSON() {
|
||||
throw new Error("don't even try to stringify me");
|
||||
},
|
||||
};
|
||||
check(bad, '[object Object]');
|
||||
check([bad], '[object Array]');
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue