• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/ucode/tests/custom/00_syntax/30_call_error_callee

  1 The expression invoked by a failing call is recovered from the source and
  2 named in the error message, regardless of how it is formatted.
  3 
  4 
  5 1. Whitespace and line breaks within the invoked expression are dropped, while
  6    whitespace within subscripts is kept.
  7 
  8 -- Testcase --
  9 {%
 10         let o = { a: { "x y": [ { f: 1 } ] } };
 11 
 12         try {
 13                 o
 14                         .a
 15                         [ "x y" ] [0]
 16                         .f ( 1,
 17                                 2 );
 18         }
 19         catch (e) {
 20                 print(e.message, "\n");
 21         }
 22 
 23         try {
 24                 o . a [ "x y" ][0] . f();
 25         }
 26         catch (e) {
 27                 print(e.message, "\n");
 28         }
 29 %}
 30 -- End --
 31 
 32 -- Expect stdout --
 33 `o.a[ "x y" ][0].f` is not a function, got 1 instead
 34 `o.a[ "x y" ][0].f` is not a function, got 1 instead
 35 -- End --
 36 
 37 
 38 2. An invoked expression longer than 64 characters shows its tail.
 39 
 40 -- Testcase --
 41 {%
 42         let o = { aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: { b: 1 } };
 43 
 44         try {
 45                 o.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.b();
 46         }
 47         catch (e) {
 48                 print(e.message, "\n");
 49         }
 50 %}
 51 -- End --
 52 
 53 -- Expect stdout --
 54 `...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.b` is not a function, got 1 instead
 55 -- End --
 56 
 57 
 58 3. Arguments of any width up to a few kilobytes do not prevent the expression
 59    from being recovered, while wider ones do.
 60 
 61 -- Testcase --
 62 {%
 63         function args(n) {
 64                 let rv = [];
 65 
 66                 for (let i = 0; i < n; i++)
 67                         push(rv, '"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"');
 68 
 69                 return join(",\n\t", rv);
 70         }
 71 
 72         for (let n in [ 2, 20, 60, 120 ]) {
 73                 try {
 74                         loadstring(`{% let o = { f: { g: 1 } };\no.f.g(${args(n)}); %}`)();
 75                 }
 76                 catch (e) {
 77                         print(n, ": ", e.message, "\n");
 78                 }
 79         }
 80 %}
 81 -- End --
 82 
 83 -- Expect stdout --
 84 2: `o.f.g` is not a function, got 1 instead
 85 20: `o.f.g` is not a function, got 1 instead
 86 60: `o.f.g` is not a function, got 1 instead
 87 120: left-hand side is not a function, got 1 instead
 88 -- End --

This page was automatically generated by LXR 0.3.1.  •  OpenWrt