changeset 655:bb971f25eb42

Path validator fixed to be correctly multiplatform
author Jiri Vanek <jvanek@redhat.com>
date Tue, 26 Mar 2013 13:51:26 +0100
parents 4112d14feddf
children 1c26ce1e1cb3
files ChangeLog netx/net/sourceforge/jnlp/config/BasicValueValidators.java tests/netx/unit/net/sourceforge/jnlp/config/BasicValueValidatorsTests.java
diffstat 3 files changed, 152 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Mar 25 15:15:06 2013 +0100
+++ b/ChangeLog	Tue Mar 26 13:51:26 2013 +0100
@@ -1,3 +1,12 @@
+2013-03-26  Jiri Vanek <jvanek@redhat.com>
+
+	Path validator fixed to be correctly multiplatform
+	* netx/net/sourceforge/jnlp/config/BasicValueValidators.java :
+	(FilePathValidator) now check absolute file by File.isAbsolute() instead
+	of by plain "/".
+	* tests/netx/unit/net/sourceforge/jnlp/config/BasicValueValidatorsTests.java :
+	New file to test new functionality.
+
 2013-03-25  Jana Fabrikova <jfabriko@redhat.com>
 
 	* tests/reproducers/simple/JavascriptFuncReturn/testcases/JavascriptFuncReturnTest.java
--- a/netx/net/sourceforge/jnlp/config/BasicValueValidators.java	Mon Mar 25 15:15:06 2013 +0100
+++ b/netx/net/sourceforge/jnlp/config/BasicValueValidators.java	Tue Mar 26 13:51:26 2013 +0100
@@ -37,6 +37,7 @@
 
 package net.sourceforge.jnlp.config;
 
+import java.io.File;
 import static net.sourceforge.jnlp.runtime.Translator.R;
 
 import java.net.URL;
@@ -86,8 +87,9 @@
      * Checks if a value is a valid file path (not a valid file!). The actual
      * file may or may not exist
      */
-    private static class FilePathValidator implements ValueValidator {
-
+    //package private for testing purposes
+    static class FilePathValidator implements ValueValidator {
+        
         @Override
         public void validate(Object value) throws IllegalArgumentException {
             if (value == null) {
@@ -97,13 +99,15 @@
             Object possibleValue = value;
 
             if (!(possibleValue instanceof String)) {
-                throw new IllegalArgumentException();
+                throw new IllegalArgumentException("Value should be string!");
             }
 
             String possibleFile = (String) possibleValue;
-            if (!(possibleFile.startsWith("/"))) {
-                throw new IllegalArgumentException();
-            }
+            
+                boolean absolute = new File(possibleFile).isAbsolute();
+                if (!absolute) {
+                    throw new IllegalArgumentException("File must be absolute");
+                }
 
         }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/netx/unit/net/sourceforge/jnlp/config/BasicValueValidatorsTests.java	Tue Mar 26 13:51:26 2013 +0100
@@ -0,0 +1,133 @@
+/* 
+Copyright (C) 2013 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 2.
+
+IcedTea is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+ */
+package net.sourceforge.jnlp.config;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class BasicValueValidatorsTests {
+
+    //decomposed for testing
+    public static boolean canBeWindows(String s) {
+        return s.toLowerCase().contains("windows");
+    }
+
+    /**
+     * guess the OS of user, if legal, or windows
+     * @return
+     */
+    public static boolean isOsWindows() {
+        return canBeWindows(System.getProperty("os.name"));
+    }
+    private static final BasicValueValidators.FilePathValidator pv = new BasicValueValidators.FilePathValidator();
+    private final String neverLegal = "aaa/bb/cc";
+    private final String winLegal = "C:\\aaa\\bb\\cc";
+    private final String linuxLegal = "/aaa/bb/cc";
+
+    @Test
+    public void testWindowsDetction() {
+        Assert.assertTrue(canBeWindows("blah windows blah"));
+        Assert.assertTrue(canBeWindows("blah Windows blah"));
+        Assert.assertTrue(canBeWindows("  WINDOWS 7"));
+        Assert.assertFalse(canBeWindows("blah windy miracle blah"));
+        Assert.assertFalse(canBeWindows("blah wind blah"));
+        Assert.assertTrue(canBeWindows("windows"));
+        Assert.assertFalse(canBeWindows("linux"));
+        Assert.assertFalse(canBeWindows("blah mac blah"));
+        Assert.assertFalse(canBeWindows("blah solaris blah"));
+    }
+
+    @Test
+    public void testLinuxAbsoluteFilePathValidator() {
+        if (!isOsWindows()) {
+            Exception ex = null;
+            try {
+                pv.validate(linuxLegal);
+            } catch (Exception eex) {
+                ex = eex;
+            }
+            Assert.assertTrue(ex == null);
+
+            ex = null;
+            try {
+                pv.validate(neverLegal);
+            } catch (Exception eex) {
+                ex = eex;
+            }
+            Assert.assertTrue(ex instanceof IllegalArgumentException);
+
+
+            ex = null;
+            try {
+                pv.validate(winLegal);
+            } catch (Exception eex) {
+                ex = eex;
+            }
+            Assert.assertTrue(ex instanceof IllegalArgumentException);
+        }
+    }
+
+    @Test
+    public void testWindowsAbsoluteFilePathValidator() {
+        if (isOsWindows()) {
+            Exception ex = null;
+            try {
+                pv.validate(winLegal);
+            } catch (Exception eex) {
+                ex = eex;
+            }
+            Assert.assertTrue(ex == null);
+
+            ex = null;
+            try {
+                pv.validate(neverLegal);
+            } catch (Exception eex) {
+                ex = eex;
+            }
+            Assert.assertTrue(ex instanceof IllegalArgumentException);
+
+
+            ex = null;
+            try {
+                pv.validate(linuxLegal);
+            } catch (Exception eex) {
+                ex = eex;
+            }
+            Assert.assertTrue(ex instanceof IllegalArgumentException);
+        }
+    }
+}