[Groonga-commit] groonga/gcs [master] Expand a scenario with setup/teardown to scenarios with flat requests

Back to archive index

YUKI Hiroshi null+****@clear*****
Thu Nov 15 12:28:43 JST 2012


YUKI Hiroshi	2012-11-15 12:28:43 +0900 (Thu, 15 Nov 2012)

  New Revision: 2c6d1e51e99f760d337d8deaf2a9633a285c831e
  https://github.com/groonga/gcs/commit/2c6d1e51e99f760d337d8deaf2a9633a285c831e

  Log:
    Expand a scenario with setup/teardown to scenarios with flat requests

  Modified files:
    tools/scenario-runner.js

  Modified: tools/scenario-runner.js (+67 -5)
===================================================================
--- tools/scenario-runner.js    2012-11-15 12:27:15 +0900 (cce0c4a)
+++ tools/scenario-runner.js    2012-11-15 12:28:43 +0900 (94bc545)
@@ -16,10 +16,63 @@ function ScenariosRunner(options) {
 
 ScenariosRunner.prototype = new EventEmitter();
 
-ScenariosRunner.prototype.run = function(scenario) {
-  this._process({ scenarios: scenario });
+ScenariosRunner.prototype.run = function(scenarios) {
+  var params = { scenarios: expandScenarios(scenarios) };
+  this._process(params);
 };
 
+function cloneArray(array) {
+  return array.map(function(aElement) {
+    if (Array.isArray(aElement))
+      return cloneArray(aElement);
+    else
+      return Object.create(aElement);
+  });
+};
+
+function expandScenarios(scenarios) {
+  if (!Array.isArray(scenarios)
+    scenarios = [scenarios];
+
+  var expanded = [];
+  scenarios.forEach(function(scenario) {
+    expanded = expanded.concat(expandScenario(scenario));
+  });
+  return expanded;
+};
+ScenariosRunner.expandScenarios = expandScenarios;
+
+function expandScenario(scenario) {
+  if (scenario.setup) {
+    if (!Array.isArray(scenario.setup))
+      scenario.setup = [scenario.setup];
+  } else {
+    scenario.setup = [];
+  }
+
+  if (scenario.teardown) {
+    if (!Array.isArray(scenario.teardown))
+      scenario.teardown = [scenario.teardown];
+  } else {
+    scenario.teardown = [];
+  }
+
+  var expanded = [];
+  scenario.requests.forEach(function(requests) {
+    if (!Array.isArray(requests))
+      requests = [requests];
+
+    var subScenario = {
+          requests: cloneArray(scenario.setup)
+                      .concat(requests)
+                      .concat(cloneArray(scenario.setup))
+        };
+    expanded.push(subScenario);
+  });
+  return expanded;
+};
+ScenariosRunner.expandScenario = expandScenario;
+
 ScenariosRunner.prototype._process = function(params) {
   if (!params.start) params.start = Date.now();
   var scenario = params.scenarios.shift();
@@ -77,11 +130,20 @@ ScenarioRunner.prototype.assertNoDomain = function(callback) {
   });
 };
 
+ScenarioRunner.prototype.initializeScenario = function(scenario) {
+  if (!scenario.requests)
+    scenario = { requests: scenario };
+
+  scenario.toBeProcessedRequests = scenario.requests.slice(0);
+  scenario.start = Date.now();
+  scenario.processed = {};
+
+  return scenario;
+};
+
 ScenarioRunner.prototype._process = function(scenario, callback) {
   if (!scenario.toBeProcessedRequests) {
-    scenario.toBeProcessedRequests = scenario.requests.slice(0);
-    scenario.start = Date.now();
-    scenario.processed = {};
+    scenario = this.initializeScenario(scenario);
     this.emit('start', { scenario: scenario });
   }
 
-------------- next part --------------
HTML����������������������������...
下载 



More information about the Groonga-commit mailing list
Back to archive index