r20999: - update the list of attributes for classSchema and atttributeSchema objects
[ira/wip.git] / testprogs / ejs / bugs.js
1 /*
2         demonstrate some bugs in ejs
3
4         tridge <appweb@tridgell.net>
5 */
6
7
8 /****************************************
9 demo a bug in constructing arrays
10 fix at http://build.samba.org/build.pl?function=diff;tree=samba4;revision=7124
11 status: FIXED
12 *****************************************/
13 function arraybug() {
14          var a;
15
16          println("First with 3 elements");
17          a = new Array("one", "two", "three");
18          printVars(a);
19          assert(a.length == 3);
20          assert(a[0] == "one");
21          assert(a[1] == "two");
22          assert(a[2] == "three");
23
24          println("with a array length");
25          a = new Array(5);
26          printVars(a);
27          assert(a.length == 5);
28
29          println("\nNow with 1 element");
30          a = new Array("one");
31          printVars(a);
32          assert(a.length == 1);
33          assert(a[0] == "one");
34
35          println("ALL OK");
36 }
37
38
39 /****************************************
40 demo a bug in variable arguments
41 fix at http://build.samba.org/build.pl?function=diff;tree=samba4;revision=7085
42 status: FIXED
43 *****************************************/
44 function argsbug() {
45          println("we should have been called with 3 arguments");
46          assert(arguments.length == 3);
47          assert(arguments[0] == "one");
48          assert(arguments[1] == "two");
49          assert(arguments[2] == "three");
50 }
51
52
53 /****************************************
54 demo a bug in constructing objects
55 no fix available yet
56 status: SUBMITTED
57 *****************************************/
58 function MyObj() {
59          var o = new Object();
60          o.test = 42;
61          return o;
62 }
63
64 function objbug() {
65          println("the docs say you should use 'new'");
66          var o1 = new MyObj();
67          var o2 = MyObj();
68          printVars(o1);
69          printVars(o2);
70          assert(o1.test == 42);
71          assert(o2.test == 42);
72 }
73
74 /*
75  demo a expression handling bug
76  status: FIXED
77 */
78 function exprbug() {
79         var a = new Array(10);
80         var i;
81         for (i=0;i<4;i++) {
82                 a[1+(i*2)] = i;
83                 a[2+(i*2)] = i*2;
84         }
85 }
86
87 /****************************************
88 demo lack of recursion
89 fix in http://build.samba.org/build.pl?function=diff;tree=samba4;revision=7127
90 status: FIXED
91 *****************************************/
92 function fibonacci(n) {
93         if (n < 3) {
94                 return 1;
95         }
96         return fibonacci(n-1) + fibonacci(n-2);
97 }
98
99 function recursebug() {
100          println("First 10 fibonacci numbers:");
101          for (i=0;i<10;i++) {
102                  println("fibonacci(" + i + ")=" + fibonacci(i));
103          }
104 }
105
106 /****************************************
107 demo lack of function variables inside functions
108 status: FIXED IN SAMBA
109 *****************************************/
110 function callback()
111 {
112         return "testing";
113 }
114
115 function fnbug(c)
116 {
117         s = c();
118         assert(s == "testing");
119 }
120
121 /****************************************
122 demo incorrect handling of reserved words in strings
123 status: SUBMITTED
124 *****************************************/
125 function reservedbug()
126 {
127         assert("funct" + "ion" == 'function');
128 }
129
130
131 /****************************************
132 demo incorrect handling of boolean functions
133 status: SUBMITTED
134 *****************************************/
135 function no()
136 {
137         return false;
138 }
139
140 function boolbug()
141 {
142         assert(false == no());
143         assert(!no());
144 }
145
146
147 /* run the tests */
148 arraybug();
149 argsbug("one", "two", "three");
150 recursebug();
151 exprbug();
152 fnbug(callback);
153 reservedbug();
154 boolbug();
155 objbug();