Skip to content

Commit 9723f6a

Browse files
committed
scripting: Update equal().
1 parent 27b0ae2 commit 9723f6a

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

lib/scripting/vbs-helper.spec.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,10 @@ describe('The scripting VBS Helper', () => {
195195
});
196196

197197
it('should compare equals using "equals"', () => {
198-
const value = vbsHelper.equals(5, 5);
199-
expect(value).to.equal(true);
198+
expect(vbsHelper.equals(5, 5)).to.equal(true);
199+
expect(vbsHelper.equals(undefined, new VbsUndefined())).to.equal(true);
200+
expect(vbsHelper.equals(new VbsUndefined(), undefined)).to.equal(true);
201+
expect(vbsHelper.equals(new VbsUndefined(), new VbsUndefined())).to.equal(true);
200202
});
201203

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

lib/scripting/vbs-helper.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,27 @@ export class VBSHelper {
126126
*/
127127

128128
public equals(value1: any, value2: any): boolean {
129-
return (value1 === value2);
129+
// tslint:disable-next-line:triple-equals
130+
if (value1 == value2) {
131+
return true;
132+
}
133+
134+
// VbsUndefined == undefined
135+
if (typeof value1 === 'object' && value1.__isUndefined && typeof value2 === 'undefined') {
136+
return true;
137+
}
138+
139+
// undefined == VbsUndefined
140+
if (typeof value2 === 'object' && value2.__isUndefined && typeof value1 === 'undefined') {
141+
return true;
142+
}
143+
144+
// VbsUndefined == VbsUndefined
145+
if (typeof value1 === 'object' && value1.__isUndefined && typeof value2 === 'object' && value2.__isUndefined) {
146+
return true;
147+
}
148+
149+
return false;
130150
}
131151

132152
/**

lib/scripting/vbs-undefined.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ export class VbsUndefined implements ProxyHandler<any> {
3636
if (typeof p === 'symbol' || ['valueOf', 'toString', 'inspect', '__errGet', '__errSet'].includes(p as string)) {
3737
return Reflect.get(target, p);
3838
}
39+
if (p === '__isUndefined') {
40+
return true;
41+
}
3942
ERR.Raise(this.__errGet || new VbsError(`ReferenceError: Cannot get property "${String(p)}" of undefined array element.`, 9));
4043
return this;
4144
}

0 commit comments

Comments
 (0)