| //------------------------------------------------------------------------------------------------------- | |
| // Copyright (C) Microsoft. All rights reserved. | |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. | |
| //------------------------------------------------------------------------------------------------------- | |
| Object.defineProperty(RegExp, "fakeProp", { | |
| value: 101, | |
| writable: true, | |
| enumerable: true, | |
| configurable: true | |
| }); | |
| var propertyConstructorArray = ["fakeProp","$_","$*","$&","$+","$`","$'","input", | |
| "lastMatch","lastParen","leftContext","rightContext", | |
| "index","length","prototype","constructor" | |
| ]; | |
| var propertyInstanceArray = ["global","ignoreCase","lastIndex","multiline","source","sticky"]; | |
| function RegexTests(i,propertyArray) | |
| { | |
| WScript.Echo("starting Property[",i,"]: ",propertyArray[i]); | |
| //Does the property exist | |
| var doesPropExist = RegExp.hasOwnProperty(propertyArray[i]); | |
| WScript.Echo("Does Property exist: ",doesPropExist); | |
| if(!doesPropExist) return; | |
| //Is the property configurable | |
| var isPropConfig = Object.getOwnPropertyDescriptor(RegExp, propertyArray[i]).configurable; | |
| WScript.Echo("Is the Property configurable: ",isPropConfig); | |
| var canRedefine = false; | |
| var canDelete = false; | |
| if(isPropConfig) | |
| { | |
| canRedefine = true; | |
| canDelete = true; | |
| } | |
| var propValueBefore = RegExp[propertyArray[i]]; | |
| try | |
| { | |
| Object.defineProperty(RegExp, propertyArray[i], { get : function () { return 'OVERRIDE' } }); | |
| } | |
| catch(err) | |
| { | |
| if(isPropConfig) WScript.Echo("Fail"); | |
| else WScript.Echo("PASS, Not Configurable and will not allow redefinition"); | |
| } | |
| var deleteProp = false; | |
| if(isPropConfig) | |
| { | |
| if(RegExp[propertyArray[i]] =="OVERRIDE") WScript.Echo("PASS"); | |
| else WScript.Echo("FAIL, currently equals: ",RegExp[propertyArray[i]]); | |
| } | |
| else | |
| { | |
| if(RegExp[propertyArray[i]] ==propValueBefore) WScript.Echo("PASS"); | |
| else WScript.Echo("FAIL, currently equals: ",RegExp[propertyArray[i]]); | |
| } | |
| deleteProp = delete RegExp[propertyArray[i]]; | |
| WScript.Echo("can you delete the property: ",canDelete, "did it actually delete?",deleteProp); | |
| if(deleteProp ==canDelete) WScript.Echo("Pass Delete Test"); | |
| else WScript.Echo("Fail Delete Test"); | |
| } | |
| function RegexInstanceTests(i,propertyArray) | |
| { | |
| var pattern1=new RegExp("e"); | |
| WScript.Echo("starting Property[",i,"]: ",propertyArray[i]); | |
| //Does the property exist | |
| var doesPropExist = pattern1.hasOwnProperty(propertyArray[i]); | |
| WScript.Echo("Does Property exist: ",doesPropExist); | |
| if(!doesPropExist) return; | |
| var isPropConfig = Object.getOwnPropertyDescriptor(pattern1, propertyArray[i]).configurable; | |
| WScript.Echo("Is the Property configurable: ",isPropConfig); | |
| var canRedefine = false; | |
| var canDelete = false; | |
| if(isPropConfig) | |
| { | |
| canRedefine = true; | |
| canDelete = true; | |
| } | |
| var propValueBefore = pattern1[propertyArray[i]]; | |
| try | |
| { | |
| Object.defineProperty(pattern1, propertyArray[i], { get : function () { return 'OVERRIDE' } }); | |
| } | |
| catch(err) | |
| { | |
| if(isPropConfig) WScript.Echo("Fail"); | |
| else WScript.Echo("PASS, Not Configurable and will not allow redefinition"); | |
| } | |
| var deleteProp = false; | |
| if(isPropConfig) | |
| { | |
| if(pattern1[propertyArray[i]] =="OVERRIDE") WScript.Echo("PASS"); | |
| else WScript.Echo("FAIL, currently equals: ",pattern1[propertyArray[i]]); | |
| } | |
| else | |
| { | |
| if(pattern1[propertyArray[i]] ==propValueBefore) WScript.Echo("PASS"); | |
| else WScript.Echo("FAIL, currently equals: ",pattern1[propertyArray[i]]); | |
| } | |
| deleteProp = delete pattern1[propertyArray[i]]; | |
| WScript.Echo("can you delete the property: ",canDelete, "did it actually delete?",deleteProp); | |
| if(deleteProp ==canDelete) WScript.Echo("Pass Delete Test"); | |
| else WScript.Echo("Fail Delete Test"); | |
| } | |
| for(var i = 0; i < propertyConstructorArray.length;i++) | |
| { | |
| RegexTests(i,propertyConstructorArray); | |
| WScript.Echo("\n"); | |
| } | |
| for(var i = 0; i < propertyInstanceArray.length;i++) | |
| { | |
| RegexTests(i,propertyInstanceArray); | |
| WScript.Echo("\n"); | |
| } | |
| for(var i = 0; i < propertyInstanceArray.length;i++) | |
| { | |
| RegexInstanceTests(i,propertyInstanceArray); | |
| WScript.Echo("\n"); | |
| } | |