-
Notifications
You must be signed in to change notification settings - Fork 0
/
HelperOutput.php
138 lines (125 loc) · 3.33 KB
/
HelperOutput.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
/**
* Helper for controlling output
*
* @author Chris Cornutt <ccornutt@phpdeveloper.org>
* @package Frisk
*/
class HelperOutput extends Helper
{
/**
* Main execution method
*
* @param array $arguments Incoming arguments
* @return void
*/
public function execute($arguments)
{
}
/**
* Check to see if the output format has a method to handle it
* Reflect on this class to get the methods...
*
* @param string $outputFormat Output format type (xml, csv, etc)
*/
public function allowedFormat($outputFormat)
{
$allowedFormat = false;
$reflectionClass = new ReflectionClass('HelperOutput');
$classMethods = $reflectionClass->getMethods();
$methodMatch = 'as'.ucwords(strtolower($outputFormat));
foreach($classMethods as $method){
if($method->name==$methodMatch){ $allowedFormat=true; }
}
return $allowedFormat;
}
/**
* Abstraction method to get things to the right place
*
* @param array $executionData Results from test run
* @param string $outputFormat Requested output format
*/
public function output($executionData,$outputFormat)
{
$methodName = 'as'.strtolower(ucwords($outputFormat));
return self::$methodName($executionData);
}
/**
* Output the data array natively (default)
*
* @param array $outputData Output data
* @return array $outputData
*/
public static function asArray($outputData)
{
return $outputData;
}
/**
* Parse output and return as a CSV file (comma-delimited)
*
* @param array $outputData Output data array
* @return string $csvLines String containing newline-delimited, CSV formatted-lines
*/
public static function asCsv($outputData)
{
// loop through the array levels and built strings
$allLines=array();
foreach($outputData as $testKey => $test){
$testClass = $testKey;
foreach($test as $methodKey => $method){
$testLines=array();
$testMethod = $methodKey;
foreach($method as $actionKey => $action){
$testLines['class'] = $testClass;
$testLines['method'] =$testMethod;
$testLines['actionType'] = $actionKey;
$testLines['status'] = $action[0];
$testLines['message']= $action[1];
$allLines[]='"'.implode('","',$testLines).'"';
}
}
}
return implode("\n",$allLines);
}
/**
* Parse output data and return as XML string
*
* @param array $outputData Output data array
* @return void
*/
public static function asXml($outputData)
{
return 'XML output formatting not yet implemented';
}
/**
* Parse output and return as a JSON string
*
* @param array $outputData Output data array
* @return void
*/
public static function asJson($outputData)
{
return json_encode($outputData);
}
/**
* Write the output data into a file - checks for permissions too
*
* @param string $fullPath Full path, including filename, to write to
* @param string $outputData Text data to write to the file
* @return void
* @throws Exception
*/
public static function writeToFile($fullPath,$outputData)
{
if(is_file($fullPath)){
throw new Exception('File "'.$fullPath.'" exists! Please choose another filename.');
}
$directoryPath = substr($fullPath,0,strrpos($fullPath,'/'));
if($directoryResource = opendir($directoryPath)){
file_put_contents($fullPath,$outputData);
}else{
throw new Exception('Cannot write to location: '.$directoryPath);
}
}
}
?>