@@ -1406,6 +1406,81 @@ public function testDumpFileWithZlibScheme()
14061406$ this ->assertSame ('bar ' ,file_get_contents ($ filename ));
14071407 }
14081408
1409+ public function testAppendToFile ()
1410+ {
1411+ $ filename =$ this ->workspace .DIRECTORY_SEPARATOR .'foo ' .DIRECTORY_SEPARATOR .'bar.txt ' ;
1412+
1413+ // skip mode check on Windows
1414+ if ('\\' !==DIRECTORY_SEPARATOR ) {
1415+ $ oldMask =umask (0002 );
1416+ }
1417+
1418+ $ this ->filesystem ->dumpFile ($ filename ,'foo ' );
1419+
1420+ $ this ->filesystem ->appendToFile ($ filename ,'bar ' );
1421+
1422+ $ this ->assertFileExists ($ filename );
1423+ $ this ->assertSame ('foobar ' ,file_get_contents ($ filename ));
1424+
1425+ // skip mode check on Windows
1426+ if ('\\' !==DIRECTORY_SEPARATOR ) {
1427+ $ this ->assertFilePermissions (664 ,$ filename ,'The written file should keep the same permissions as before. ' );
1428+ umask ($ oldMask );
1429+ }
1430+ }
1431+
1432+ public function testAppendToFileWithScheme ()
1433+ {
1434+ if (defined ('HHVM_VERSION ' )) {
1435+ $ this ->markTestSkipped ('HHVM does not handle the file:// scheme correctly ' );
1436+ }
1437+
1438+ $ scheme ='file:// ' ;
1439+ $ filename =$ scheme .$ this ->workspace .DIRECTORY_SEPARATOR .'foo ' .DIRECTORY_SEPARATOR .'baz.txt ' ;
1440+ $ this ->filesystem ->dumpFile ($ filename ,'foo ' );
1441+
1442+ $ this ->filesystem ->appendToFile ($ filename ,'bar ' );
1443+
1444+ $ this ->assertFileExists ($ filename );
1445+ $ this ->assertSame ('foobar ' ,file_get_contents ($ filename ));
1446+ }
1447+
1448+ public function testAppendToFileWithZlibScheme ()
1449+ {
1450+ $ scheme ='compress.zlib:// ' ;
1451+ $ filename =$ this ->workspace .DIRECTORY_SEPARATOR .'foo ' .DIRECTORY_SEPARATOR .'baz.txt ' ;
1452+ $ this ->filesystem ->dumpFile ($ filename ,'foo ' );
1453+
1454+ // Zlib stat uses file:// wrapper so remove it
1455+ $ this ->assertSame ('foo ' ,file_get_contents (str_replace ($ scheme ,'' ,$ filename )));
1456+
1457+ $ this ->filesystem ->appendToFile ($ filename ,'bar ' );
1458+
1459+ $ this ->assertFileExists ($ filename );
1460+ $ this ->assertSame ('foobar ' ,file_get_contents ($ filename ));
1461+ }
1462+
1463+ public function testAppendToFileCreateTheFileIfNotExists ()
1464+ {
1465+ $ filename =$ this ->workspace .DIRECTORY_SEPARATOR .'foo ' .DIRECTORY_SEPARATOR .'bar.txt ' ;
1466+
1467+ // skip mode check on Windows
1468+ if ('\\' !==DIRECTORY_SEPARATOR ) {
1469+ $ oldMask =umask (0002 );
1470+ }
1471+
1472+ $ this ->filesystem ->appendToFile ($ filename ,'bar ' );
1473+
1474+ // skip mode check on Windows
1475+ if ('\\' !==DIRECTORY_SEPARATOR ) {
1476+ $ this ->assertFilePermissions (664 ,$ filename );
1477+ umask ($ oldMask );
1478+ }
1479+
1480+ $ this ->assertFileExists ($ filename );
1481+ $ this ->assertSame ('bar ' ,file_get_contents ($ filename ));
1482+ }
1483+
14091484public function testCopyShouldKeepExecutionPermission ()
14101485 {
14111486$ this ->markAsSkippedIfChmodIsMissing ();