Bug 1247149 - mozscreenshots: Support restricting configurations in sets. r?MattN draft
authorKit Cambridge <kcambridge@mozilla.com>
Tue, 09 Feb 2016 19:12:40 -0800
changeset 329926 e310d30dbc8446d3dfd1921de15b40504c5dbfc1
parent 329801 2dfb45d74f42d2a0010696f5fd47c7a7da94cedb
child 514078 90ce55e4a3a4e8879a718c221cf02c53d33178b8
push id10653
push userkcambridge@mozilla.com
push dateWed, 10 Feb 2016 03:13:18 +0000
reviewersMattN
bugs1247149
milestone47.0a1
Bug 1247149 - mozscreenshots: Support restricting configurations in sets. r?MattN MozReview-Commit-ID: LTT7auJfcHa
browser/tools/mozscreenshots/mozscreenshots/extension/TestRunner.jsm
--- a/browser/tools/mozscreenshots/mozscreenshots/extension/TestRunner.jsm
+++ b/browser/tools/mozscreenshots/mozscreenshots/extension/TestRunner.jsm
@@ -99,31 +99,47 @@ this.TestRunner = {
   /**
    * Load sets of configurations from JSMs.
    * @param {String[]} setNames - array of set names (e.g. ["Tabs", "WindowSize"].
    * @return {Object[]} Array of sets containing `name` and `configurations` properties.
    */
   loadSets(setNames) {
     let sets = [];
     for (let setName of setNames) {
+      let restrictions = null;
+      if (setName.contains("[")) {
+        let match = /\[([^\]]+)\]$/.exec(setName);
+        if (!match) {
+          throw new Error(`Invalid restrictions in ${setName}`);
+        }
+        // Trim the restrictions from the set name.
+        setName = setName.slice(0, match.index);
+        restrictions = match[1].split(",").reduce((set, name) =>
+          set.add(name.trim()), new Set());
+      }
       try {
         let imported = {};
         Cu.import("chrome://mozscreenshots/content/configurations/" + setName + ".jsm",
                   imported);
         imported[setName].init(this._libDir);
         let configurationNames = Object.keys(imported[setName].configurations);
         if (!configurationNames.length) {
           throw new Error(setName + " has no configurations for this environment");
         }
+        let configurations = [];
         for (let config of configurationNames) {
           // Automatically set the name property of the configuration object to
           // its name from the configuration object.
           imported[setName].configurations[config].name = config;
+          // Filter restricted configurations.
+          if (!restrictions || restrictions.has(config)) {
+            configurations.push(imported[setName].configurations[config]);
+          }
         }
-        sets.push(imported[setName].configurations);
+        sets.push(configurations);
       } catch (ex) {
         log.error("Error loading set: " + setName);
         log.error(ex);
         throw ex;
       }
     }
     return sets;
   },