Skip to content

Commit 8c9cf72

Browse files
committed
scripting: Fix equal between undefined and empty string.
1 parent 9723f6a commit 8c9cf72

File tree

4 files changed

+27
-3
lines changed

4 files changed

+27
-3
lines changed

lib/scripting/vbs-helper.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@ describe('The scripting VBS Helper', () => {
199199
expect(vbsHelper.equals(undefined, new VbsUndefined())).to.equal(true);
200200
expect(vbsHelper.equals(new VbsUndefined(), undefined)).to.equal(true);
201201
expect(vbsHelper.equals(new VbsUndefined(), new VbsUndefined())).to.equal(true);
202+
expect(vbsHelper.equals(new VbsUndefined(), '')).to.equal(true);
203+
expect(vbsHelper.equals('', new VbsUndefined())).to.equal(true);
202204
});
203205

204206
it('should compare not equal using "equals"', () => {

lib/scripting/vbs-helper.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,18 +131,31 @@ export class VBSHelper {
131131
return true;
132132
}
133133

134+
const undef1 = typeof value1 === 'object' && value1.__isUndefined;
135+
const undef2 = typeof value2 === 'object' && value2.__isUndefined;
136+
134137
// VbsUndefined == undefined
135-
if (typeof value1 === 'object' && value1.__isUndefined && typeof value2 === 'undefined') {
138+
if (undef1 && typeof value2 === 'undefined') {
136139
return true;
137140
}
138141

139142
// undefined == VbsUndefined
140-
if (typeof value2 === 'object' && value2.__isUndefined && typeof value1 === 'undefined') {
143+
if (typeof value1 === 'undefined' && undef2) {
141144
return true;
142145
}
143146

144147
// VbsUndefined == VbsUndefined
145-
if (typeof value1 === 'object' && value1.__isUndefined && typeof value2 === 'object' && value2.__isUndefined) {
148+
if (undef1 && undef2) {
149+
return true;
150+
}
151+
152+
// '' == VbsUndefined
153+
if (undef1 && value2 === '') {
154+
return true;
155+
}
156+
157+
// VbsUndefined == ''
158+
if (value1 === '' && undef2) {
146159
return true;
147160
}
148161

lib/scripting/vbs-undefined.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,10 @@ describe('The VBScript undefined handler', () => {
3131
expect(() => undef == 1).not.to.throw();
3232
});
3333

34+
it('should return "undefined" as string', () => {
35+
const undef = new VbsUndefined() as unknown;
36+
// tslint:disable-next-line:triple-equals
37+
expect('' + undef).to.equal('undefined');
38+
});
39+
3440
});

lib/scripting/vbs-undefined.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ export class VbsUndefined implements ProxyHandler<any> {
3333
}
3434

3535
public get(target: any, p: string | number | symbol, receiver: any): any {
36+
if (p === 'toString') {
37+
return () => undefined;
38+
}
3639
if (typeof p === 'symbol' || ['valueOf', 'toString', 'inspect', '__errGet', '__errSet'].includes(p as string)) {
3740
return Reflect.get(target, p);
3841
}

0 commit comments

Comments
 (0)