@@ -957,6 +957,89 @@ public function testLinkWithSameTarget()
957
957
$ this ->assertEquals (fileinode ($ file ), fileinode ($ link ));
958
958
}
959
959
960
+ public function testReadLink ()
961
+ {
962
+ $ this ->markAsSkippedIfSymlinkIsMissing ();
963
+
964
+ $ file = $ this ->workspace .DIRECTORY_SEPARATOR .'file ' ;
965
+ $ link1 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'link ' ;
966
+ $ link2 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'link ' ;
967
+
968
+ $ linkDot = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'.. ' .DIRECTORY_SEPARATOR .'link ' ;
969
+ $ link3 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'link_dot ' ;
970
+
971
+ touch ($ file );
972
+
973
+ $ this ->filesystem ->symlink ($ file , $ link1 );
974
+ $ this ->filesystem ->symlink ($ link1 , $ link2 );
975
+ $ this ->filesystem ->symlink ($ linkDot , $ link3 );
976
+
977
+ $ this ->assertTrue (is_link ($ link1 ));
978
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ link1 ));
979
+ $ this ->assertTrue (is_link ($ link2 ));
980
+ $ this ->assertEquals ($ link1 , $ this ->filesystem ->readlink ($ link2 ));
981
+ $ this ->assertTrue (is_link ($ link3 ));
982
+ $ this ->assertEquals ($ linkDot , $ this ->filesystem ->readlink ($ link3 ));
983
+ }
984
+
985
+ /**
986
+ * @expectedException \Symfony\Component\Filesystem\Exception\IOException
987
+ */
988
+ public function testReadLinkNotLink ()
989
+ {
990
+ $ file = $ this ->workspace .DIRECTORY_SEPARATOR .'file ' ;
991
+ touch ($ file );
992
+ $ this ->filesystem ->readlink ($ file );
993
+ }
994
+
995
+ /**
996
+ * @expectedException \Symfony\Component\Filesystem\Exception\IOException
997
+ */
998
+ public function testReadLinkFails ()
999
+ {
1000
+ $ this ->filesystem ->readlink ($ this ->workspace .DIRECTORY_SEPARATOR .'invalid ' );
1001
+ }
1002
+
1003
+ public function testReadLinkCanonicalized ()
1004
+ {
1005
+ $ this ->markAsSkippedIfSymlinkIsMissing ();
1006
+
1007
+ $ file = $ this ->workspace .DIRECTORY_SEPARATOR .'file ' ;
1008
+ $ link1 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'link ' ;
1009
+ $ link2 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'link ' ;
1010
+
1011
+ $ linkDot = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'.. ' .DIRECTORY_SEPARATOR .'link ' ;
1012
+ $ link3 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'link_dot ' ;
1013
+
1014
+ touch ($ file );
1015
+
1016
+ $ this ->filesystem ->symlink ($ file , $ link1 );
1017
+ $ this ->filesystem ->symlink ($ link1 , $ link2 );
1018
+ $ this ->filesystem ->symlink ($ linkDot , $ link3 );
1019
+
1020
+ $ this ->assertTrue (is_link ($ link1 ));
1021
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ link1 , true ));
1022
+ $ this ->assertTrue (is_link ($ link2 ));
1023
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ link2 , true ));
1024
+ $ this ->assertTrue (is_link ($ link3 ));
1025
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ link3 , true ));
1026
+ }
1027
+
1028
+ public function testReadLinkNotLinkCanonicalized ()
1029
+ {
1030
+ $ file = $ this ->workspace .DIRECTORY_SEPARATOR .'file ' ;
1031
+ touch ($ file );
1032
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ file , true ));
1033
+ }
1034
+
1035
+ /**
1036
+ * @expectedException \Symfony\Component\Filesystem\Exception\IOException
1037
+ */
1038
+ public function testReadLinkFailsCanonicalized ()
1039
+ {
1040
+ $ this ->filesystem ->readlink ($ this ->workspace .DIRECTORY_SEPARATOR .'invalid ' , true );
1041
+ }
1042
+
960
1043
/**
961
1044
* @dataProvider providePathsForMakePathRelative
962
1045
*/
0 commit comments