Bug 1464006 - Move Normandy FilterExpressions to toolkit/components/utils r=mythmon

MozReview-Commit-ID: 98SsHd2jZi8

--HG--
rename : toolkit/components/normandy/lib/FilterExpressions.jsm => toolkit/components/utils/FilterExpressions.jsm
rename : toolkit/components/normandy/lib/PreferenceFilters.jsm => toolkit/components/utils/PreferenceFilters.jsm
rename : toolkit/components/normandy/lib/Sampling.jsm => toolkit/components/utils/Sampling.jsm
rename : toolkit/components/normandy/vendor/mozjexl.js => toolkit/components/utils/mozjexl.js
rename : toolkit/components/normandy/test/browser/browser_FilterExpressions.js => toolkit/components/utils/test/unit/test_FilterExpressions.js
rename : toolkit/components/normandy/test/unit/test_Sampling.js => toolkit/components/utils/test/unit/test_Sampling.js
extra : rebase_source : 6d767860b0ec7fc328d7589aba5f31b0337bbe5b
This commit is contained in:
Mathieu Leplatre 2018-05-24 10:48:00 +02:00
Родитель a71b9f47c1
Коммит e2fc12b175
16 изменённых файлов: 42 добавлений и 30 удалений

Просмотреть файл

@ -24,7 +24,8 @@ ChromeUtils.defineModuleGetter(this, "UptakeTelemetry",
"resource://services-common/uptake-telemetry.js");
ChromeUtils.defineModuleGetter(this, "ClientEnvironmentBase",
"resource://gre/modules/components-utils/ClientEnvironment.jsm");
ChromeUtils.defineModuleGetter(this, "FilterExpressions", "resource://normandy/lib/FilterExpressions.jsm");
ChromeUtils.defineModuleGetter(this, "FilterExpressions",
"resource://gre/modules/components-utils/FilterExpressions.jsm");
const PREF_SETTINGS_SERVER = "services.settings.server";
const PREF_SETTINGS_DEFAULT_BUCKET = "services.settings.default_bucket";

Просмотреть файл

