Xcos MVC: fix the adaptor-local parameters getters 73/15173/9
Paul Bignier [Fri, 5 Sep 2014 10:25:27 +0000 (12:25 +0200)]
 * fix all the adapters to let Block.tst PASS.
 * 'gui' Block property setter fixed

Change-Id: I6f0c25df41c16746b9ab24f06c837789ae401cf6

scilab/modules/scicos/src/cpp/model/Block.hxx
scilab/modules/scicos/src/cpp/view_scilab/BlockAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/DiagramAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/GraphicsAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/ParamsAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/ports_management.hxx
scilab/modules/scicos/tests/unit_tests/model/Block.dia.ref [new file with mode: 0644]
scilab/modules/scicos/tests/unit_tests/model/Block.tst [new file with mode: 0644]

index 9fa8f80..4200edf 100644 (file)
@@ -235,12 +235,12 @@ private:
 
     update_status_t setInterfaceFunction(const std::string& fun)
     {
-        if (fun == this->interfaceFunction)
+        if (fun == interfaceFunction)
         {
             return NO_CHANGES;
         }
 
-        this->interfaceFunction = interfaceFunction;
+        interfaceFunction = fun;
         return SUCCESS;
     }
 
index 48f5905..2c5ba90 100644 (file)
@@ -160,7 +160,7 @@ std::wstring BlockAdapter::getShortTypeStr()
 
 types::InternalType* BlockAdapter::getDocContent() const
 {
-    return doc_content;
+    return doc_content->clone();
 }
 
 void BlockAdapter::setDocContent(types::InternalType* v)
index 138e24a..7f77968 100644 (file)
@@ -289,7 +289,7 @@ std::wstring DiagramAdapter::getShortTypeStr()
 
 types::InternalType* DiagramAdapter::getContribContent() const
 {
-    return contrib_content;
+    return contrib_content->clone();
 }
 
 void DiagramAdapter::setContribContent(types::InternalType* v)
index e81ec2e..3925f2f 100644 (file)
@@ -470,17 +470,7 @@ struct style
         std::string style;
         controller.getObjectProperty(adaptee->id(), adaptee->kind(), STYLE, style);
 
-        types::String* o;
-        if (style.empty())
-        {
-            o = new types::String(0, 0);
-        }
-        else
-        {
-            o = new types::String(1, 1);
-            o->set(0, style.data());
-        }
-        return o;
+        return new types::String(style.c_str());
     }
 
     static bool set(GraphicsAdapter& adaptor, types::InternalType* v, Controller& controller)
@@ -553,7 +543,7 @@ GraphicsAdapter::GraphicsAdapter(org_scilab_modules_scicos::model::Block* o) :
         property<GraphicsAdapter>::add_property(L"style", &style::get, &style::set);
     }
 
-    gr_i_content = new types::List();
+    gr_i_content = types::Double::Empty();
 }
 
 GraphicsAdapter::~GraphicsAdapter()
@@ -573,7 +563,7 @@ std::wstring GraphicsAdapter::getShortTypeStr()
 
 types::InternalType* GraphicsAdapter::getGrIContent() const
 {
-    return gr_i_content;
+    return gr_i_content->clone();
 }
 
 void GraphicsAdapter::setGrIContent(types::InternalType* v)
index baad6ef..764d1f1 100644 (file)
@@ -351,7 +351,7 @@ std::wstring ParamsAdapter::getShortTypeStr()
 
 types::InternalType* ParamsAdapter::getDocContent() const
 {
-    return doc_content;
+    return doc_content->clone();
 }
 
 void ParamsAdapter::setDocContent(types::InternalType* v)
index 84586e9..3fc0dcf 100644 (file)
@@ -66,10 +66,10 @@ types::InternalType* get_ports_property(const Adaptor& adaptor, object_propertie
         }
         case DATATYPE_TYPE:
             datatypeIndex++;
-        // no break
+            // no break
         case DATATYPE_COLS:
             datatypeIndex++;
