Xcos: xcos fail with a good error reporting on wrong diagram type 32/3032/3
Clément DAVID [Wed, 26 Jan 2011 11:04:04 +0000 (12:04 +0100)]
Bug: 7953
Change-Id: I14ee17ba7a3347b99f697978bb265450fa147d60

scilab/CHANGES_5.3.X
scilab/modules/xcos/src/java/org/scilab/modules/xcos/Xcos.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/H5RWHandler.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/ScicosFormatException.java
scilab/modules/xcos/tests/nonreg_tests/bug_7953.dia.ref [new file with mode: 0644]
scilab/modules/xcos/tests/nonreg_tests/bug_7953.tst [new file with mode: 0644]

index dffc592..b859bf7 100644 (file)
@@ -105,6 +105,8 @@ Xcos:
 * bug 7639 fixed - Generating code for scilab function block was failing with
                    a syntax error message.
 
+* bug 7953 fixed - No error message were printed when the diagram is invalid.
+
 * bug 8042 fixed - After a region to superblock action, the ports were wrongly
                    placed.
 
index 3fa70d9..5e0c4ea 100644 (file)
@@ -454,12 +454,25 @@ public final class Xcos {
                /* load scicos libraries (macros) */
                InterpreterManagement.requestScilabExec("loadScicosLibs();");
                
-               SwingUtilities.invokeLater(new Runnable() {
-                       @Override
-                       public void run() {
-                               instance.open(filename);
+               try {
+                       SwingUtilities.invokeAndWait(new Runnable() {
+                               @Override
+                               public void run() {
+                                       instance.open(filename);
+                               }
+                       });
+               } catch (final InterruptedException e) {
+                       LOG.error(e);
+               } catch (final InvocationTargetException e) {
+                       Throwable throwable = e;
+                       String firstMessage = null;
+                       while (throwable != null) {
+                               firstMessage = throwable.getLocalizedMessage();
+                               throwable = throwable.getCause();
                        }
-               });
+                       
+                       throw new RuntimeException(firstMessage, e);
+               }
        }
 
        /**
index 04d4662..7aa553f 100644 (file)
@@ -206,10 +206,11 @@ public class H5RWHandler {
                                                + ((VersionMismatchException) e).getWrongVersion()
                                                + "\n" + XcosMessages.TRY_TO_CONTINUE);
                        } else {
-                               LOG.error(e);
+                               // rethrow
+                               throw new RuntimeException(e);
                        }
                } catch (HDF5Exception e) {
-                       LOG.error(e);
+                       throw new RuntimeException(e);
                } finally {
                        diagram.getModel().endUpdate();
                }
index 6bec8b1..af66160 100644 (file)
@@ -14,10 +14,15 @@ package org.scilab.modules.xcos.io.scicos;
 
 import java.util.List;
 
+import org.scilab.modules.localization.Messages;
+
 /**
  * Default exception for a Xcos - Scicos communication
  */
 public abstract class ScicosFormatException extends Exception {
+       private static final String UNABLE_TO_DECODE_INVALID_DATA = Messages.gettext("Unable to decode \"%s\" : invalid data.");
+       private static final String UNABLE_TO_DECODE__INVALID_FIELD = Messages.gettext("Unable to decode \"%s.%s\" : invalid field.");
+       
        /**
         * Used when the {@link Element} cannot be used to decode/encode the instance.
         */
@@ -37,6 +42,7 @@ public abstract class ScicosFormatException extends Exception {
         * Used when the expected data cannot be casted safely.
         */
        public static class WrongTypeException extends ScicosFormatException {
+
                /**
                 * Default cstr
                 */
@@ -63,7 +69,7 @@ public abstract class ScicosFormatException extends Exception {
                 * @param index the buggy index
                 */
                public WrongTypeException(List<String> fields, int index) {
-                       super(String.format("Unable to decode \"%s.%s\" : invalid field.", fields.get(0), fields.get(index)));
+                       super(String.format(UNABLE_TO_DECODE__INVALID_FIELD, fields.get(0), fields.get(index)));
                }
        }
        
@@ -71,6 +77,7 @@ public abstract class ScicosFormatException extends Exception {
         * Used when the expected data are not well formatted.
         */
        public static class WrongStructureException extends ScicosFormatException {
+               
                /**
                 * Default constructor
                 */
@@ -81,7 +88,7 @@ public abstract class ScicosFormatException extends Exception {
                 * @param fields the erroneous fields
                 */
                public WrongStructureException(List<String> fields) {
-                       String.format("Unable to decode \"%s\" : invalid data.", fields.get(0));
+                       super(String.format(UNABLE_TO_DECODE_INVALID_DATA, fields.get(0)));
                }
        }
        
diff --git a/scilab/modules/xcos/tests/nonreg_tests/bug_7953.dia.ref b/scilab/modules/xcos/tests/nonreg_tests/bug_7953.dia.ref
new file mode 100644 (file)
index 0000000..1b287cb
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011 - DIGITEO - Clément DAVID
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH XCOS -->
+//
+// <-- Non-regression test for bug 7953 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7953
+//
+// <-- Short Description -->
+// No error message were printed when the diagram is invalid.
+try
+       xcos(mlist("diagram", "plop"));
+catch, end
+[str, n] = lasterror();
+if n <> 999 then bugmes();quit;end
+if strstr(str, "xcos:") <> str bugmes();quit;end
diff --git a/scilab/modules/xcos/tests/nonreg_tests/bug_7953.tst b/scilab/modules/xcos/tests/nonreg_tests/bug_7953.tst
new file mode 100644 (file)
index 0000000..c4b07e6
--- /dev/null
@@ -0,0 +1,24 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011 - DIGITEO - Clément DAVID
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH XCOS -->
+//
+// <-- Non-regression test for bug 7953 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7953
+//
+// <-- Short Description -->
+// No error message were printed when the diagram is invalid.
+
+try
+       xcos(mlist("diagram", "plop"));
+catch, end
+[str, n] = lasterror();
+if n <> 999 then pause, end
+if strstr(str, "xcos:") <> str pause, end
+