Feature: Format output 
 
  Scenario: Format output as YAML 
    Given an empty directory 
    And a output-yaml.php file: 
      """ 
      <?php 
      /** 
       * Output data as YAML 
       * 
       * <type> 
       * : Type of output. 
       * 
       * [--fields=<fields>] 
       * : Limit output to particular fields 
       * 
       * @when before_wp_load 
       */ 
      $output_yaml = function( $args, $assoc_args ) { 
          $items = array( 
              array( 
                  'label'    => 'Foo', 
                  'slug'     => 'foo', 
              ), 
              array( 
                  'label'    => 'Bar', 
                  'slug'     => 'bar', 
              ), 
          ); 
          $format_args = array( 'format' => 'yaml' ); 
          if ( isset( $assoc_args['fields'] ) ) { 
              $format_args['fields'] = explode( ',', $assoc_args['fields'] ); 
          } else { 
              $format_args['fields'] = array( 'label', 'slug' ); 
          } 
          $formatter = new \WP_CLI\Formatter( $format_args ); 
          if ( 'all' === $args[0] ) { 
                $formatter->display_items( $items ); 
          } else if ( 'single' === $args[0] ) { 
              $formatter->display_item( $items[0] ); 
          } 
      }; 
      WP_CLI::add_command( 'yaml', $output_yaml ); 
      """ 
 
    When I run `wp --require=output-yaml.php yaml all` 
    Then STDOUT should be YAML containing: 
      """ 
      --- 
      - 
        label: Foo 
        slug: foo 
      - 
        label: Bar 
        slug: bar 
      """ 
 
    When I run `wp --require=output-yaml.php yaml all --fields=label` 
    Then STDOUT should be YAML containing: 
      """ 
      --- 
      - 
        label: Foo 
      - 
        label: Bar 
      """ 
    And STDOUT should not contain: 
      """ 
      slug: bar 
      """ 
 
    When I run `wp --require=output-yaml.php yaml single` 
    Then STDOUT should be YAML containing: 
      """ 
      --- 
      label: Foo 
      slug: foo 
      """ 
 
  Scenario: Format data in RTL language 
    Given an empty directory 
    And a file.php file: 
      """ 
      <?php 
      $items = array( 
        array( 
          'id' => 1, 
          'language' => 'Afrikaans', 
          'is_rtl' => 0, 
        ), 
        array( 
          'id' => 2, 
          'language' => '??????????????', 
          'is_rtl' => 1, 
        ), 
        array( 
          'id' => 3, 
          'language' => 'English', 
          'is_rtl' => 0, 
        ), 
      ); 
      $assoc_args = array( 'format' => 'csv' ); 
      $formatter = new WP_CLI\Formatter( $assoc_args, array( 'id', 'language', 'is_rtl' ) ); 
      $formatter->display_items( $items ); 
      """ 
 
    When I run `wp eval-file file.php --skip-wordpress` 
    Then STDOUT should be CSV containing: 
      | id | language      | is_rtl | 
      | 1  | Afrikaans     | 0      | 
      | 2  | ??????????????  | 1      | 
      | 3  | English       | 0      | 
 
  Scenario: Padding for pre-colorized tables 
    Given an empty directory 
    And a file.php file: 
      """ 
      <?php 
      use cli\Colors; 
      /** 
       * Fake command. 
       * 
       * ## OPTIONS 
       * 
       * [--format=<format>] 
       * : Render output in a particular format. 
       * --- 
       * default: table 
       * options: 
       *   - table 
       * --- 
       * 
       * @when before_wp_load 
       */ 
      $fake_command = function( $args, $assoc_args ) { 
          Colors::enable( true ); 
          $items = array( 
              array( 'package' => Colors::colorize( '%ygaa/gaa-kabes%n' ), 'version' => 'dev-master', 'result' => Colors::colorize( "%r\xf0\x9f\x9b\x87%n" ) ), 
              array( 'package' => Colors::colorize( '%ygaa/gaa-log%n' ), 'version' => '*', 'result' => Colors::colorize( "%g\xe2\x9c\x94%n" ) ), 
              array( 'package' => Colors::colorize( '%ygaa/gaa-nonsense%n' ), 'version' => 'v3.0.11', 'result' => Colors::colorize( "%r\xf0\x9f\x9b\x87%n" ) ), 
              array( 'package' => Colors::colorize( '%ygaa/gaa-100%%new%n' ), 'version' => 'v100%new', 'result' => Colors::colorize( "%g\xe2\x9c\x94%n" ) ), 
          ); 
          $formatter = new \WP_CLI\Formatter( $assoc_args, array( 'package', 'version', 'result' ) ); 
          $formatter->display_items( $items, array( true, false, true ) ); 
      }; 
      WP_CLI::add_command( 'fake', $fake_command ); 
      """ 
 
    When I run `wp --require=file.php fake` 
    Then STDOUT should be a table containing rows: 
      | package          | version    | result | 
      | [33mgaa/gaa-kabes[0m    | dev-master | [31m?[0m      | 
      | [33mgaa/gaa-log[0m      | *          | [32m?[0m      | 
      | [33mgaa/gaa-nonsense[0m | v3.0.11    | [31m?[0m      | 
      | [33mgaa/gaa-100%new[0m  | v100%new   | [32m?[0m      | 
 
 |