-        // no break
+            // no break
         case DATATYPE_ROWS:
         {
             datatypeIndex++;
@@ -158,10 +158,6 @@ bool set_ports_property(const Adaptor& adaptor, object_properties_t port_kind, C
     if (v->getType() == types::InternalType::ScilabString)
     {
         types::String* current = v->getAs<types::String>();
-        if (current->getSize() != ids.size())
-        {
-            return false;
-        }
 
         // Translate identifiers: shared variables
         int i = 0;
@@ -173,7 +169,16 @@ bool set_ports_property(const Adaptor& adaptor, object_properties_t port_kind, C
             {
                 for (std::vector<ScicosID>::iterator it = ids.begin(); it != ids.end(); ++it, ++i)
                 {
-                    char* c_str = wide_string_to_UTF8(current->get(i));
+                    char* c_str = NULL;
+                    if (i >= current->getSize())
+                    {
+                        // If the input isn't large enough, fill each port with empty strings
+                        c_str = wide_string_to_UTF8(L"");
+                    }
+                    else
+                    {
+                        c_str = wide_string_to_UTF8(current->get(i));
+                    }
                     controller.setObjectProperty(*it, PORT, p, std::string(c_str));
                     FREE(c_str);
                 }
@@ -181,6 +186,11 @@ bool set_ports_property(const Adaptor& adaptor, object_properties_t port_kind, C
             }
             case IMPLICIT:
             {
+                if (current->getSize() != ids.size())
+                {
+                    return false;
+                }
+
                 std::wstring E = L"E";
                 std::wstring I = L"I";
                 for (std::vector<ScicosID>::iterator it = ids.begin(); it != ids.end(); ++it, ++i)
@@ -239,10 +249,10 @@ bool set_ports_property(const Adaptor& adaptor, object_properties_t port_kind, C
 
             case DATATYPE_TYPE:
                 datatypeIndex++;
-            // no break
+                // no break
             case DATATYPE_COLS:
                 datatypeIndex++;
-            // no break
+                // no break
             case DATATYPE_ROWS:
             {
                 datatypeIndex++;
@@ -279,8 +289,16 @@ bool set_ports_property(const Adaptor& adaptor, object_properties_t port_kind, C
     return false;
 }
 
+/**
+ * Fill \a newPorts with \a d values checking content if possible.
+ *
+ * \param newPorts new ports children's index or value to be filled
+ * \param children all object in the current layer (diagram or superblock)
+ * \param d the C-array values to set
+ * \return true on success, false otherwise
+ */
 template<typename Adaptor, object_properties_t p>
-bool fillNewPorts(std::vector<int>& newPorts, const std::vector<ScicosID>& children, double* d)
+inline bool fillNewPorts(std::vector<int>& newPorts, const std::vector<ScicosID>& children, double* d)
 {
     for (std::vector<int>::iterator it = newPorts.begin(); it != newPorts.end(); ++it, ++d)
     {
@@ -298,16 +316,35 @@ bool fillNewPorts(std::vector<int>& newPorts, const std::vector<ScicosID>& child
     return true;
 }
 
+/**
+ * Set the port value
+ *
+ * \param oldPort the old port object ID
+ * \param newPort new port children's index or value
+ * \param controller current transaction instance
+ * \param children all object in the current layer (diagram or superblock)
+ * \param deletedObjects trash used to delete objects
+ */
 template<typename Adaptor, object_properties_t p>
-void updateNewPort(ScicosID oldPort, int newPort, Controller& controller,
-                   std::vector<ScicosID>& children, std::vector<ScicosID>& deletedObjects)
+inline void updateNewPort(ScicosID oldPort, int newPort, Controller& controller,
+                          std::vector<ScicosID>& children, std::vector<ScicosID>& deletedObjects)
 {
     if (p == CONNECTED_SIGNALS)
     {
         // update signal and manage deconnection, using newPort as a children index
         ScicosID oldSignal;
         controller.getObjectProperty(oldPort, PORT, CONNECTED_SIGNALS, oldSignal);
-        ScicosID newSignal = children[newPort];
+
+        ScicosID newSignal;
+        if (children.size() > 0)
+        {
+            newSignal = children[newPort];
+        }
+        else
+        {
+            newSignal = 0;
+        }
+
         if (oldSignal != newSignal)
         {
             // disconnect the old link
@@ -340,10 +377,10 @@ void updateNewPort(ScicosID oldPort, int newPort, Controller& controller,
         {
             case DATATYPE_TYPE:
                 datatypeIndex++;
-            // no break
+                // no break
             case DATATYPE_COLS:
                 datatypeIndex++;
-            // no break
+                // no break
             case DATATYPE_ROWS:
             {
                 datatypeIndex++;
@@ -359,14 +396,23 @@ void updateNewPort(ScicosID oldPort, int newPort, Controller& controller,
     }
 }
 
+/**
+ * Add a new port
+ *
+ * \param newPortID the old port object ID
+ * \param newPort new port children's index or value
+ * \param children all object in the current layer (diagram or superblock)
+ * \param controller current transaction instance
+ * \return true on success, false otherwise
+ */
 template<typename Adaptor, object_properties_t p>
-bool addNewPort(ScicosID newPortID, int newPort, const std::vector<ScicosID>& children,        Controller& controller)
+inline bool addNewPort(ScicosID newPortID, int newPort, const std::vector<ScicosID>& children, Controller& controller)
 {
     bool status = true;
     if (p == CONNECTED_SIGNALS)
     {
         // set the connected signal if applicable, using newPort as a children index
-        if (newPort != 0)
+        if (children.size() > 0)
         {
             ScicosID signal = children[newPort];
             status = controller.setObjectProperty(newPortID, PORT, CONNECTED_SIGNALS, signal) != FAIL;
@@ -380,10 +426,10 @@ bool addNewPort(ScicosID newPortID, int newPort, const std::vector<ScicosID>& ch
         {
             case DATATYPE_TYPE:
                 datatypeIndex++;
-            // no break
+                // no break
             case DATATYPE_COLS:
                 datatypeIndex++;
-            // no break
+                // no break
             case DATATYPE_ROWS:
             {
                 datatypeIndex++;
diff --git a/scilab/modules/scicos/tests/unit_tests/model/Block.dia.ref b/scilab/modules/scicos/tests/unit_tests/model/Block.dia.ref
new file mode 100644 (file)
index 0000000..78d3d08
--- /dev/null
@@ -0,0 +1,399 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+loadXcosLibs();
+// Allocate a summation block
+o = BIGSOM_f("define")
+objectCreated( 1 , BLOCK )
+propertyUpdated( 1 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 1 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , EXPRS ) : SUCCESS
+objectCreated( 2 , PORT )
+propertyUpdated( 2 , PORT , SOURCE_BLOCK ) : SUCCESS
+objectCreated( 3 , PORT )
+propertyUpdated( 3 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 1 , BLOCK , INPUTS ) : SUCCESS
+objectCreated( 4 , PORT )
+propertyUpdated( 4 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 1 , BLOCK , OUTPUTS ) : SUCCESS
+propertyUpdated( 1 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 2 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 3 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 4 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 2 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 3 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 4 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_FUNCTION_NAME ) : SUCCESS
+propertyUpdated( 1 , BLOCK , SIM_FUNCTION_API ) : SUCCESS
+propertyUpdated( 3 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 2 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 4 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 1 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 1 , BLOCK , IPAR ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_BLOCKTYPE ) : SUCCESS
+propertyUpdated( 1 , BLOCK , SIM_DEP_UT ) : SUCCESS
+propertyUpdated( 1 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , UID ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , INTERFACE_FUNCTION ) : SUCCESS
+o  = 
+scicos_Block type :
+  graphics
+  model
+  gui
+  doc
+o.graphics
+ ans  =
+orig = [0,0]
+sz = [2,3]
+flip = %t
+theta = 0
+exprs = "[1;1]"
+pin = [0;0]
+pout = 0
+pein = []
+peout = []
+gr_i = []
+id = ""
+in_implicit = ["E";"E"]
+out_implicit = "E"
+in_style = ["";""]
+out_style = ""
+in_label = ["";""]
+out_label = ""
+style = ""
+o.model
+ ans  =
+sum type: 2
+in = [-1;-1]
+in2 = [1;1]
+intyp = [1;1]
+out = -1
+out2 = 1
+outtyp = 1
+evtin = []
+evtout = []
+state = []
+dstate = []
+odstate = list()
+rpar = [1;1]
+ipar = []
+opar = list()
+blocktype = "c"
+firing = []
+dep_ut = [%t,%f]
+label = ""
+nzcross = 0
+nmode = 0
+equations = list()
+uid = ""
+o.gui
+ ans  =
+ BIGSOM_f
+o.doc
+ ans  =
+()
+// Set the block to itself without making any modification
+// (scicos_getvalue returns BIGSOM_f default parameters)
+p = funcprot();
+funcprot(0);
+function [ok,sgn,exprs] = scicos_getvalue(title, field, Type, exprs)
+    ok = %t;
+    sgn = [1;1];
+    exprs = sci2exp(sgn);
+endfunction
+o = BIGSOM_f("set", o)
+propertyUpdated( 1 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , EXPRS ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 2 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 3 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 4 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 2 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 3 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 4 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_FUNCTION_NAME ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 3 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , IPAR ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , UID ) : NO_CHANGES
+o  = 
+scicos_Block type :
+  graphics
+  model
+  gui
+  doc
+o.graphics
+ ans  =
+orig = [0,0]
+sz = [2,3]
+flip = %t
+theta = 0
+exprs = "[1;1]"
+pin = [0;0]
+pout = 0
+pein = []
+peout = []
+gr_i = []
+id = ""
+in_implicit = ["E";"E"]
+out_implicit = "E"
+in_style = ["";""]
+out_style = ""
+in_label = ["";""]
+out_label = ""
+style = ""
+o.model
+ ans  =
+sum type: 2
+in = [-1;-1]
+in2 = [1;1]
+intyp = [1;1]
+out = -1
+out2 = 1
+outtyp = 1
+evtin = []
+evtout = []
+state = []
+dstate = []
+odstate = list()
+rpar = [1;1]
+ipar = []
+opar = list()
+blocktype = "c"
+firing = []
+dep_ut = [%t,%f]
+label = ""
+nzcross = 0
+nmode = 0
+equations = list()
+uid = ""
+// Now use scicos_getvalue to modify the 'exprs' and 'rpar' fields to "[-1;-1]" and '[-1;-1]'
+function [ok,sgn,exprs] = scicos_getvalue(title, field, Type, exprs)
+    ok = %t;
+    sgn = [-1;-1];
+    exprs = sci2exp(sgn);
+endfunction
+o = BIGSOM_f("set", o)
+propertyUpdated( 1 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , EXPRS ) : SUCCESS
+propertyUpdated( 1 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 2 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 3 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 4 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 2 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 3 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 4 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_FUNCTION_NAME ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 3 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 1 , BLOCK , IPAR ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , UID ) : NO_CHANGES
+o  = 
+scicos_Block type :
+  graphics
+  model
+  gui
+  doc
+o.graphics
+ ans  =
+orig = [0,0]
+sz = [2,3]
+flip = %t
+theta = 0
+exprs = "[-1;-1]"
+pin = [0;0]
+pout = 0
+pein = []
+peout = []
+gr_i = []
+id = ""
+in_implicit = ["E";"E"]
+out_implicit = "E"
+in_style = ["";""]
+out_style = ""
+in_label = ["";""]
+out_label = ""
+style = ""
+o.model
+ ans  =
+sum type: 2
+in = [-1;-1]
+in2 = [1;1]
+intyp = [1;1]
+out = -1
+out2 = 1
+outtyp = 1
+evtin = []
+evtout = []
+state = []
+dstate = []
+odstate = list()
+rpar = [-1;-1]
+ipar = []
+opar = list()
+blocktype = "c"
+firing = []
+dep_ut = [%t,%f]
+label = ""
+nzcross = 0
+nmode = 0
+equations = list()
+uid = ""
+// Now modify the block's entry port #2 to '1' and add a new one with value '1'
+function [ok,sgn,exprs] = scicos_getvalue(title, field, Type, exprs)
+    ok = %t;
+    sgn = [-1;1;1];
+    exprs = sci2exp(sgn);
+endfunction
+funcprot(p);
+o = BIGSOM_f("set", o)
+propertyUpdated( 1 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , EXPRS ) : SUCCESS
+objectCreated( 5 , PORT )
+propertyUpdated( 5 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 1 , BLOCK , INPUTS ) : SUCCESS
+propertyUpdated( 1 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 2 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 3 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 5 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 4 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 2 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 5 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 3 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 5 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 4 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_FUNCTION_NAME ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 5 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 3 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 2 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 4 , PORT , DATATYPE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 1 , BLOCK , IPAR ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 1 , BLOCK , UID ) : NO_CHANGES
+o  = 
+scicos_Block type :
+  graphics
+  model
+  gui
+  doc
+o.graphics
+ ans  =
+orig = [0,0]
+sz = [2,3]
+flip = %t
+theta = 0
+exprs = "[-1;1;1]"
+pin = [0;0;0]
+pout = 0
+pein = []
+peout = []
+gr_i = []
+id = ""
+in_implicit = ["E";"E";"E"]
+out_implicit = "E"
+in_style = ["";"";""]
+out_style = ""
+in_label = ["";"";""]
+out_label = ""
+style = ""
+o.model
+ ans  =
+sum type: 2
+in = [-1;-1;-1]
+in2 = [1;1;1]
+intyp = [1;1;1]
+out = -1
+out2 = 1
+outtyp = 1
+evtin = []
+evtout = []
+state = []
+dstate = []
+odstate = list()
+rpar = [-1;1;1]
+ipar = []
+opar = list()
+blocktype = "c"
+firing = []
+dep_ut = [%t,%f]
+label = ""
+nzcross = 0
+nmode = 0
+equations = list()
+uid = ""
diff --git a/scilab/modules/scicos/tests/unit_tests/model/Block.tst b/scilab/modules/scicos/tests/unit_tests/model/Block.tst
new file mode 100644 (file)
index 0000000..1929a9a
--- /dev/null
@@ -0,0 +1,52 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+loadXcosLibs();
+
+// Allocate a summation block
+o = BIGSOM_f("define")
+o.graphics
+o.model
+o.gui
+o.doc
+
+// Set the block to itself without making any modification
+// (scicos_getvalue returns BIGSOM_f default parameters)
+p = funcprot();
+funcprot(0);
+function [ok,sgn,exprs] = scicos_getvalue(title, field, Type, exprs)
+    ok = %t;
+    sgn = [1;1];
+    exprs = sci2exp(sgn);
+endfunction
+
+o = BIGSOM_f("set", o)
+o.graphics
+o.model
+
+// Now use scicos_getvalue to modify the 'exprs' and 'rpar' fields to "[-1;-1]" and '[-1;-1]'
+function [ok,sgn,exprs] = scicos_getvalue(title, field, Type, exprs)
+    ok = %t;
+    sgn = [-1;-1];
+    exprs = sci2exp(sgn);
+endfunction
+
+o = BIGSOM_f("set", o)
+o.graphics
+o.model
+
+// Now modify the block's entry port #2 to '1' and add a new one with value '1'
+function [ok,sgn,exprs] = scicos_getvalue(title, field, Type, exprs)
+    ok = %t;
+    sgn = [-1;1;1];
+    exprs = sci2exp(sgn);
+endfunction
+funcprot(p);
+
+o = BIGSOM_f("set", o)
+o.graphics
+o.model