Skip to content

Commit 8ce8bcc

Browse files
committed
more tests
1 parent aad2392 commit 8ce8bcc

File tree

6 files changed

+664
-10
lines changed

6 files changed

+664
-10
lines changed

src/utils/Literal.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export function isLiteral(literal: unknown): literal is MBLiteral {
6969
* @param literal
7070
*/
7171
export function parseUnknownToLiteralArray(literal: unknown): MBLiteral[] | undefined {
72-
if (literal === undefined || literal === null) {
72+
if (literal === undefined) {
7373
return undefined;
7474
}
7575

@@ -109,7 +109,7 @@ export function parseUnknownToFloat(literal: unknown): number | undefined {
109109
*/
110110
export function parseUnknownToInt(literal: unknown): number | undefined {
111111
if (typeof literal === 'number') {
112-
return literal;
112+
return Number.isInteger(literal) ? literal : undefined;
113113
} else if (typeof literal === 'string') {
114114
const v = intParser.tryParse(literal);
115115
if (v.success) {
@@ -126,7 +126,7 @@ export function parseUnknownToInt(literal: unknown): number | undefined {
126126
* @param literal
127127
*/
128128
export function parseUnknownToString(literal: unknown): string | undefined {
129-
return isLiteral(literal) ? literal?.toString() : undefined;
129+
return isLiteral(literal) ? stringifyLiteral(literal) : undefined;
130130
}
131131

132132
/**
@@ -146,14 +146,26 @@ export function parseUnknownToLiteral(literal: unknown): MBLiteral | undefined {
146146
*/
147147
export function stringifyUnknown(literal: unknown, nullAsEmpty: boolean): string {
148148
if (Array.isArray(literal)) {
149-
return literal.map(x => recStringifyUnknown(x, nullAsEmpty)).join(', ');
149+
return literal
150+
.map(x => recStringifyUnknown(x, nullAsEmpty))
151+
.filter(x => x !== '')
152+
.join(', ');
150153
}
151154
return recStringifyUnknown(literal, nullAsEmpty);
152155
}
153156

154157
function recStringifyUnknown(literal: unknown, nullAsEmpty: boolean): string {
155-
if (typeof literal === 'object') {
158+
if (literal === null || literal === undefined) {
159+
return nullAsEmpty ? '' : 'null';
160+
}
161+
if (typeof literal === 'function') {
162+
return '<function>';
163+
}
164+
165+
if (typeof literal === 'object' || Array.isArray(literal)) {
156166
return JSON.stringify(literal);
157167
}
158-
return literal?.toString() ?? (nullAsEmpty ? '' : 'null');
168+
169+
// eslint-disable-next-line @typescript-eslint/no-base-to-string
170+
return literal.toString();
159171
}

src/utils/Utils.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,23 @@ export function traverseObjectToParentByPath(
9898
pathParts: string[],
9999
o: unknown,
100100
): { parent: KeyValuePair<string[], unknown>; child: KeyValuePair<string, unknown> } {
101-
if (pathParts[0] === '') {
101+
if (pathParts.length === 0) {
102102
throw new Error('can not traverse to parent on self reference');
103103
}
104104

105105
const parentPath = pathParts.slice(0, -1);
106-
const childKey: string = pathParts.at(-1) ?? '';
106+
const childKey: string = pathParts.at(-1)!;
107107
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
108108
const parentObject = traverseObjectByPath(parentPath, o);
109109

110+
if (parentObject == null) {
111+
throw new Error('can not traverse to parent, parent does not exist');
112+
}
113+
114+
if (!(typeof parentObject === 'object')) {
115+
throw new Error('can not traverse to parent, parent is not an object');
116+
}
117+
110118
return {
111119
parent: { key: parentPath, value: parentObject },
112120
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access

tests/metadataManagerTests/MetadataManager.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ function subscribe(
1414
): { subscription: MetadataSubscription; signal: Signal<unknown>; spy: Mock<ListenerCallback<unknown>> } {
1515
const signal = new Signal<unknown>(undefined);
1616
const spy = spyOn(signal, 'set');
17-
const subscription = manager.subscribe(getUUID(), signal, bindTarget);
17+
const subscription = manager.subscribe(getUUID(), signal, bindTarget, () => {});
1818
return {
1919
subscription: subscription,
2020
signal: signal,

0 commit comments

Comments
 (0)