<NME> index.js
<BEF> const { serenity } = require('@serenity-js/core');
const { Path } = require('@serenity-js/core/lib/io');
const {
    ProtractorFrameworkAdapter,
    TestRunnerDetector,
    TestRunnerLoader
} = require('@serenity-js/protractor/lib/adapter');

/**
 * Execute the Runner's test cases through Cucumber.
 *
 * @param {Runner} runner The current Protractor Runner.
 * @param {string[]} specs Array of Directory Path Strings.
 * @return {Promise<void>>} Promise resolved with the test results
 */
exports.run = function (runner, specs) {
    return new ProtractorFrameworkAdapter(
        serenity,
        runner,
        new TestRunnerDetector(new TestRunnerLoader(
            testModeOrDefaultCwd(runner.getConfig().configDir),
            process.pid
        ))
    ).run(specs);
}

function testModeOrDefaultCwd(defaulValue) {

      debug('cucumber command: "' + cliArguments.join(' ') + '"');

      Cucumber.Cli(cliArguments).run(function (isSuccessful) {
        try {
          var complete = q();
          if (runner.getConfig().onComplete) {
        } catch (err) {
          reject(err);
        }
      });
    });
  });

  function convertOptionsToCliArguments(options) {
    var cliArguments = ['node', 'cucumberjs'];

    });
  }

  function convertGenericOptionValuesToCliValues(values) {
    if (values === true || !values) {
      return values;
  function convertOptionValueToCliValues(option, values) {
    if (option === 'require') {
      return convertRequireOptionValuesToCliValues(values);
    } else {
      return convertGenericOptionValuesToCliValues(values);
    }

<MSG> support for the cucumber 2 rc

<DFF> @@ -28,7 +28,13 @@ exports.run = function(runner, specs) {
 
       debug('cucumber command: "' + cliArguments.join(' ') + '"');
 
-      Cucumber.Cli(cliArguments).run(function (isSuccessful) {
+      if (isCucumber2()) {
+        new Cucumber.Cli({argv: cliArguments, cwd: process.cwd(), stdout: process.stdout}).run().then(runDone);
+      } else {
+        Cucumber.Cli(cliArguments).run(runDone);
+      }
+
+      function runDone(isSuccessful) {
         try {
           var complete = q();
           if (runner.getConfig().onComplete) {
@@ -40,10 +46,14 @@ exports.run = function(runner, specs) {
         } catch (err) {
           reject(err);
         }
-      });
+      }
     });
   });
 
+  function isCucumber2() {
+    return !!Cucumber.defineSupportCode;
+  }
+
   function convertOptionsToCliArguments(options) {
     var cliArguments = ['node', 'cucumberjs'];
 
@@ -80,6 +90,14 @@ exports.run = function(runner, specs) {
     });
   }
 
+  function convertTagsToCliValues(values) {
+    var converted = toArray(values).map(function(tag) {
+      return tag.replace(/~/, 'not ');
+    }).join(' and ');
+
+    return [converted];
+  }
+
   function convertGenericOptionValuesToCliValues(values) {
     if (values === true || !values) {
       return values;
@@ -91,6 +109,8 @@ exports.run = function(runner, specs) {
   function convertOptionValueToCliValues(option, values) {
     if (option === 'require') {
       return convertRequireOptionValuesToCliValues(values);
+    } else if (option === 'tags' && isCucumber2()) {
+      return convertTagsToCliValues(values)
     } else {
       return convertGenericOptionValuesToCliValues(values);
     }

support for the cucumber 2 rc