ObjLitGetSet.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. function write(value)
  6. {
  7. WScript.Echo(value);
  8. }
  9. function RunTest(testCase, testCount)
  10. {
  11. var testFunction = testCase[0];
  12. var testScenario = testCase[1];
  13. testScenario = " (test " + testCount + "): " + testScenario;
  14. write(testScenario);
  15. try
  16. {
  17. var result = testFunction();
  18. if (result == true)
  19. {
  20. write("PASS");
  21. }
  22. }
  23. catch (e)
  24. {
  25. var resultString = "FAILED" + testScenario;
  26. write(resultString + " :: " + e.message);
  27. }
  28. }
  29. function RunAllTests(){
  30. for(var i = 0; i < testList.length; ++i){
  31. RunTest(testList[i], i + 1);
  32. }
  33. }
  34. var testList = [
  35. [Test1, "Object literal get set property"],
  36. [Test2, "Object literal only get or set property"],
  37. [Test3, "Object literal multiple set\get property"],
  38. [Test4, "Object literal parse error check"],
  39. [Test5, "Object literal get set function toString"],
  40. ];
  41. // Utility functions
  42. function Verify(expression, actualValue, expectedValue)
  43. {
  44. if (expectedValue != actualValue)
  45. {
  46. write("Failed: Expected " + expression + " = " + expectedValue + ", got " + actualValue);
  47. return false;
  48. }
  49. write("Success: Expected " + expression + " = " + expectedValue + ", got " + actualValue);
  50. return true;
  51. }
  52. //Tests
  53. write("ES 5 Object Literal grammer");
  54. function Test1(args)
  55. {
  56. var s1 = "In getter";
  57. var s2 = "In setter";
  58. var s3 = "Modified by setter";
  59. var o = {get foo(){ return s1;},set foo(arg){return s2 = s3}};
  60. if(!Verify("o.foo getter",o.foo,s1)) return false;
  61. o.foo=10;
  62. if(!Verify("o.foo setter",s2,s3)) return false;
  63. return true;
  64. }
  65. function Test2(args)
  66. {
  67. var s2 = "In setter";
  68. var s3 = "Modified by setter";
  69. var o = {get foo(){ return 20}};
  70. if(!Verify("o.foo getter",o.foo,20)) return false;
  71. var b = {set foo(args){ s2=s3;}};
  72. b.foo = 10;
  73. if(!Verify("b.foo",s2,s3)) return false;
  74. return true;
  75. }
  76. function Test3(args)
  77. {
  78. var o = {get foo(){return this.value;}, set foo(args){this.value = args*2;}, get bar(){return this.value*2;}, set bar(args){ this.value = args*args}};
  79. o.foo = 2;
  80. if(!Verify("o.foo get after set",o.foo,4)) return false;
  81. o.foo = 3;
  82. if(!Verify("o.foo get after set",o.foo,6)) return false;
  83. o.bar = 2;
  84. if(!Verify("o.bar get after set",o.bar,8)) return false;
  85. o.bar = 3;
  86. if(!Verify("o.bar get after set",o.bar,18)) return false;
  87. return true;
  88. }
  89. function Test4()
  90. {
  91. try
  92. {
  93. eval("var a = {get test(args){}};");
  94. return false;
  95. }
  96. catch(ex)
  97. {
  98. if(!Verify("get propery accessor in object literal must not accept any args", true, ex instanceof SyntaxError)) return false;
  99. }
  100. try
  101. {
  102. eval("var a = {set test(args1,args2){}};");
  103. return false;
  104. }
  105. catch(ex)
  106. {
  107. if(!Verify("set propery accessor in object literal must accept only one args", true, ex instanceof SyntaxError)) return false;
  108. }
  109. try
  110. {
  111. eval("var a = {set test bar(args1){}};");
  112. return false;
  113. }
  114. catch(ex)
  115. {
  116. if(!Verify("Throw parse error in multiple property name" , true, ex instanceof SyntaxError)) return false;
  117. }
  118. try
  119. {
  120. eval("var a = {'set' bar(x) {}};");
  121. return false;
  122. }
  123. catch(ex)
  124. {
  125. if(!Verify("invalid syntax if set keyword is a string (then it is just a normal property name)", true, ex instanceof SyntaxError)) return false;
  126. }
  127. try
  128. {
  129. eval("var a = {'get' bar() {}};");
  130. return false;
  131. }
  132. catch(ex)
  133. {
  134. if(!Verify("invalid syntax if get keyword is a string (then it is just a normal property name)", true, ex instanceof SyntaxError)) return false;
  135. }
  136. return true;
  137. }
  138. function Test5()
  139. {
  140. var obj =
  141. {
  142. get foo() { return _foo; },
  143. set foo(value) { _foo = value; }
  144. };
  145. var fooDescriptor = Object.getOwnPropertyDescriptor(obj, "foo");
  146. WScript.Echo("" + fooDescriptor.get);
  147. WScript.Echo("" + fooDescriptor.set);
  148. return true;
  149. }
  150. // Note: test for Object literal duplicate set\get property is in the file ObjLitGetSetDuplicate.js.
  151. RunAllTests();