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