3c8a4daab341156a95cb439318472f8d19b74a82
[jra/samba/.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: SUBMITTED
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 /* run the tests */
122 arraybug();
123 argsbug("one", "two", "three");
124 recursebug();
125 exprbug();
126 fnbug(callback);
127 objbug();