test_UrlbarUtils_copySnakeKeysToCamel.js (5251B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 // Tests `UrlbarUtils.copySnakeKeysToCamel()`. 5 6 "use strict"; 7 8 add_task(async function noSnakes() { 9 Assert.deepEqual( 10 UrlbarUtils.copySnakeKeysToCamel({ 11 foo: "foo key", 12 bar: "bar key", 13 }), 14 { 15 foo: "foo key", 16 bar: "bar key", 17 } 18 ); 19 }); 20 21 add_task(async function oneSnake() { 22 Assert.deepEqual( 23 UrlbarUtils.copySnakeKeysToCamel({ 24 foo: "foo key", 25 snake_key: "snake key", 26 bar: "bar key", 27 }), 28 { 29 foo: "foo key", 30 snake_key: "snake key", 31 bar: "bar key", 32 snakeKey: "snake key", 33 } 34 ); 35 }); 36 37 add_task(async function manySnakeKeys() { 38 Assert.deepEqual( 39 UrlbarUtils.copySnakeKeysToCamel({ 40 foo: "foo key", 41 snake_one: "snake key 1", 42 bar: "bar key", 43 and_snake_two_also: "snake key 2", 44 snake_key_3: "snake key 3", 45 snake_key_4_too: "snake key 4", 46 }), 47 { 48 foo: "foo key", 49 snake_one: "snake key 1", 50 bar: "bar key", 51 and_snake_two_also: "snake key 2", 52 snake_key_3: "snake key 3", 53 snake_key_4_too: "snake key 4", 54 snakeOne: "snake key 1", 55 andSnakeTwoAlso: "snake key 2", 56 snakeKey3: "snake key 3", 57 snakeKey4Too: "snake key 4", 58 } 59 ); 60 }); 61 62 add_task(async function singleChars() { 63 Assert.deepEqual( 64 UrlbarUtils.copySnakeKeysToCamel({ 65 a: "a key", 66 b_c: "b_c key", 67 d_e_f: "d_e_f key", 68 g_h_i_j: "g_h_i_j key", 69 }), 70 { 71 a: "a key", 72 b_c: "b_c key", 73 d_e_f: "d_e_f key", 74 g_h_i_j: "g_h_i_j key", 75 bC: "b_c key", 76 dEF: "d_e_f key", 77 gHIJ: "g_h_i_j key", 78 } 79 ); 80 }); 81 82 add_task(async function numbers() { 83 Assert.deepEqual( 84 UrlbarUtils.copySnakeKeysToCamel({ 85 snake_1: "snake 1 key", 86 snake_2_too: "snake 2 key", 87 "3_snakes": "snake 3 key", 88 }), 89 { 90 snake_1: "snake 1 key", 91 snake_2_too: "snake 2 key", 92 "3_snakes": "snake 3 key", 93 snake1: "snake 1 key", 94 snake2Too: "snake 2 key", 95 "3Snakes": "snake 3 key", 96 } 97 ); 98 }); 99 100 add_task(async function leadingUnderscores() { 101 Assert.deepEqual( 102 UrlbarUtils.copySnakeKeysToCamel({ 103 _foo: "foo key", 104 __bar: "bar key", 105 _snake_with_leading: "snake key 1", 106 __snake_with_two_leading: "snake key 2", 107 }), 108 { 109 _foo: "foo key", 110 __bar: "bar key", 111 _snake_with_leading: "snake key 1", 112 __snake_with_two_leading: "snake key 2", 113 _snakeWithLeading: "snake key 1", 114 __snakeWithTwoLeading: "snake key 2", 115 } 116 ); 117 }); 118 119 add_task(async function trailingUnderscores() { 120 Assert.deepEqual( 121 UrlbarUtils.copySnakeKeysToCamel({ 122 foo_: "foo key", 123 bar__: "bar key", 124 snake_with_trailing_: "snake key 1", 125 snake_with_two_trailing__: "snake key 2", 126 }), 127 { 128 foo_: "foo key", 129 bar__: "bar key", 130 snake_with_trailing_: "snake key 1", 131 snake_with_two_trailing__: "snake key 2", 132 snakeWithTrailing_: "snake key 1", 133 snakeWithTwoTrailing__: "snake key 2", 134 } 135 ); 136 }); 137 138 add_task(async function leadingAndTrailingUnderscores() { 139 Assert.deepEqual( 140 UrlbarUtils.copySnakeKeysToCamel({ 141 _foo_: "foo key", 142 _extra_long_snake_: "snake key", 143 }), 144 { 145 _foo_: "foo key", 146 _extra_long_snake_: "snake key", 147 _extraLongSnake_: "snake key", 148 } 149 ); 150 }); 151 152 add_task(async function consecutiveUnderscores() { 153 Assert.deepEqual( 154 UrlbarUtils.copySnakeKeysToCamel({ weird__snake: "snake key" }), 155 { 156 weird__snake: "snake key", 157 weird_Snake: "snake key", 158 } 159 ); 160 }); 161 162 add_task(async function nested() { 163 let obj = UrlbarUtils.copySnakeKeysToCamel({ 164 foo: "foo key", 165 nested: { 166 bar: "bar key", 167 baz: { 168 snake_in_baz: "snake_in_baz key", 169 }, 170 snake_in_nested: { 171 snake_in_snake_in_nested: "snake_in_snake_in_nested key", 172 }, 173 }, 174 snake_key: { 175 snake_in_snake_key: "snake_in_snake_key key", 176 }, 177 }); 178 179 Assert.equal(obj.foo, "foo key"); 180 Assert.equal(obj.nested.bar, "bar key"); 181 Assert.deepEqual(obj.nested.baz, { 182 snake_in_baz: "snake_in_baz key", 183 snakeInBaz: "snake_in_baz key", 184 }); 185 Assert.deepEqual(obj.nested.snake_in_nested, { 186 snake_in_snake_in_nested: "snake_in_snake_in_nested key", 187 snakeInSnakeInNested: "snake_in_snake_in_nested key", 188 }); 189 Assert.equal(obj.nested.snake_in_nested, obj.nested.snakeInNested); 190 Assert.deepEqual(obj.snake_key, { 191 snake_in_snake_key: "snake_in_snake_key key", 192 snakeInSnakeKey: "snake_in_snake_key key", 193 }); 194 Assert.equal(obj.snake_key, obj.snakeKey); 195 }); 196 197 add_task(async function noOverwrite_ok() { 198 Assert.deepEqual( 199 UrlbarUtils.copySnakeKeysToCamel( 200 { 201 foo: "foo key", 202 snake_key: "snake key", 203 }, 204 false 205 ), 206 { 207 foo: "foo key", 208 snake_key: "snake key", 209 snakeKey: "snake key", 210 } 211 ); 212 }); 213 214 add_task(async function noOverwrite_throws() { 215 Assert.throws( 216 () => 217 UrlbarUtils.copySnakeKeysToCamel( 218 { 219 snake_key: "snake key", 220 snakeKey: "snake key", 221 }, 222 false 223 ), 224 /Can't copy snake_case key/ 225 ); 226 });