--- /dev/null
+<?php
+
+namespace Unish;
+
+/**
+* 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.
+*
+* @group base
+*/
+class commandSpecificCase extends CommandUnishTestCase {
+
+ /**
+ * 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();
+
+ $path = UNISH_SANDBOX . '/aliases.drushrc.php';
+ $aliases['site1'] = array(
+ 'root' => UNISH_SANDBOX,
+ 'uri' => 'site1.com',
+ 'source-command-specific' => array(
+ 'core-rsync' => array(
+ 'exclude-paths' => 'excluded_by_source',
+ ),
+ ),
+ 'target-command-specific' => array(
+ 'core-rsync' => array(
+ 'exclude-paths' => 'excluded_by_target',
+ ),
+ ),
+ 'path-aliases' => array(
+ '%files' => 'sites/default/files',
+ ),
+ );
+ $contents = $this->unish_file_aliases($aliases);
+ $return = file_put_contents($path, $contents);
+ }
+
+ function testCommandSpecific() {
+ $options = array(
+ 'alias-path' => UNISH_SANDBOX,
+ 'simulate' => NULL,
+ 'include-vcs' => NULL,
+ );
+ $this->drush('core-rsync', array('/tmp', '@site1'), $options, NULL, NULL, self::EXIT_SUCCESS, '2>&1');
+ $output = trim($this->getOutput());
+ $this->assertContains('excluded_by_target', $output);
+ $this->drush('core-rsync', array('@site1', '/tmp'), $options, NULL, NULL, self::EXIT_SUCCESS, '2>&1');
+ $output = trim($this->getOutput());
+ $this->assertContains('excluded_by_source', $output);
+ $this->drush('core-rsync', array('@site1', '@site1'), $options, NULL, NULL, self::EXIT_SUCCESS, '2>&1');
+ $output = trim($this->getOutput());
+ $this->assertContains('excluded_by_target', $output);
+ // Now do that all again with 'exclude-files'
+ $options['exclude-files'] = NULL;
+ $this->drush('core-rsync', array('/tmp', '@site1'), $options, NULL, NULL, self::EXIT_SUCCESS, '2>&1');
+ $output = trim($this->getOutput());
+ $this->assertContains('sites/default/files', $output);
+ $this->assertContains('excluded_by_target', $output);
+ $this->assertNotContains('include-vcs', $output);
+ $this->assertNotContains('exclude-paths', $output);
+ $this->assertNotContains('exclude-files-processed', $output);
+ $this->drush('core-rsync', array('@site1', '/tmp'), $options, NULL, NULL, self::EXIT_SUCCESS, '2>&1');
+ $output = trim($this->getOutput());
+ $this->assertContains('sites/default/files', $output);
+// This one does not work. @see drush_sitealias_evaluate_path
+// $this->assertContains('excluded_by_source', $output);
+ $this->assertNotContains('include-vcs', $output);
+ $this->assertNotContains('exclude-paths', $output);
+ $this->assertNotContains('exclude-files-processed', $output);
+ $this->drush('core-rsync', array('@site1', '@site1'), $options, NULL, NULL, self::EXIT_SUCCESS, '2>&1');
+ $output = trim($this->getOutput());
+ $this->assertContains('sites/default/files', $output);
+ $this->assertContains('excluded_by_target', $output);
+ $this->assertNotContains('include-vcs', $output);
+ $this->assertNotContains('exclude-paths', $output);
+ $this->assertNotContains('exclude-files-processed', $output);
+ }
+}