atomsCheckModule function added. (SEP 76) 12/5612/4
Allan CORNET [Fri, 9 Dec 2011 13:15:29 +0000 (14:15 +0100)]
This function checks a given list of ATOMS modules (install, load, test, remove)

Change-Id: I0d088d4ff3042682f663e50cb6a52241b6d151b6

SEP/INDEX
SEP/SEP_076_atomsCheckModule.odt [new file with mode: 0644]
scilab/CHANGES_5.4.X
scilab/modules/atoms/help/en_US/atomsCheckModule.xml [new file with mode: 0644]
scilab/modules/atoms/macros/atomsCheckModule.sci [new file with mode: 0644]

index cd718f8..c4d6b62 100644 (file)
--- a/SEP/INDEX
+++ b/SEP/INDEX
@@ -72,3 +72,4 @@ SEP #072: Extend fullpath to manage matrix of string as input argument
 SEP #073: New convolution functions
 SEP #074: Atoms configuration files management
 SEP #075: New dec2base function
+SEP #076: atomsCheckModule function
diff --git a/SEP/SEP_076_atomsCheckModule.odt b/SEP/SEP_076_atomsCheckModule.odt
new file mode 100644 (file)
index 0000000..15dbe5f
Binary files /dev/null and b/SEP/SEP_076_atomsCheckModule.odt differ
index cefb3ab..a60abfa 100644 (file)
@@ -991,6 +991,9 @@ Graphics
 ATOMS
 ======
 
