mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-08 04:09:03 +02:00
There are two types of config in Rust Suggest: global and per-provider. Right now global contains `show_less_frequently_cap`, and the only provider config is for weather, which contains `min_keyword_length`. This patch uses both of them. It makes sense to me to fetch config as part of the ingest process, so that's what I've done. I'm not sure when else would be a good time. It's async so it's not too convenient to do it on demand. In RS records and attachement JSON, we use snake_case, but Rust converts it to camelCase (actually UniFFI does, I think). That means the JS backend will use snake_case for all config, but the Rust backend will use camelCase. I wrote a helper for converting snake to camel so we can always just use camel. Depends on D200755 Differential Revision: https://phabricator.services.mozilla.com/D201023
226 lines
5.1 KiB
JavaScript
226 lines
5.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
// Tests `UrlbarUtils.copySnakeKeysToCamel()`.
|
|
|
|
"use strict";
|
|
|
|
add_task(async function noSnakes() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel({
|
|
foo: "foo key",
|
|
bar: "bar key",
|
|
}),
|
|
{
|
|
foo: "foo key",
|
|
bar: "bar key",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function oneSnake() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel({
|
|
foo: "foo key",
|
|
snake_key: "snake key",
|
|
bar: "bar key",
|
|
}),
|
|
{
|
|
foo: "foo key",
|
|
snake_key: "snake key",
|
|
bar: "bar key",
|
|
snakeKey: "snake key",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function manySnakeKeys() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel({
|
|
foo: "foo key",
|
|
snake_one: "snake key 1",
|
|
bar: "bar key",
|
|
and_snake_two_also: "snake key 2",
|
|
snake_key_3: "snake key 3",
|
|
snake_key_4_too: "snake key 4",
|
|
}),
|
|
{
|
|
foo: "foo key",
|
|
snake_one: "snake key 1",
|
|
bar: "bar key",
|
|
and_snake_two_also: "snake key 2",
|
|
snake_key_3: "snake key 3",
|
|
snake_key_4_too: "snake key 4",
|
|
snakeOne: "snake key 1",
|
|
andSnakeTwoAlso: "snake key 2",
|
|
snakeKey3: "snake key 3",
|
|
snakeKey4Too: "snake key 4",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function singleChars() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel({
|
|
a: "a key",
|
|
b_c: "b_c key",
|
|
d_e_f: "d_e_f key",
|
|
g_h_i_j: "g_h_i_j key",
|
|
}),
|
|
{
|
|
a: "a key",
|
|
b_c: "b_c key",
|
|
d_e_f: "d_e_f key",
|
|
g_h_i_j: "g_h_i_j key",
|
|
bC: "b_c key",
|
|
dEF: "d_e_f key",
|
|
gHIJ: "g_h_i_j key",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function numbers() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel({
|
|
snake_1: "snake 1 key",
|
|
snake_2_too: "snake 2 key",
|
|
"3_snakes": "snake 3 key",
|
|
}),
|
|
{
|
|
snake_1: "snake 1 key",
|
|
snake_2_too: "snake 2 key",
|
|
"3_snakes": "snake 3 key",
|
|
snake1: "snake 1 key",
|
|
snake2Too: "snake 2 key",
|
|
"3Snakes": "snake 3 key",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function leadingUnderscores() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel({
|
|
_foo: "foo key",
|
|
__bar: "bar key",
|
|
_snake_with_leading: "snake key 1",
|
|
__snake_with_two_leading: "snake key 2",
|
|
}),
|
|
{
|
|
_foo: "foo key",
|
|
__bar: "bar key",
|
|
_snake_with_leading: "snake key 1",
|
|
__snake_with_two_leading: "snake key 2",
|
|
_snakeWithLeading: "snake key 1",
|
|
__snakeWithTwoLeading: "snake key 2",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function trailingUnderscores() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel({
|
|
foo_: "foo key",
|
|
bar__: "bar key",
|
|
snake_with_trailing_: "snake key 1",
|
|
snake_with_two_trailing__: "snake key 2",
|
|
}),
|
|
{
|
|
foo_: "foo key",
|
|
bar__: "bar key",
|
|
snake_with_trailing_: "snake key 1",
|
|
snake_with_two_trailing__: "snake key 2",
|
|
snakeWithTrailing_: "snake key 1",
|
|
snakeWithTwoTrailing__: "snake key 2",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function leadingAndTrailingUnderscores() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel({
|
|
_foo_: "foo key",
|
|
_extra_long_snake_: "snake key",
|
|
}),
|
|
{
|
|
_foo_: "foo key",
|
|
_extra_long_snake_: "snake key",
|
|
_extraLongSnake_: "snake key",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function consecutiveUnderscores() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel({ weird__snake: "snake key" }),
|
|
{
|
|
weird__snake: "snake key",
|
|
weird_Snake: "snake key",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function nested() {
|
|
let obj = UrlbarUtils.copySnakeKeysToCamel({
|
|
foo: "foo key",
|
|
nested: {
|
|
bar: "bar key",
|
|
baz: {
|
|
snake_in_baz: "snake_in_baz key",
|
|
},
|
|
snake_in_nested: {
|
|
snake_in_snake_in_nested: "snake_in_snake_in_nested key",
|
|
},
|
|
},
|
|
snake_key: {
|
|
snake_in_snake_key: "snake_in_snake_key key",
|
|
},
|
|
});
|
|
|
|
Assert.equal(obj.foo, "foo key");
|
|
Assert.equal(obj.nested.bar, "bar key");
|
|
Assert.deepEqual(obj.nested.baz, {
|
|
snake_in_baz: "snake_in_baz key",
|
|
snakeInBaz: "snake_in_baz key",
|
|
});
|
|
Assert.deepEqual(obj.nested.snake_in_nested, {
|
|
snake_in_snake_in_nested: "snake_in_snake_in_nested key",
|
|
snakeInSnakeInNested: "snake_in_snake_in_nested key",
|
|
});
|
|
Assert.equal(obj.nested.snake_in_nested, obj.nested.snakeInNested);
|
|
Assert.deepEqual(obj.snake_key, {
|
|
snake_in_snake_key: "snake_in_snake_key key",
|
|
snakeInSnakeKey: "snake_in_snake_key key",
|
|
});
|
|
Assert.equal(obj.snake_key, obj.snakeKey);
|
|
});
|
|
|
|
add_task(async function noOverwrite_ok() {
|
|
Assert.deepEqual(
|
|
UrlbarUtils.copySnakeKeysToCamel(
|
|
{
|
|
foo: "foo key",
|
|
snake_key: "snake key",
|
|
},
|
|
false
|
|
),
|
|
{
|
|
foo: "foo key",
|
|
snake_key: "snake key",
|
|
snakeKey: "snake key",
|
|
}
|
|
);
|
|
});
|
|
|
|
add_task(async function noOverwrite_throws() {
|
|
Assert.throws(
|
|
() =>
|
|
UrlbarUtils.copySnakeKeysToCamel(
|
|
{
|
|
snake_key: "snake key",
|
|
snakeKey: "snake key",
|
|
},
|
|
false
|
|
),
|
|
/Can't copy snake_case key/
|
|
);
|
|
});
|