@@ -14,9 +14,9 @@ class PatchTest extends \PHPUnit_Framework_TestCase
14
14
* @param mixed $data
15
15
* @param array $patchData
16
16
* @param mixed $expectedData
17
- * @dataProvider providerValidPatch_Result
17
+ * @dataProvider providerValidSpecPatch_Result
18
18
*/
19
- public function testApply_ValidPatch_Applied ($ data , array $ patchData , $ expectedData )
19
+ public function testApply_ValidSpecPatch_Applied ($ data , array $ patchData , $ expectedData )
20
20
{
21
21
$ dataWriter = new RawSelectableWriter ($ data );
22
22
$ patchDataReader = new RawSelectableReader ($ patchData );
@@ -25,124 +25,100 @@ public function testApply_ValidPatch_Applied($data, array $patchData, $expectedD
25
25
}
26
26
27
27
28
- public function providerValidPatch_Result (): array
28
+ public function providerValidSpecPatch_Result (): array
29
29
{
30
- return [
31
- 'A.1 ' => [
32
- (object ) ['foo ' => 'bar ' ],
33
- [
34
- (object ) ['op ' => 'add ' , 'path ' => '/baz ' , 'value ' => 'qux ' ],
35
- ],
36
- (object ) ['baz ' => 'qux ' , 'foo ' => 'bar ' ],
37
- ],
38
- 'A.2 ' => [
39
- (object ) ['foo ' => ['bar ' , 'baz ' ]],
40
- [
41
- (object ) ['op ' => 'add ' , 'path ' => '/foo/1 ' , 'value ' => 'qux ' ],
42
- ],
43
- (object ) ['foo ' => ['bar ' , 'qux ' , 'baz ' ]],
44
- ],
45
- 'A.3 ' => [
46
- (object ) ['baz ' => 'qux ' , 'foo ' => 'bar ' ],
47
- [
48
- (object ) ['op ' => 'remove ' , 'path ' => '/baz ' ],
49
- ],
50
- (object ) ['foo ' => 'bar ' ],
51
- ],
52
- 'A.4 ' => [
53
- (object ) ['foo ' => ['bar ' , 'qux ' , 'baz ' ]],
54
- [
55
- (object ) ['op ' => 'remove ' , 'path ' => '/foo/1 ' ],
56
- ],
57
- (object ) ['foo ' => ['bar ' , 'baz ' ]],
58
- ],
59
- 'A.5 ' => [
60
- (object ) ['baz ' => 'qux ' , 'foo ' => 'bar ' ],
61
- [
62
- (object ) ['op ' => 'replace ' , 'path ' => '/baz ' , 'value ' => 'boo ' ],
63
- ],
64
- (object ) ['baz ' => 'boo ' , 'foo ' => 'bar ' ],
65
- ],
66
- 'A.6 ' => [
67
- (object ) [
68
- 'foo ' => (object ) ['bar ' => 'baz ' , 'waldo ' => 'fred ' ],
69
- 'qux ' => (object ) ['corge ' => 'grault ' ],
70
- ],
71
- [
72
- (object ) ['op ' => 'move ' , 'from ' => '/foo/waldo ' , 'path ' => '/qux/thud ' ],
73
- ],
74
- (object ) [
75
- 'foo ' => (object ) ['bar ' => 'baz ' ],
76
- 'qux ' => (object ) ['corge ' => 'grault ' , 'thud ' => 'fred ' ],
77
- ],
78
- ],
79
- 'A.7 ' => [
80
- (object ) ['foo ' => ['all ' , 'grass ' , 'cows ' , 'eat ' ]],
81
- [
82
- (object ) ['op ' => 'move ' , 'from ' => '/foo/1 ' , 'path ' => '/foo/3 ' ],
83
- ],
84
- (object ) ['foo ' => ['all ' , 'cows ' , 'eat ' , 'grass ' ]],
85
- ],
86
- 'A.10 ' => [
87
- (object ) ['foo ' => 'bar ' ],
88
- [
89
- (object ) ['op ' => 'add ' , 'path ' => '/child ' , 'value ' => (object ) ['grandchild ' => (object ) []]],
90
- ],
91
- (object ) ['foo ' => 'bar ' , 'child ' => (object ) ['grandchild ' => (object ) []]],
92
- ],
93
- 'A.11 ' => [
94
- (object ) ['foo ' => 'bar ' ],
95
- [
96
- (object ) ['op ' => 'add ' , 'path ' => '/baz ' , 'value ' => 'qux ' , 'xyz ' => 123 ],
97
- ],
98
- (object ) ['foo ' => 'bar ' , 'baz ' => 'qux ' ],
99
- ],
100
- 'A.16 ' => [
101
- (object ) ['foo ' => ['bar ' ]],
102
- [
103
- (object ) ['op ' => 'add ' , 'path ' => '/foo/- ' , 'value ' => ['abc ' , 'def ' ]],
104
- ],
105
- (object ) ['foo ' => ['bar ' , ['abc ' , 'def ' ]]],
106
- ],
107
- ];
30
+ $ dataSetList = [];
31
+ foreach ($ this ->getSpecTests () as $ testInfo ) {
32
+ if (isset ($ testInfo ->error ) || !isset ($ testInfo ->expected )) {
33
+ continue ;
34
+ }
35
+ $ dataSet = [
36
+ $ testInfo ->doc ,
37
+ $ testInfo ->patch ,
38
+ $ testInfo ->expected ,
39
+ ];
40
+ if (isset ($ testInfo ->comment )) {
41
+ $ dataSetList [$ testInfo ->comment ] = $ dataSet ;
42
+ } else {
43
+ $ dataSetList [] = $ dataSet ;
44
+ }
45
+ }
46
+ return $ dataSetList ;
108
47
}
109
48
110
49
111
50
/**
112
- * @param $data
51
+ * @param mixed $data
113
52
* @param array $patchData
114
- * @dataProvider providerValidPatch_Success
53
+ * @dataProvider providerInvalidPatch
54
+ * @expectedException \Exception
115
55
*/
116
- public function testApply_ValidPatch_Success ($ data , array $ patchData )
56
+ public function testApply_InvalidSpecPatch_ExceptionThrown ($ data , array $ patchData )
117
57
{
118
58
$ dataWriter = new RawSelectableWriter ($ data );
119
59
$ patchDataReader = new RawSelectableReader ($ patchData );
120
60
(new Patch ($ dataWriter ))->apply ($ patchDataReader );
121
61
}
122
62
123
63
124
- public function providerValidPatch_Success (): array
64
+ public function providerInvalidSpecPatch (): array
125
65
{
126
- return [
127
- 'A.8 ' => [
128
- (object ) ['baz ' => 'qux ' , 'foo ' => ["a " , 2 , "c " ]],
129
- [
130
- (object ) ['op ' => 'test ' , 'path ' => '/baz ' , 'value ' => 'qux ' ],
131
- (object ) ['op ' => 'test ' , 'path ' => '/foo/1 ' , 'value ' => 2 ],
132
- ],
133
- ],
134
- 'A.14 ' => [
135
- (object ) ['/ ' => 9 , '~1 ' => 10 ],
136
- [
137
- (object ) ['op ' => 'test ' , 'path ' => '/~01 ' , 'value ' => 10 ],
138
- ],
139
- ],
140
- ];
66
+ $ dataSetList = [];
67
+ foreach ($ this ->getSpecTests () as $ testInfo ) {
68
+ if (!isset ($ testInfo ->error )) {
69
+ continue ;
70
+ }
71
+ $ dataSet = [
72
+ $ testInfo ->doc ,
73
+ $ testInfo ->patch ,
74
+ ];
75
+ if (isset ($ testInfo ->comment )) {
76
+ $ dataSetList [$ testInfo ->comment ] = $ dataSet ;
77
+ } else {
78
+ $ dataSetList [] = $ dataSet ;
79
+ }
80
+ }
81
+ return $ dataSetList ;
141
82
}
142
83
84
+ /**
85
+ * @param mixed $data
86
+ * @param array $patchData
87
+ * @param mixed $expectedData
88
+ * @dataProvider providerValidPatch_Result
89
+ */
90
+ public function testApply_ValidPatch_Applied ($ data , array $ patchData , $ expectedData )
91
+ {
92
+ $ dataWriter = new RawSelectableWriter ($ data );
93
+ $ patchDataReader = new RawSelectableReader ($ patchData );
94
+ (new Patch ($ dataWriter ))->apply ($ patchDataReader );
95
+ $ this ->assertEquals ($ expectedData , $ data );
96
+ }
97
+
98
+
99
+ public function providerValidPatch_Result (): array
100
+ {
101
+ $ dataSetList = [];
102
+ foreach ($ this ->getTests () as $ testInfo ) {
103
+ if (isset ($ testInfo ->error ) || !isset ($ testInfo ->expected )) {
104
+ continue ;
105
+ }
106
+ $ dataSet = [
107
+ $ testInfo ->doc ,
108
+ $ testInfo ->patch ,
109
+ $ testInfo ->expected ,
110
+ ];
111
+ if (isset ($ testInfo ->comment )) {
112
+ $ dataSetList [$ testInfo ->comment ] = $ dataSet ;
113
+ } else {
114
+ $ dataSetList [] = $ dataSet ;
115
+ }
116
+ }
117
+ return $ dataSetList ;
118
+ }
143
119
144
120
/**
145
- * @param $data
121
+ * @param mixed $data
146
122
* @param array $patchData
147
123
* @dataProvider providerInvalidPatch
148
124
* @expectedException \Exception
@@ -157,26 +133,46 @@ public function testApply_InvalidPatch_ExceptionThrown($data, array $patchData)
157
133
158
134
public function providerInvalidPatch (): array
159
135
{
160
- return [
161
- 'A.9 ' => [
162
- (object ) ['baz ' => 'qux ' ],
163
- [
164
- (object ) ['op ' => 'test ' , 'path ' => '/baz ' , 'value ' => 'bar ' ],
165
- ],
166
- ],
167
- 'A.12 ' => [
168
- (object ) ['foo ' => 'bar ' ],
169
- [
170
- (object ) ['op ' => 'add ' , 'path ' => '/baz/bat ' , 'value ' => 'qux ' ],
171
- ],
172
- ],
173
- // A.13 cannot be tested.
174
- 'A.14 ' => [
175
- (object ) ['/ ' => 9 , '~1 ' => 10 ],
176
- [
177
- (object ) ['op ' => 'test ' , 'path ' => '/~01 ' , 'value ' => "10 " ],
178
- ],
179
- ],
180
- ];
136
+ $ dataSetList = [];
137
+ foreach ($ this ->getTests () as $ testInfo ) {
138
+ if (!isset ($ testInfo ->error )) {
139
+ continue ;
140
+ }
141
+ $ dataSet = [
142
+ $ testInfo ->doc ,
143
+ $ testInfo ->patch ,
144
+ ];
145
+ if (isset ($ testInfo ->comment )) {
146
+ $ dataSetList [$ testInfo ->comment ] = $ dataSet ;
147
+ } else {
148
+ $ dataSetList [] = $ dataSet ;
149
+ }
150
+ }
151
+ return $ dataSetList ;
152
+ }
153
+
154
+
155
+ private function getSpecTests (): array
156
+ {
157
+ $ testsFile = dirname (realpath (PHPUNIT_COMPOSER_INSTALL )) . "/../tests/data/spec_tests.json " ;
158
+ return $ this ->getTestInfoList ($ testsFile );
159
+ }
160
+
161
+
162
+ private function getTests (): array
163
+ {
164
+ $ testsFile = dirname (realpath (PHPUNIT_COMPOSER_INSTALL )) . "/../tests/data//tests.json " ;
165
+ return $ this ->getTestInfoList ($ testsFile );
166
+ }
167
+
168
+
169
+ private function getTestInfoList ($ fileName ): array
170
+ {
171
+ $ testInfoListJSON = file_get_contents ($ fileName );
172
+ $ testInfoList = json_decode ($ testInfoListJSON );
173
+ $ isNotDisabledTest = function (\stdClass $ testInfo ) {
174
+ return !(isset ($ testInfo ->disabled ) && $ testInfo ->disabled );
175
+ };
176
+ return array_filter ($ testInfoList , $ isNotDisabledTest );
181
177
}
182
178
}
0 commit comments