@@ -799,6 +799,89 @@ public function testSymlinkCreatesTargetDirectoryIfItDoesNotExist()
799
799
$ this ->assertEquals ($ file , readlink ($ link2 ));
800
800
}
801
801
802
+ public function testReadLink ()
803
+ {
804
+ $ this ->markAsSkippedIfSymlinkIsMissing ();
805
+
806
+ $ file = $ this ->workspace .DIRECTORY_SEPARATOR .'file ' ;
807
+ $ link1 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'link ' ;
808
+ $ link2 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'link ' ;
809
+
810
+ $ linkDot = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'.. ' .DIRECTORY_SEPARATOR .'link ' ;
811
+ $ link3 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'link_dot ' ;
812
+
813
+ touch ($ file );
814
+
815
+ $ this ->filesystem ->symlink ($ file , $ link1 );
816
+ $ this ->filesystem ->symlink ($ link1 , $ link2 );
817
+ $ this ->filesystem ->symlink ($ linkDot , $ link3 );
818
+
819
+ $ this ->assertTrue (is_link ($ link1 ));
820
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ link1 ));
821
+ $ this ->assertTrue (is_link ($ link2 ));
822
+ $ this ->assertEquals ($ link1 , $ this ->filesystem ->readlink ($ link2 ));
823
+ $ this ->assertTrue (is_link ($ link3 ));
824
+ $ this ->assertEquals ($ linkDot , $ this ->filesystem ->readlink ($ link3 ));
825
+ }
826
+
827
+ /**
828
+ * @expectedException \Symfony\Component\Filesystem\Exception\IOException
829
+ */
830
+ public function testReadLinkNotLink ()
831
+ {
832
+ $ file = $ this ->workspace .DIRECTORY_SEPARATOR .'file ' ;
833
+ touch ($ file );
834
+ $ this ->filesystem ->readlink ($ file );
835
+ }
836
+
837
+ /**
838
+ * @expectedException \Symfony\Component\Filesystem\Exception\IOException
839
+ */
840
+ public function testReadLinkFails ()
841
+ {
842
+ $ this ->filesystem ->readlink ($ this ->workspace .DIRECTORY_SEPARATOR .'invalid ' );
843
+ }
844
+
845
+ public function testReadLinkCanonicalized ()
846
+ {
847
+ $ this ->markAsSkippedIfSymlinkIsMissing ();
848
+
849
+ $ file = $ this ->workspace .DIRECTORY_SEPARATOR .'file ' ;
850
+ $ link1 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'link ' ;
851
+ $ link2 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'link ' ;
852
+
853
+ $ linkDot = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'.. ' .DIRECTORY_SEPARATOR .'link ' ;
854
+ $ link3 = $ this ->workspace .DIRECTORY_SEPARATOR .'dir ' .DIRECTORY_SEPARATOR .'subdir ' .DIRECTORY_SEPARATOR .'link_dot ' ;
855
+
856
+ touch ($ file );
857
+
858
+ $ this ->filesystem ->symlink ($ file , $ link1 );
859
+ $ this ->filesystem ->symlink ($ link1 , $ link2 );
860
+ $ this ->filesystem ->symlink ($ linkDot , $ link3 );
861
+
862
+ $ this ->assertTrue (is_link ($ link1 ));
863
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ link1 , true ));
864
+ $ this ->assertTrue (is_link ($ link2 ));
865
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ link2 , true ));
866
+ $ this ->assertTrue (is_link ($ link3 ));
867
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ link3 , true ));
868
+ }
869
+
870
+ public function testReadLinkNotLinkCanonicalized ()
871
+ {
872
+ $ file = $ this ->workspace .DIRECTORY_SEPARATOR .'file ' ;
873
+ touch ($ file );
874
+ $ this ->assertEquals ($ file , $ this ->filesystem ->readlink ($ file , true ));
875
+ }
876
+
877
+ /**
878
+ * @expectedException \Symfony\Component\Filesystem\Exception\IOException
879
+ */
880
+ public function testReadLinkFailsCanonicalized ()
881
+ {
882
+ $ this ->filesystem ->readlink ($ this ->workspace .DIRECTORY_SEPARATOR .'invalid ' , true );
883
+ }
884
+
802
885
/**
803
886
* @dataProvider providePathsForMakePathRelative
804
887
*/
0 commit comments