@@ -1032,4 +1032,40 @@ public String getPathInfo() {
10321032 env .releaseIndexSearchers ();
10331033 IOUtils .removeRecursive (env .getDataRootFile ().toPath ());
10341034 }
1035+
1036+ @ ParameterizedTest
1037+ @ ValueSource (strings = {"main.c" , "nonexistent" })
1038+ void testIsUnreadableFalse (String fileName ) {
1039+ HttpServletRequest req = new DummyHttpServletRequest () {
1040+ @ Override
1041+ public String getPathInfo () {
1042+ return "mercurial/" + fileName ;
1043+ }
1044+ };
1045+
1046+ PageConfig cfg = PageConfig .get (req );
1047+ assertFalse (cfg .isUnreadable ());
1048+ }
1049+
1050+ // File.setReadable() does not change the behavior of File.canRead() on Windows.
1051+ @ EnabledOnOs ({OS .LINUX , OS .MAC , OS .SOLARIS , OS .AIX , OS .OTHER })
1052+ @ Test
1053+ void testIsUnreadableTrue () {
1054+ final String relativePath = Path .of ("mercurial" , "Makefile" ).toString ();
1055+ HttpServletRequest req = new DummyHttpServletRequest () {
1056+ @ Override
1057+ public String getPathInfo () {
1058+ return relativePath ;
1059+ }
1060+ };
1061+
1062+ final File file = new File (RuntimeEnvironment .getInstance ().getSourceRootPath (), relativePath );
1063+ assertTrue (file .exists ());
1064+ assertTrue (file .setReadable (false , false ));
1065+ PageConfig cfg = PageConfig .get (req );
1066+ assertTrue (cfg .isUnreadable ());
1067+
1068+ // cleanup
1069+ assertTrue (file .setReadable (true , false ));
1070+ }
10351071}
0 commit comments