@ -246,12 +246,6 @@ add_task(async function test_sync_event_data_is_filtered_for_target() {
add_task(clear_state);
add_task(async function test_entries_are_filtered_when_jexl_filters_is_present() {
if (IS_ANDROID) {
// JEXL filters are not supported on Android.
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1463502
return;
}
const records = [{
willMatch: true,
}, {

Просмотреть файл

@ -23,7 +23,6 @@ tags = remote-settings blocklist
[test_remote_settings_poll.js]
tags = remote-settings blocklist
[test_remote_settings_jexl_filters.js]
skip-if = os == "android"
tags = remote-settings
[test_kinto.js]

Просмотреть файл

@ -14,11 +14,11 @@ ChromeUtils.import("resource://normandy/lib/Addons.jsm");
ChromeUtils.import("resource://normandy/lib/LogManager.jsm");
ChromeUtils.import("resource://normandy/lib/Storage.jsm");
ChromeUtils.import("resource://normandy/lib/Heartbeat.jsm");
ChromeUtils.import("resource://normandy/lib/FilterExpressions.jsm");
ChromeUtils.import("resource://normandy/lib/ClientEnvironment.jsm");
ChromeUtils.import("resource://normandy/lib/PreferenceExperiments.jsm");
ChromeUtils.import("resource://normandy/lib/Sampling.jsm");
ChromeUtils.defineModuleGetter(
this, "Sampling", "resource://gre/modules/components-utils/Sampling.jsm");
ChromeUtils.defineModuleGetter(this, "UpdateUtils", "resource://gre/modules/UpdateUtils.jsm");
ChromeUtils.defineModuleGetter(
this, "AddonStudies", "resource://normandy/lib/AddonStudies.jsm");

Просмотреть файл

@ -14,7 +14,7 @@ XPCOMUtils.defineLazyServiceGetter(this, "timerManager",
XPCOMUtils.defineLazyModuleGetters(this, {
Storage: "resource://normandy/lib/Storage.jsm",
FilterExpressions: "resource://normandy/lib/FilterExpressions.jsm",
FilterExpressions: "resource://gre/modules/components-utils/FilterExpressions.jsm",
NormandyApi: "resource://normandy/lib/NormandyApi.jsm",
ClientEnvironment: "resource://normandy/lib/ClientEnvironment.jsm",
CleanupManager: "resource://normandy/lib/CleanupManager.jsm",

Просмотреть файл

@ -19,7 +19,6 @@ skip-if = true # bug 1442712
[browser_CleanupManager.js]
[browser_ClientEnvironment.js]
[browser_EventEmitter.js]
[browser_FilterExpressions.js]
[browser_Heartbeat.js]
[browser_LogManager.js]
[browser_Normandy.js]

Просмотреть файл

@ -9,5 +9,4 @@ support-files =
tags = normandy
[test_NormandyApi.js]
[test_Sampling.js]
[test_SandboxManager.js]

Просмотреть файл

@ -5,10 +5,10 @@
"use strict";
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
ChromeUtils.import("resource://normandy/lib/Sampling.jsm");
ChromeUtils.import("resource://normandy/lib/PreferenceFilters.jsm");
ChromeUtils.defineModuleGetter(this, "mozjexl", "resource://normandy-vendor/mozjexl.js");
ChromeUtils.defineModuleGetter(this, "PreferenceFilters", "resource://gre/modules/components-utils/PreferenceFilters.jsm");
ChromeUtils.defineModuleGetter(this, "Sampling", "resource://gre/modules/components-utils/Sampling.jsm");
ChromeUtils.defineModuleGetter(this, "mozjexl", "resource://gre/modules/components-utils/mozjexl.js");
var EXPORTED_SYMBOLS = ["FilterExpressions"];

Просмотреть файл

@ -14,7 +14,12 @@ EXTRA_COMPONENTS += [
EXTRA_JS_MODULES['components-utils'] = [
'ClientEnvironment.jsm',
'FilterExpressions.jsm',
'JsonSchemaValidator.jsm',
'mozjexl.js',
'PreferenceFilters.jsm',
'Sampling.jsm',
]
BROWSER_CHROME_MANIFESTS += ['test/browser/browser.ini']
XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']

Просмотреть файл

@ -0,0 +1,7 @@
"use strict";
module.exports = {
"extends": [
"plugin:mozilla/xpcshell-test"
]
};

Просмотреть файл

@ -1,13 +1,16 @@
"use strict";
ChromeUtils.import("resource://normandy/lib/FilterExpressions.jsm", this);
ChromeUtils.import("resource://gre/modules/Services.jsm");
ChromeUtils.defineModuleGetter(this, "FilterExpressions",
"resource://gre/modules/components-utils/FilterExpressions.jsm");
// Basic JEXL tests
add_task(async function() {
let val;
// Test that basic expressions work
val = await FilterExpressions.eval("2+2");
is(val, 4, "basic expression works");
equal(val, 4, "basic expression works");
// Test that multiline expressions work
val = await FilterExpressions.eval(`
@ -15,11 +18,11 @@ add_task(async function() {
+
2
`);
is(val, 4, "multiline expression works");
equal(val, 4, "multiline expression works");
// Test that it reads from the context correctly.
val = await FilterExpressions.eval("first + second + 3", {first: 1, second: 2});
is(val, 6, "context is available to filter expressions");
equal(val, 6, "context is available to filter expressions");
});
// Date tests
@ -28,7 +31,7 @@ add_task(async function() {
// Test has a date transform
val = await FilterExpressions.eval('"2016-04-22"|date');
const d = new Date(Date.UTC(2016, 3, 22)); // months are 0 based
is(val.toString(), d.toString(), "Date transform works");
equal(val.toString(), d.toString(), "Date transform works");
// Test dates are comparable
const context = {someTime: Date.UTC(2016, 0, 1)};
@ -66,7 +69,9 @@ add_task(async function() {
add_task(async function() {
let val;
// Compare the value of the preference
await SpecialPowers.pushPrefEnv({set: [["normandy.test.value", 3]]});
Services.prefs.setIntPref("normandy.test.value", 3);
registerCleanupFunction(() => Services.prefs.clearUserPref("normandy.test.value"));
val = await FilterExpressions.eval('"normandy.test.value"|preferenceValue == 3');
ok(val, "preferenceValue expression compares against preference values");
val = await FilterExpressions.eval('"normandy.test.value"|preferenceValue == "test"');
@ -118,7 +123,7 @@ add_task(async function testKeys() {
context = {ctxObject: Object.create({fooProto: 7})};
context.ctxObject.baz = 8;
context.ctxObject.biff = 5;
is(
equal(
await FilterExpressions.eval("ctxObject.fooProto", context),
7,
"Prototype properties are accessible via property access",
@ -131,12 +136,12 @@ add_task(async function testKeys() {
);
// Return undefined for non-objects
is(
equal(
await FilterExpressions.eval("ctxObject|keys", {ctxObject: 45}),
undefined,
"keys returns undefined for numbers",
);
is(
equal(
await FilterExpressions.eval("ctxObject|keys", {ctxObject: null}),
undefined,
"keys returns undefined for null",
@ -150,7 +155,7 @@ add_task(async function testKeys() {
}
}};
await FilterExpressions.eval("ctxObject.ping == 0 || ctxObject.ping == 1", context);
is(pong, 2, "Properties are not reifed");
equal(pong, 2, "Properties are not reifed");
});
// intersect tests
@ -180,17 +185,17 @@ add_task(async function testIntersect() {
);
// Return undefined when intersecting things that aren't lists.
is(
equal(
await FilterExpressions.eval("5 intersect 7"),
undefined,
"intersect returns undefined for numbers",
);
is(
equal(
await FilterExpressions.eval("val intersect other", {val: null, other: null}),
undefined,
"intersect returns undefined for null",
);
is(
equal(
await FilterExpressions.eval("5 intersect [1, 2, 5]"),
undefined,
"intersect returns undefined if only one operand is a list",

Просмотреть файл

@ -1,6 +1,7 @@
"use strict";
ChromeUtils.import("resource://normandy/lib/Sampling.jsm", this);
ChromeUtils.import("resource://gre/modules/components-utils/Sampling.jsm", this);
add_task(async function testStableSample() {
// Absolute samples

Просмотреть файл

@ -0,0 +1,2 @@
[test_FilterExpressions.js]
[test_Sampling.js]