annotate vendor/consolidation/output-formatters/tests/testValidFormats.php @ 9:1fc0ff908d1f

Add another data file
author Chris Cannam
date Mon, 05 Feb 2018 12:34:32 +0000
parents 4c8ae668cc8c
children
rev   line source
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 }