Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Behat / Context / Cli / InteractiveContextIdentifier.php
diff --git a/vendor/behat/behat/src/Behat/Behat/Context/Cli/InteractiveContextIdentifier.php b/vendor/behat/behat/src/Behat/Behat/Context/Cli/InteractiveContextIdentifier.php
new file mode 100644 (file)
index 0000000..c39488a
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+/*
+ * This file is part of the Behat.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Behat\Context\Cli;
+
+use Behat\Behat\Context\Environment\ContextEnvironment;
+use Behat\Behat\Context\Snippet\Generator\TargetContextIdentifier;
+use Symfony\Component\Console\Helper\QuestionHelper;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\ChoiceQuestion;
+use Symfony\Component\Translation\TranslatorInterface;
+
+/**
+ * Interactive identifier that asks user for input.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+final class InteractiveContextIdentifier implements TargetContextIdentifier
+{
+    /**
+     * @var TranslatorInterface
+     */
+    private $translator;
+    /**
+     * @var InputInterface
+     */
+    private $input;
+    /**
+     * @var OutputInterface
+     */
+    private $output;
+
+    /**
+     * Initialises identifier.
+     *
+     * @param TranslatorInterface $translator
+     * @param InputInterface      $input
+     * @param OutputInterface     $output
+     */
+    public function __construct(TranslatorInterface $translator, InputInterface $input, OutputInterface $output)
+    {
+        $this->translator = $translator;
+        $this->input = $input;
+        $this->output = $output;
+    }
+    
+    /**
+     * {@inheritdoc}
+     */
+    public function guessTargetContextClass(ContextEnvironment $environment)
+    {
+        if ($this->interactionIsNotSupported()) {
+            return null;
+        }
+
+        $suiteName = $environment->getSuite()->getName();
+        $contextClasses = $environment->getContextClasses();
+
+        if (!count($contextClasses)) {
+            return null;
+        }
+
+        $message = $this->translator->trans('snippet_context_choice', array('%1%' => $suiteName), 'output');
+        $choices = array_values(array_merge(array('None'), $contextClasses));
+        $default = current($contextClasses);
+
+        $answer = $this->askQuestion('>> ' . $message, $choices, $default);
+
+        return 'None' !== $answer ? $answer : null;
+    }
+
+    /**
+     * Asks user question.
+     *
+     * @param string   $message
+     * @param string[] $choices
+     * @param string   $default
+     *
+     * @return string
+     */
+    private function askQuestion($message, $choices, $default)
+    {
+        $this->output->writeln('');
+        $helper = new QuestionHelper();
+        $question = new ChoiceQuestion(' ' . $message . "\n", $choices, $default);
+
+        return $helper->ask($this->input, $this->output, $question);
+    }
+
+    /**
+     * Checks if interactive mode is supported.
+     *
+     * @return Boolean
+     *
+     * @deprecated there is a better way to do it - `InputInterface::isInteractive()` method.
+     *             Sadly, this doesn't work properly prior Symfony\Console 2.7 and as we need
+     *             to support 2.5+ until the next major, we are forced to do a more explicit
+     *             check for the CLI option. This should be reverted back to proper a
+     *             `InputInterface::isInteractive()` call as soon as we bump dependencies
+     *             to Symfony\Console 3.x in Behat 4.x.
+     */
+    private function interactionIsNotSupported()
+    {
+        return $this->input->hasParameterOption('--no-interaction');
+    }
+}