mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-18 06:45:33 +00:00
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:
parent
a71b9f47c1
commit
e2fc12b175
@ -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']
|
||||
|
7
toolkit/components/utils/test/unit/.eslintrc.js
Normal file
7
toolkit/components/utils/test/unit/.eslintrc.js
Normal file
@ -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
|
2
toolkit/components/utils/test/unit/xpcshell.ini
Normal file
2
toolkit/components/utils/test/unit/xpcshell.ini
Normal file
@ -0,0 +1,2 @@
|
||||
[test_FilterExpressions.js]
|
||||
[test_Sampling.js]
|
Loading…
x
Reference in New Issue
Block a user