| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | 
							- <?php
 
- /*
 
- * @file
 
- *  Assure that context API behaves as designed. Mostly implicitly tested, but we
 
- *  do have some edges that need explicit testing.
 
- *
 
- *  @see drush/includes/context.inc.
 
- */
 
- class contextCase extends Drush_TestCase {
 
-   function setUpPaths() {
 
-     $this->root = $this->sites[$this->env]['root'];
 
-     $this->site = $this->root . '/sites/' . $this->env;
 
-     $this->home = UNISH_SANDBOX . '/home';
 
-     $this->paths = array(
 
-       'custom' => UNISH_SANDBOX,
 
-       'site' =>  $this->site,
 
-       'drupal' => $this->root,
 
-       'user' => $this->home,
 
-       'home.drush' => $this->home . '/.drush',
 
-       'system' => UNISH_SANDBOX . '/etc/drush',
 
-       // We don't want to write a file into drush dir since it is not in the sandbox.
 
-       // 'drush' => dirname(realpath(UNISH_DRUSH)),
 
-     );
 
-     // Run each path through realpath() since the paths we'll compare against
 
-     // will have already run through drush_load_config_file().
 
-     foreach ($this->paths as $key => $path) $this->paths[$key] = realpath($path);
 
-   }
 
-   /*
 
-    * Try to write a tiny drushrc.php to each place that drush checks. Also
 
-    * write a sites/dev/aliases.drushrc.php file to the sandbox.
 
-    */
 
-   function setup() {
 
-     parent::setUp();
 
-     $this->env = 'dev';
 
-     $this->setUpDrupal($this->env, FALSE);
 
-     $this->setUpPaths();
 
-     // These files are only written to sandbox so get automatically cleaned up.
 
-     foreach ($this->paths as $key => $path) {
 
-       $contents = <<<EOD
 
- <?php
 
- // Written by Drush's contextCase::setup(). This file is safe to delete.
 
- \$options['contextConfig'] = '$key';
 
- \$command_specific['unit-eval']['contextConfig'] = '$key-specific';
 
- EOD;
 
-       $path .= $key == 'user' ? '/.drushrc.php' : '/drushrc.php';
 
-       if (file_put_contents($path, $contents)) {
 
-         $this->written[] = $path;
 
-       }
 
-     }
 
-     // Also write a site alias so we can test its supremacy in context hierarchy.
 
-     $path = $this->site . '/aliases.drushrc.php';
 
-     $aliases['contextAlias'] = array(
 
-       'contextConfig' => 'alias1',
 
-       'command-specific' => array (
 
-         'unit-eval' => array (
 
-           'contextConfig' => 'alias-specific',
 
-         ),
 
-       ),
 
-     );
 
-     $contents = $this->file_aliases($aliases);
 
-     $return = file_put_contents($path, $contents);
 
-   }
 
-   /*
 
-    * These should be two different tests but I could not work out how to do that
 
-    * without calling setup() twice. setupBeforeClass() did not work out (for MW).
 
-    */
 
-   function testContext() {
 
-     $this->ConfigFile();
 
-     $this->ContextHierarchy();
 
-   }
 
-   /*
 
-    * Assure that all possible config files get loaded.
 
-    */
 
-   function ConfigFile() {
 
-     $options = array(
 
-       'pipe' => NULL,
 
-       'config' => UNISH_SANDBOX,
 
-       'root' => $this->root,
 
-       'uri' => $this->env,
 
-     );
 
-     $this->drush('core-status', array('Drush configuration'), $options);
 
-     $output = trim($this->getOutput());
 
-     $loaded = explode(' ', $output);
 
-     $this->assertSame($this->written, $loaded);
 
-   }
 
-   /*
 
-    * Assure that options are loaded into right context and hierarchy is
 
-    * respected by drush_get_option().
 
-    *
 
-    * Stdin context not exercised here. See backendCase::testTarget().
 
-    */
 
-   function ContextHierarchy() {
 
-     // The 'custom' config file has higher priority than cli and regular config files.
 
-     $eval =  '$contextConfig = drush_get_option("contextConfig", "n/a");';
 
-     $eval .= '$cli1 = drush_get_option("cli1");';
 
-     $eval .= 'print json_encode(get_defined_vars());';
 
-     $config = UNISH_SANDBOX . '/drushrc.php';
 
-     $options = array(
 
-       'cli1' => NULL,
 
-       'config' => $config,
 
-       'root' => $this->root,
 
-       'uri' => $this->env,
 
-     );
 
-     $this->drush('php-eval', array($eval), $options);
 
-     $output = $this->getOutput();
 
-     $actuals = json_decode(trim($output));
 
-     $this->assertEquals('custom', $actuals->contextConfig);
 
-     $this->assertTrue($actuals->cli1);
 
-     // Site alias trumps 'custom'.
 
-     $eval =  '$contextConfig = drush_get_option("contextConfig", "n/a");';
 
-     $eval .= 'print json_encode(get_defined_vars());';
 
-     $options = array(
 
-       'config' => $config,
 
-       'root' => $this->root,
 
-       'uri' => $this->env,
 
-     );
 
-     $this->drush('php-eval', array($eval), $options, '@contextAlias');
 
-     $output = $this->getOutput();
 
-     $actuals = json_decode(trim($output));
 
-     $this->assertEquals('alias1', $actuals->contextConfig);
 
-     // Command specific wins over non-specific. If it did not, $expected would
 
-     // be 'site'. Note we call unit-eval command in order not to purturb
 
-     // php-eval with options in config file.
 
-     $eval =  '$contextConfig = drush_get_option("contextConfig", "n/a");';
 
-     $eval .= 'print json_encode(get_defined_vars());';
 
-     $options = array(
 
-       'root' => $this->root,
 
-       'uri' => $this->env,
 
-       'include' => dirname(__FILE__), // Find unit.drush.inc commandfile.
 
-     );
 
-     $this->drush('unit-eval', array($eval), $options);
 
-     $output = $this->getOutput();
 
-     $actuals = json_decode(trim($output));
 
-     $this->assertEquals('site-specific', $actuals->contextConfig);
 
-   }
 
- }
 
 
  |