+* atomsCheckModule function added. (SEP #76)
+  This function checks a given list of ATOMS modules (install, load, test, remove)
+
 * Bug #5380 fixed - atomsShow() output was broken (separators were not aligned).
 
 * Bug #8648 fixed - The tarball was not deleted when a module was removed (SEP #71).
diff --git a/scilab/modules/atoms/help/en_US/atomsCheckModule.xml b/scilab/modules/atoms/help/en_US/atomsCheckModule.xml
new file mode 100644 (file)
index 0000000..f7b1f8e
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 DIGITEO - Allan CORNET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ -->
+<refentry version="5.0-subset Scilab" xml:id="atomsCheckModule" xml:lang="en"
+          xmlns="http://docbook.org/ns/docbook"
+          xmlns:xlink="http://www.w3.org/1999/xlink"
+          xmlns:svg="http://www.w3.org/2000/svg"
+          xmlns:ns3="http://www.w3.org/1999/xhtml"
+          xmlns:mml="http://www.w3.org/1998/Math/MathML"
+          xmlns:db="http://docbook.org/ns/docbook">
+  <info>
+    <pubdate>$LastChangedDate$</pubdate>
+  </info>
+  
+  <refnamediv>
+    <refname>atomsCheckModule</refname>
+    
+    <refpurpose>Check the given list of ATOMS modules</refpurpose>
+  </refnamediv>
+  
+  <refsynopsisdiv>
+    <title>Calling Sequence</title>
+    
+    <synopsis>
+      isok = atomsCheckModule(modulenames)
+      isok = atomsCheckModule(modulenames, bVerbose)
+    </synopsis>
+  </refsynopsisdiv>
+  
+  <refsection>
+    <title>Arguments</title>
+    
+    <variablelist>
+      <varlistentry>
+        <term>modulenames</term>
+        
+        <listitem>
+          <para>mxn matrix of strings: the names of the modules to check</para>
+        </listitem>
+      </varlistentry>
+      
+      <varlistentry>
+        <term>bVerbose</term>
+        
+        <listitem>
+          <para>a 1-by-1 matrix of booleans, set to true to display
+            messages
+          </para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsection>
+  
+  <refsection>
+    <title>Description</title>
+    
+    <para>
+      <literal>atomsCheckModule</literal> Installs, loads, launches the tests
+      and removes all the modules listed in <literal>modulenames</literal>.
+    </para>
+  </refsection>
+  
+  <refsection>
+    <title>Example</title>
+    
+    <programlisting role="example">  atomsCheckModule("scibench")
+      atomsCheckModule(["apifun" "scibench"],%t)
+    </programlisting>
+  </refsection>
+  
+  <refsection role="see also">
+    <title>See Also</title>
+    
+    <simplelist type="inline">
+      <member>
+        <link linkend="atomsTest">atomsTest</link>
+      </member>
+      
+      <member>
+        <link linkend="test_run">test_run</link>
+      </member>
+      
+      <member>
+        <link linkend="assert_overview">assert</link>
+      </member>
+    </simplelist>
+  </refsection>
+  <refsection>
+    <title>History</title>
+    <revhistory>
+      <revision>
+        <revnumber>5.4.0</revnumber>
+        <revremark>This function was added in Scilab 5.4.0</revremark>
+      </revision>
+    </revhistory>
+  </refsection>
+</refentry>
diff --git a/scilab/modules/atoms/macros/atomsCheckModule.sci b/scilab/modules/atoms/macros/atomsCheckModule.sci
new file mode 100644 (file)
index 0000000..8d0c362
--- /dev/null
@@ -0,0 +1,149 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011 - DIGITEO - Michael BAUDIN
+// Copyright (C) 2011 - DIGITEO - Allan CORNET
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+function isok = atomsCheckModule(modulenames, verbose)
+  // Check the given list of ATOMS modules.
+  //
+  // Calling Sequence
+  //   isok = atomsCheckModule(modulenames, verbose)
+  //
+  // Parameters
+  //   names : a matrix of strings, the names of the modules to check
+  //   verbose : a 1-by-1 matrix of booleans, set to true to display messages
+  //
+  // Description
+  //   Installs, load, launch the tests and remove all the modules
+  //   in modulenames.
+  //
+  // Examples
+  //   atomsCheckModule("scibench", %t)
+  //   atomsCheckModule(["apifun" "scibench"],%t)
+  //
+
+  tabsp = "  * ";
+  if ~isdef('verbose') then
+    verbose = %t;
+  end
+  //============================================================================
+  function isok = atomsCheckModuleInstall(modulename, verbose)
+    isok = %f;
+    if verbose then
+      mprintf(gettext("\n%s Installing ...\n"), tabsp);
+    end
+    
+    if execstr("r = [];r = atomsInstall(modulename, ''user'');", "errcatch") == 0 then
+      isok = (r <> []);
+      if isok & verbose then
+        disp(r);
+      end
+    end
+  endfunction
+  //============================================================================
+  function isok = atomsCheckModuleLoad(modulename, verbose)
+    isok = %f;
+    if verbose then
+      mprintf(gettext("\n%s Loading ...\n"), tabsp);
+    end
+      
+    if execstr("r = [];r = atomsLoad(modulename);", "errcatch") <> 0 then
+      isok = %f;
+    else
+      isok = (r <> []);
+      if isok & verbose then
+        disp(r);
+      end
+    end
+  endfunction
+  //============================================================================
+  function isok = atomsCheckModuleTest(modulename, verbose)
+    isok = %f;
+    if verbose then
+      mprintf(gettext("\n%s Testing ...\n"), tabsp);
+    end
+    
+    isok = atomsTest(modulename);
+  endfunction
+  //============================================================================
+  function isok = atomsCheckModuleRemove(modulename, verbose)
+    isok = %f;
+    if verbose then
+      mprintf(gettext("\n%s Removing ...\n"), tabsp);
+    end
+    if execstr("r = atomsRemove(modulename, ''user'', %t);", "errcatch") <> 0 then
+      isok = %f;
+    else
+      isok = (r == []);
+    end
+  endfunction
+  //============================================================================
+  isok = %f;
+  
+  if type(modulenames) <> 10 then
+    error(msprintf(gettext("%s: Wrong type for input argument #%d: a matrix of string expected.\n"), "atomsCheckModule", 1));
+  end
+
+  if type(verbose) <> 4 then
+    error(msprintf(gettext("%s: Wrong type for input argument #%d: a boolean expected.\n"), "atomsCheckModule", 2));
+  end
+  
+  if size(verbose, '*') <> 1 then
+    error(msprintf(gettext("%s: Wrong size for input argument #%d: a boolean expected.\n"), "atomsCheckModule", 2));
+  end
+
+  nm = size(modulenames, "*");
+  
+  for k = 1:nm
+    modulename = modulenames(k);
+    im = atomsIsInstalled(modulename);
+    if im then
+      error(msprintf(gettext("%s: Module %s is already installed. Please remove it before checking it.\n"), "atomsCheckModule", modulename));
+    end
+  end
+  for k = 1:nm
+    modulename = modulenames(k);
+    r = atomsSearch(modulename);
+    if grep(r(:, 1), modulename)  == [] then
+      error(msprintf(gettext("%s: Module %s does not exist in current repostories.\n"), "atomsCheckModule", modulename));
+    end
+  end  
+  
+  if nm > 1 then
+    u = unique(modulenames);
+    if size(u, '*') <> nm then
+      error(msprintf(gettext("%s: Wrong value(s) for input argument #%d: some unique module names expected.\n"), "atomsCheckModule", 1));
+    end
+  end
+  
+  for k = 1:nm
+    im = atomsIsInstalled(modulename);
+    if im then
+       error(msprintf(gettext("%s: Module %s is already installed. Please remove it before checking it.\n"), "atomsCheckModule", modulename));
+     end
+  end
+
+  if verbose then
+    mprintf(gettext("\nNumber of modules to check: %d\n"), nm);
+  end
+
+  for k = 1:nm
+    modulename = modulenames(k);
+
+    isok(k) = atomsCheckModuleInstall(modulename, verbose);
+    isok(k) = isok(k) & atomsCheckModuleLoad(modulename, verbose);
+    isok(k) = isok(k) & atomsCheckModuleTest(modulename, verbose);
+    isok(k) = isok(k) & atomsCheckModuleRemove(modulename, verbose);
+  end
+  
+  isok = matrix(isok, size(modulenames, 'r'), size(modulenames, 'c'));
+  
+endfunction
+
+