Yaffs site version 1.1
[yaffs-website] / vendor / consolidation / output-formatters / tests / testValidFormats.php
1 <?php
2 namespace Consolidation\OutputFormatters;
3
4 use Consolidation\OutputFormatters\Options\FormatterOptions;
5 use Consolidation\OutputFormatters\StructuredData\RowsOfFields;
6 use Consolidation\OutputFormatters\StructuredData\PropertyList;
7
8 class ValidFormatsTests extends \PHPUnit_Framework_TestCase
9 {
10     protected $formatterManager;
11
12     function setup() {
13         $this->formatterManager = new FormatterManager();
14         $this->formatterManager->addDefaultFormatters();
15         $this->formatterManager->addDefaultSimplifiers();
16     }
17
18     function testValidFormats()
19     {
20         $arrayObjectRef = new \ReflectionClass('\ArrayObject');
21         $associativeListRef = new \ReflectionClass('\Consolidation\OutputFormatters\StructuredData\PropertyList');
22         $rowsOfFieldsRef = new \ReflectionClass('\Consolidation\OutputFormatters\StructuredData\RowsOfFields');
23         $notADataType = new \ReflectionClass('\Consolidation\OutputFormatters\FormatterManager');
24
25         $jsonFormatter = $this->formatterManager->getFormatter('json');
26         $isValid = $this->formatterManager->isValidFormat($jsonFormatter, $notADataType);
27         $this->assertFalse($isValid);
28         $isValid = $this->formatterManager->isValidFormat($jsonFormatter, new \ArrayObject());
29         $this->assertTrue($isValid);
30         $isValid = $this->formatterManager->isValidFormat($jsonFormatter, $arrayObjectRef);
31         $this->assertTrue($isValid);
32         $isValid = $this->formatterManager->isValidFormat($jsonFormatter, []);
33         $this->assertTrue($isValid);
34         $isValid = $this->formatterManager->isValidFormat($jsonFormatter, $associativeListRef);
35         $this->assertTrue($isValid);
36         $isValid = $this->formatterManager->isValidFormat($jsonFormatter, $rowsOfFieldsRef);
37         $this->assertTrue($isValid);
38
39         $sectionsFormatter = $this->formatterManager->getFormatter('sections');
40         $isValid = $this->formatterManager->isValidFormat($sectionsFormatter, $notADataType);
41         $this->assertFalse($isValid);
42         $isValid = $this->formatterManager->isValidFormat($sectionsFormatter, []);
43         $this->assertFalse($isValid);
44         $isValid = $this->formatterManager->isValidFormat($sectionsFormatter, $arrayObjectRef);
45         $this->assertFalse($isValid);
46         $isValid = $this->formatterManager->isValidFormat($sectionsFormatter, $rowsOfFieldsRef);
47         $this->assertTrue($isValid);
48         $isValid = $this->formatterManager->isValidFormat($sectionsFormatter, $associativeListRef);
49         $this->assertFalse($isValid);
50
51         // Check to see which formats can handle a simple array
52         $validFormats = $this->formatterManager->validFormats([]);
53         $this->assertEquals('csv,json,list,php,print-r,string,tsv,var_export,xml,yaml', implode(',', $validFormats));
54
55         // Check to see which formats can handle an PropertyList
56         $validFormats = $this->formatterManager->validFormats($associativeListRef);
57         $this->assertEquals('csv,json,list,php,print-r,string,table,tsv,var_export,xml,yaml', implode(',', $validFormats));
58
59         // Check to see which formats can handle an RowsOfFields
60         $validFormats = $this->formatterManager->validFormats($rowsOfFieldsRef);
61         $this->assertEquals('csv,json,list,php,print-r,sections,string,table,tsv,var_export,xml,yaml', implode(',', $validFormats));
62
63         // TODO: it woud be better if this returned an empty set instead of 'string'.
64         $validFormats = $this->formatterManager->validFormats($notADataType);
65         $this->assertEquals('string', implode(',', $validFormats));
66     }
67
68     function testAutomaticOptions()
69     {
70         $rowsOfFieldsRef = new \ReflectionClass('\Consolidation\OutputFormatters\StructuredData\RowsOfFields');
71         $formatterOptions = new FormatterOptions(
72             [
73                 FormatterOptions::FIELD_LABELS => "name: Name\nphone_number: Phone Number",
74             ]
75         );
76         $inputOptions = $this->formatterManager->automaticOptions($formatterOptions, $rowsOfFieldsRef);
77         $this->assertInputOptionDescriptionsEquals("Format the result data. Available formats: csv,json,list,php,print-r,sections,string,table,tsv,var_export,xml,yaml [Default: 'table']\nAvailable fields: Name (name), Phone Number (phone_number) [Default: '']\nSelect just one field, and force format to 'string'. [Default: '']", $inputOptions);
78     }
79
80     function assertInputOptionDescriptionsEquals($expected, $inputOptions)
81     {
82         $descriptions = [];
83         foreach ($inputOptions as $inputOption) {
84             $descriptions[] = $inputOption->getDescription() . " [Default: '" . $inputOption->getDefault() . "']";
85         }
86         $this->assertEquals($expected, implode("\n", $descriptions));
87     }
88 }