|
1 |
|
2 // String.replace on functions returning hashmap elements. |
|
3 |
|
4 function first() { |
|
5 var arr = {a: "hello", b: "there"}; |
|
6 var s = 'a|b'; |
|
7 return s.replace(/[a-z]/g, function(a) { return arr[a]; }, 'g'); |
|
8 } |
|
9 assertEq(first(), "hello|there"); |
|
10 |
|
11 function second() { |
|
12 var arr = {a: "hello", c: "there"}; |
|
13 var s = 'a|b|c'; |
|
14 return s.replace(/[a-z]/g, function(a) { return arr[a]; }, 'g'); |
|
15 } |
|
16 assertEq(second(), "hello|undefined|there"); |
|
17 |
|
18 Object.defineProperty(Object.prototype, "b", {get: function() { return "what"; }}); |
|
19 |
|
20 assertEq(second(), "hello|what|there"); |
|
21 |
|
22 function third() { |
|
23 var arr = {a: "hello", b: {toString: function() { arr = {}; return "three"; }}, c: "there"}; |
|
24 var s = 'a|b|c'; |
|
25 return s.replace(/[a-z]/g, function(a) { return arr[a]; }, 'g'); |
|
26 } |
|
27 assertEq(third(), "hello|three|undefined"); |