33namespace XBase \Tests ;
44
55use PHPUnit \Framework \TestCase ;
6+ use XBase \Enum \TableType ;
67use XBase \Record ;
78use XBase \Table ;
89use XBase \WritableTable ;
@@ -11,13 +12,18 @@ class WritableTableTest extends TestCase
1112{
1213 const FILEPATH = __DIR__ .'/Resources/cbr_072019b1.dbf ' ;
1314
14- public function testSet ()
15+ private function duplicateFile ( string $ file ): string
1516 {
16- $ info = pathinfo (self :: FILEPATH );
17+ $ info = pathinfo ($ file );
1718 $ newName = uniqid ($ info ['filename ' ]);
1819 $ copyTo = "{$ info ['dirname ' ]}/ $ newName. {$ info ['extension ' ]}" ;
19- self ::assertTrue (copy (self ::FILEPATH , $ copyTo ));
20+ self ::assertTrue (copy ($ file , $ copyTo ));
21+ return $ copyTo ;
22+ }
2023
24+ public function testSet ()
25+ {
26+ $ copyTo = $ this ->duplicateFile (self ::FILEPATH );
2127 try {
2228 $ table = new WritableTable ($ copyTo , null , 'cp866 ' );
2329 $ table ->openWrite ();
@@ -42,11 +48,7 @@ public function testSet()
4248 */
4349 public function testAppendRecord ()
4450 {
45- $ info = pathinfo (self ::FILEPATH );
46- $ newName = uniqid ($ info ['filename ' ]);
47- $ copyTo = "{$ info ['dirname ' ]}/ $ newName. {$ info ['extension ' ]}" ;
48- self ::assertTrue (copy (self ::FILEPATH , $ copyTo ));
49-
51+ $ copyTo = $ this ->duplicateFile (self ::FILEPATH );
5052 try {
5153 $ table = new WritableTable ($ copyTo , null , 'cp866 ' );
5254 $ table ->openWrite ();
@@ -65,6 +67,10 @@ public function testAppendRecord()
6567 $ table ->writeRecord ();
6668 $ table ->close ();
6769
70+ clearstatcache ();
71+ $ expectedSize = $ table ->headerLength + ($ table ->recordCount * $ table ->recordByteLength ); // Last byte must be 0x1A
72+ self ::assertSame ($ expectedSize , filesize ($ copyTo ));
73+
6874 $ table = new Table ($ copyTo , null , 'cp866 ' );
6975 self ::assertEquals (11 , $ table ->getRecordCount ());
7076 $ record = $ table ->pickRecord (10 );
@@ -85,11 +91,7 @@ public function testAppendRecord()
8591
8692 public function testDeleteRecord ()
8793 {
88- $ info = pathinfo (self ::FILEPATH );
89- $ newName = uniqid ($ info ['filename ' ]);
90- $ copyTo = "{$ info ['dirname ' ]}/ $ newName. {$ info ['extension ' ]}" ;
91- self ::assertTrue (copy (self ::FILEPATH , $ copyTo ));
92-
94+ $ copyTo = $ this ->duplicateFile (self ::FILEPATH );
9395 try {
9496 $ table = new WritableTable ($ copyTo , null , 'cp866 ' );
9597 $ table ->openWrite ();
@@ -110,11 +112,7 @@ public function testDeleteRecord()
110112
111113 public function testDeletePackRecord ()
112114 {
113- $ info = pathinfo (self ::FILEPATH );
114- $ newName = uniqid ($ info ['filename ' ]);
115- $ copyTo = "{$ info ['dirname ' ]}/ $ newName. {$ info ['extension ' ]}" ;
116- self ::assertTrue (copy (self ::FILEPATH , $ copyTo ));
117-
115+ $ copyTo = $ this ->duplicateFile (self ::FILEPATH );
118116 try {
119117 $ table = new WritableTable ($ copyTo , null , 'cp866 ' );
120118 $ table ->openWrite ();
@@ -130,4 +128,56 @@ public function testDeletePackRecord()
130128 unlink ($ copyTo );
131129 }
132130 }
131+
132+ public function testIssue78 ()
133+ {
134+ $ fecnacim = date ("m/d/Y " , 86400 );
135+ $ fecingreso = date ("m/d/Y " , 86400 * 2 );
136+
137+ $ copyTo = $ this ->duplicateFile (__DIR__ .'/Resources/socios.dbf ' );
138+ try {
139+ $ table = new WritableTable ($ copyTo );
140+ self ::assertEquals (3 , $ table ->getRecordCount ());
141+ $ table ->openWrite ();
142+ // fill new newRecord
143+ $ newRecord = $ table ->appendRecord ();
144+ $ newRecord ->segsocial = '000000000000 ' ;
145+ $ newRecord ->socio = 'socio ' ;
146+ $ newRecord ->apellido = 'apellido ' ;
147+ $ newRecord ->nombre = 'nombre ' ;
148+ $ newRecord ->fecnacim = $ fecnacim ;
149+ $ newRecord ->fecingreso = $ fecingreso ;
150+ $ newRecord ->sexo = 'M ' ;
151+ $ newRecord ->apartado = '600 ' ;
152+ $ newRecord ->telefonor = '12345678 ' ;
153+ $ newRecord->
email =
'[email protected] ' ;
154+ $ newRecord ->venciced = \DateTime::createFromFormat ("U " , -777859200 );
155+ $ newRecord ->nriesgo = "B " ;
156+ //save
157+ $ table ->writeRecord ();
158+ $ table ->pack ();
159+ $ table ->close ();
160+ unset($ newRecord );
161+
162+ $ table = new Table ($ copyTo );
163+ self ::assertEquals (4 , $ table ->getRecordCount ());
164+ $ record = $ table ->pickRecord (3 );
165+ self ::assertEquals ('000000000000 ' , $ record ->segsocial );
166+ self ::assertSame ('socio ' , $ record ->socio );
167+ self ::assertSame ('apellido ' , $ record ->apellido );
168+ self ::assertSame ('nombre ' , $ record ->nombre );
169+ self ::assertSame (86400 , $ record ->getDate ('fecnacim ' ));
170+ self ::assertSame ($ fecnacim , $ record ->getDateTimeObject ('fecnacim ' )->format ('m/d/Y ' ));
171+ self ::assertSame ($ fecingreso , $ record ->getDateTimeObject ('fecingreso ' )->format ('m/d/Y ' ));
172+ self ::assertSame ('M ' , $ record ->sexo );
173+ self ::assertSame ('600 ' , $ record ->apartado );
174+ self ::assertSame ('12345678 ' , $ record ->telefonor );
175+ self ::
assertSame (
'[email protected] ' ,
$ record->
email );
176+ self ::assertSame ('1945-05-09 ' , $ record ->getDateTimeObject ('venciced ' )->format ('Y-m-d ' ));
177+ self ::assertSame ("B " , $ record ->nriesgo );
178+ $ table ->close ();
179+ } finally {
180+ unlink ($ copyTo );
181+ }
182+ }
133183}
0 commit comments