Salome HOME
CCAR:ajout d'un repertoire de tests elementaires
authoreficas <>
Fri, 4 Nov 2005 17:08:06 +0000 (17:08 +0000)
committereficas <>
Fri, 4 Nov 2005 17:08:06 +0000 (17:08 +0000)
21 files changed:
Ihm/I_JDC.py
Tests/README [new file with mode: 0644]
Tests/compare.py [new file with mode: 0644]
Tests/prefs.py [new file with mode: 0644]
Tests/run.py [new file with mode: 0644]
Tests/testelem/cata1.py [new file with mode: 0644]
Tests/testelem/cata2.py [new file with mode: 0644]
Tests/testelem/cata3.py [new file with mode: 0644]
Tests/testelem/cata5.py [new file with mode: 0644]
Tests/testelem/testbloc1.py [new file with mode: 0644]
Tests/testelem/testfact1.py [new file with mode: 0644]
Tests/testelem/testfact2.py [new file with mode: 0644]
Tests/testelem/testjdc2.py [new file with mode: 0644]
Tests/testelem/testmacro1.py [new file with mode: 0644]
Tests/testelem/testoper1.py [new file with mode: 0644]
Tests/testelem/testposition1.py [new file with mode: 0644]
Tests/testelem/testsimp0.py [new file with mode: 0644]
Tests/testelem/testsimp1.py [new file with mode: 0644]
Tests/testelem/testsimp2.py [new file with mode: 0644]
Tests/testelem/testvalidator1.py [new file with mode: 0644]
Tests/testelem/testvalidator2.py [new file with mode: 0644]

index f4ee8bc6e97b8e06d5eaded00f16f3277b682bfd..dd814447c2b0d805cf337051c09c85aeea5f8581 100644 (file)
@@ -21,7 +21,7 @@
 """
 """
 # Modules Python
-import types,traceback,sys
+import types,traceback,sys,os
 import string,linecache
 
 # Modules Eficas
diff --git a/Tests/README b/Tests/README
new file mode 100644 (file)
index 0000000..eb536e9
--- /dev/null
@@ -0,0 +1,15 @@
+Pour executer tous les tests faire::
+
+   python run.py
+
+Pour executer seulement un module de test (testsimp1.py par exemple), faire::
+
+   python run.py testelem/testsimp1.py
+
+Un test correspond à l'exécution d'une méthode dont le nom commence par test ou Test
+d'une classe dont le nom commence par test ou Test dans un module dont le nom
+commence par test ou Test éventuellement dans un répertoire dont le nom commence
+par test ou Test.
+
+Quelques tests dont le nom commence par futuretest ne sont pas exécutés. Ils identifient 
+des limites actuelles d'Accas.
diff --git a/Tests/compare.py b/Tests/compare.py
new file mode 100644 (file)
index 0000000..f81a49e
--- /dev/null
@@ -0,0 +1,68 @@
+# -*- coding: iso-8859-1 -*-
+import re
+
+BLANKLINE_MARKER = '<BLANKLINE>'
+ELLIPSIS_MARKER = '...'
+True=1
+False=0
+
+def check(want,got):
+    if got == want: return True
+
+    # Replace <BLANKLINE> in want with a blank line.
+    want = re.sub('(?m)^%s\s*?$' % re.escape(BLANKLINE_MARKER),
+                  '', want)
+    # If a line in got contains only spaces, then remove the
+    # spaces.
+    got = re.sub('(?m)^\s*?$', '', got)
+    if got == want:
+       return True
+
+    if _ellipsis_match(want, got): 
+       return True
+
+    return False
+
+def _ellipsis_match(want, got):
+    if ELLIPSIS_MARKER not in want:
+        return want == got
+
+    # Find "the real" strings.
+    ws = want.split(ELLIPSIS_MARKER)
+    assert len(ws) >= 2
+
+    # Deal with exact matches possibly needed at one or both ends.
+    startpos, endpos = 0, len(got)
+    w = ws[0]
+    if w:   # starts with exact match
+        if got.startswith(w):
+            startpos = len(w)
+            del ws[0]
+        else:
+            return False
+    w = ws[-1]
+    if w:   # ends with exact match
+        if got.endswith(w):
+            endpos -= len(w)
+            del ws[-1]
+        else:
+            return False
+
+    if startpos > endpos:
+        # Exact end matches required more characters than we have, as in
+        # _ellipsis_match('aa...aa', 'aaa')
+        return False
+
+    # For the rest, we only need to find the leftmost non-overlapping
+    # match for each piece.  If there's no overall match that way alone,
+    # there's no overall match period.
+    for w in ws:
+        # w may be '' at times, if there are consecutive ellipses, or
+        # due to an ellipsis at the start or end of `want`.  That's OK.
+        # Search for an empty string succeeds, and doesn't change startpos.
+        startp = got.find(w, startpos, endpos)
+        if startp < 0:
+            return False
+        startpos = startp + len(w)
+
+    return True
diff --git a/Tests/prefs.py b/Tests/prefs.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Tests/run.py b/Tests/run.py
new file mode 100644 (file)
index 0000000..e1a5dce
--- /dev/null
@@ -0,0 +1,202 @@
+import sys,types,os
+import sre
+import unittest
+from optparse import OptionParser
+
+sys.path[:0]=[".."]
+
+testMatch = sre.compile(r'^[Tt]est')
+
+class TestSuite(unittest.TestSuite):
+    loader = unittest.defaultTestLoader
+
+    def __init__(self, names=[]):
+        self.names=names
+        super(TestSuite,self).__init__()
+        tests=self.collectTests()
+        self.addTests(tests)
+
+    def _import(self,name):
+        mod = __import__(name,{},{})
+        components = name.split('.')
+        for comp in components[1:]:
+            mod = getattr(mod,comp)
+        return mod
+
+    def collectTests(self):
+        if self.names:
+           entries=self.names
+        else:
+           entries = [ item for item in os.listdir(os.getcwd())
+                        if item.lower().find('test') >= 0 ]
+
+        tests=[]
+        for item in entries:
+            path=os.path.abspath(os.path.join(os.getcwd(),item))
+            if os.path.isfile(item):
+                root, ext = os.path.splitext(item)
+                if ext == '.py':
+                    if root.find('/') >= 0:
+                       dirname, file = os.path.split(path)
+                       root, ext = os.path.splitext(file)
+                       sys.path.insert(0,dirname)
+                       mod=self._import(root)
+                       sys.path.remove(dirname)
+                    else:
+                       mod=self._import(root)
+                    tests.append(ModuleTestSuite(mod))
+            elif os.path.isdir(item):
+                init = os.path.abspath(os.path.join(item,'__init__.py'))
+                if os.path.isfile(init):
+                   package=self._import(item)
+                   if package:
+                      tests.append(TestPackageSuite(package))
+                else:
+                   tests.append(TestDirectorySuite(path))
+        return tests
+
+class TestDirectorySuite(TestSuite):
+    ignore=[]
+    def __init__(self,path):
+        self.path=path
+        super(TestDirectorySuite,self).__init__()
+
+    def collectTests(self):
+        tests=[]
+        if self.path:
+            sys.path.insert(0,self.path)
+            entries = os.listdir(self.path)
+            entries.sort()
+            for item in entries:
+                if (item[0] == '.'
+                    or item in self.ignore
+                    or not testMatch.search(item)):
+                    continue
+                item_path = os.path.abspath(os.path.join(self.path,item))
+                if os.path.isfile(item_path):
+                    root, ext = os.path.splitext(item)
+                    if ext != '.py':
+                        continue
+                    if root.find('/') >= 0:
+                       dirname, file = os.path.split(item_path)
+                       root, ext = os.path.splitext(file)
+                       sys.path.insert(0,dirname)
+                       mod=self._import(root)
+                       sys.path.remove(dirname)
+                    else:
+                       mod=self._import(root)
+                    tests.append(ModuleTestSuite(mod))
+                elif os.path.isdir(item_path):
+                    init = os.path.abspath(os.path.join(item_path,'__init__.py'))
+                    if os.path.isfile(init):
+                        package=self._import(item)
+                        if package:
+                           tests.append(TestPackageSuite(package))
+                    else:
+                        tests.append(TestDirectorySuite(item_path))
+            sys.path.remove(self.path)
+        return tests
+
+class TestPackageSuite(TestDirectorySuite):
+    def __init__(self,package):
+        self.package=package
+        path=os.path.abspath(os.path.dirname(self.package.__file__))
+        super(TestPackageSuite,self).__init__(path)
+
+    def collectTests(self):
+        tests=[]
+        if self.path:
+            sys.path.insert(0,self.path)
+            entries = os.listdir(self.path)
+            entries.sort()
+            for item in entries:
+                if (item[0] == '.'
+                    or item in self.ignore
+                    or not testMatch.search(item)):
+                    continue
+                item_path = os.path.abspath(os.path.join(self.path,item))
+                if os.path.isfile(item_path):
+                    root, ext = os.path.splitext(item)
+                    if ext != '.py':
+                        continue
+                    name="%s.%s" % (self.package.__name__,root)
+                    mod=self._import(name)
+                    tests.append(ModuleTestSuite(mod))
+                elif os.path.isdir(item_path):
+                    init = os.path.abspath(os.path.join(item_path,'__init__.py'))
+                    if os.path.isfile(init):
+                        name="%s.%s" % (self.package.__name__,item)
+                        package=self._import(name)
+                        if package:
+                           tests.append(TestPackageSuite(package))
+                    else:
+                        tests.append(TestDirectorySuite(item_path))
+            sys.path.remove(self.path)
+        return tests
+
+
+class ModuleTestSuite(TestSuite):
+
+    def __init__(self, module):
+        self.module = module
+        super(ModuleTestSuite,self).__init__()
+
+    def collectTests(self):
+        def cmpLineNo(a,b):
+            a_ln = a.func_code.co_firstlineno
+            b_ln = b.func_code.co_firstlineno
+            return cmp(a_ln,b_ln)
+
+        entries = dir(self.module)
+        tests = []
+        func_tests = []
+        for item in entries:
+            test = getattr(self.module,item)
+            if (isinstance(test, (type, types.ClassType))
+                and issubclass(test,unittest.TestCase)):
+                if testMatch.search(item):
+                    [ tests.append(case) for case in
+                      self.loader.loadTestsFromTestCase(test)._tests ]
+            elif callable(test) and testMatch.search(item):
+                # simple functional test
+                func_tests.append(test)
+
+        # run functional tests in the order in which they are defined
+        func_tests.sort(cmpLineNo)
+        [ tests.append(unittest.FunctionTestCase(test))
+          for test in func_tests ]
+        return tests
+
+class TestProgram(unittest.TestProgram):
+    USAGE="""
+"""
+    def __init__(self,testRunner=None):
+        self.testRunner = testRunner
+        self.verbosity = 1
+        self.parseArgs(sys.argv)
+        self.createTests()
+        self.runTests()
+
+    def parseArgs(self,argv):
+        parser = OptionParser(usage=self.USAGE)
+        parser.add_option("-v","--verbose",action="count",
+                          dest="verbosity",default=1,
+                          help="Be more verbose. ")
+
+        options, args = parser.parse_args(argv)
+        self.verbosity = options.verbosity
+
+        if args:
+            self.names = list(args)
+            if self.names[0] == 'run.py':
+                self.names = self.names[1:]
+
+    def createTests(self):
+        self.test = TestSuite(self.names)
+
+
+main = TestProgram
+
+if __name__ == "__main__":
+    main()
+
diff --git a/Tests/testelem/cata1.py b/Tests/testelem/cata1.py
new file mode 100644 (file)
index 0000000..fcbb0a1
--- /dev/null
@@ -0,0 +1,76 @@
+from Accas import SIMP,FACT,OPER,ASSD,AsException,AsType
+
+class CATA:
+   def __init__(self):
+      CONTEXT.unset_current_cata()
+      CONTEXT.set_current_cata(self)
+   def enregistre(self,cmd):
+      pass
+
+cata=CATA()
+
+class concept(ASSD):pass
+
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,
+           a=SIMP(typ='I'),
+           c=SIMP(typ='I',position='global'),
+          )
+
+class concept2(ASSD):pass
+class concept3(ASSD):pass
+
+def op2_prod(TYPE_RESU,**args):
+   if TYPE_RESU == "TRANS" : return concept2
+   if TYPE_RESU == "HARMO" : return concept3
+   raise AsException("type de concept resultat non prevu")
+
+OP2=OPER(nom='OP2',op=2,sd_prod=op2_prod,
+          TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
+        )
+
+def op3_prod(MATR,**args):
+   if AsType(MATR) == concept : return concept2
+   raise AsException("type de concept resultat non prevu")
+
+OP3=OPER(nom='OP3',op=3,sd_prod=op3_prod,
+           MATR    =SIMP(statut='o',typ=concept),
+        )
+
+def op4_prod(MESURE,**args):
+   vale=MESURE['NOM_PARA']
+   if  vale == 'INST'   : return concept
+   raise AsException("type de concept resultat non prevu")
+
+OP4=OPER(nom='OP4',op=4,sd_prod=op4_prod,
+            MESURE  =FACT(statut='o',min=01,max=01,
+                          NOM_PARA  =SIMP(statut='f',typ='TXM',defaut="INST",into=("INST",) ),
+                         )
+        )
+
+def op5_prod(FFT,**args):
+   if (FFT != None)        :
+      vale=FFT.get_child('FONCTION').get_valeur()
+      if (AsType(vale) == concept )  : return concept
+      if (AsType(vale) == concept2) : return concept2
+   raise AsException("type de concept resultat non prevu")
+
+
+OP5=OPER(nom='OP5',op=5,sd_prod=op5_prod,
+         FFT =FACT(statut='f',min=1,max=1,
+                    FONCTION =SIMP(statut='o',typ=(concept,concept2) )
+                   ),
+         )
+
+def op6_prod(FILTRE,**args):
+   vale=FILTRE[0]['MODE']
+   if  AsType(vale) == concept : return concept
+   if  AsType(vale) == concept2 : return concept2
+   raise AsException("type de concept resultat non prevu")
+
+OP6=OPER(nom='OP6',op=6,sd_prod=op6_prod,
+            FILTRE  =FACT(statut='o',min=01,max='**',
+                          MODE  =SIMP(statut='o',typ=(concept,concept2) ),
+                         )
+        )
+
+
diff --git a/Tests/testelem/cata2.py b/Tests/testelem/cata2.py
new file mode 100644 (file)
index 0000000..7a63254
--- /dev/null
@@ -0,0 +1,66 @@
+from Accas import SIMP,FACT,OPER,ASSD,AsException,AsType,CO,MACRO
+
+
+class CATA:
+   def __init__(self):
+      CONTEXT.unset_current_cata()
+      CONTEXT.set_current_cata(self)
+   def enregistre(self,cmd):
+      pass
+
+cata=CATA()
+
+class concept(ASSD):pass
+
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,
+           a=SIMP(typ='I'),
+           c=SIMP(typ='I',position='global'),
+          )
+
+class concept2(ASSD):pass
+class concept3(ASSD):pass
+
+def op2_prod(self,MATR,**args):
+   self.type_sdprod(MATR,concept2)
+   return concept
+
+OP2=MACRO(nom='OP2',op=-2,sd_prod=op2_prod,
+          MATR=SIMP(statut='o',typ=(CO,concept2)),
+        )
+
+def op3_prod(self,MATR,**args):
+   for m in MATR:
+      t=m['CHAM']
+      if t == 'R':self.type_sdprod(m['MM'],concept)
+   return concept
+
+OP3=MACRO(nom='OP3',op=-3,sd_prod=op3_prod,
+          MATR=FACT(statut='f',min=1,max='**',
+                    CHAM=SIMP(statut='o',typ='TXM',into=("R","I"),),
+                    MM=SIMP(statut='o',typ=(CO,concept)),
+                   ),
+          )
+
+
+def op4_prod(self,MATR,**args):
+   if MATR == None :raise AsException("impossible recuperer mot cle facteur par defaut")
+   return concept
+
+OP4=MACRO(nom='OP4',op=-4,sd_prod=op4_prod,
+          MATR=FACT(statut='d',min=1,max='**',
+                    CHAM=SIMP(statut='f',typ='TXM',defaut="R"),
+                   ),
+          )
+OP5=MACRO(nom='OP5',op=-2,sd_prod=op2_prod, MATR=SIMP(statut='o',typ=CO),)
+
+def OP6_ops(self,MATR,**args):
+  """
+  """
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP2(MATR=MATR)
+  return ier
+
+OP6=MACRO(nom='OP6',op=OP6_ops,sd_prod=op2_prod, MATR=SIMP(statut='o',typ=CO),)
+
diff --git a/Tests/testelem/cata3.py b/Tests/testelem/cata3.py
new file mode 100644 (file)
index 0000000..d9c95f2
--- /dev/null
@@ -0,0 +1,83 @@
+from Accas import SIMP,FACT,OPER,ASSD,AsException,AsType,CO,MACRO,JDC_CATA
+
+class concept(ASSD):pass
+
+JdC=JDC_CATA(code="ASTER")
+
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,
+           a=SIMP(typ='I'),
+           c=SIMP(typ='I',position='global'),
+          )
+
+class concept2(ASSD):pass
+class concept3(ASSD):pass
+
+def op2_prod(self,MATR,**args):
+   self.type_sdprod(MATR,concept2)
+   return concept
+
+OP2=MACRO(nom='OP2',op=-2,sd_prod=op2_prod,
+          MATR=SIMP(statut='o',typ=(CO,concept2)),
+        )
+
+def op3_prod(self,MATR,**args):
+   for m in MATR:
+      t=m['CHAM']
+      if t == 'R':self.type_sdprod(m['MM'],concept)
+   return concept
+
+OP3=MACRO(nom='OP3',op=-3,sd_prod=op3_prod,
+          MATR=FACT(statut='f',min=1,max='**',
+                    CHAM=SIMP(statut='o',typ='TXM',into=("R","I"),),
+                    MM=SIMP(statut='o',typ=(CO,concept)),
+                   ),
+          )
+
+
+def op4_prod(self,MATR,**args):
+   if MATR == None :raise AsException("impossible recuperer mot cle facteur par defaut")
+   return concept
+
+OP4=MACRO(nom='OP4',op=-4,sd_prod=op4_prod,
+          MATR=FACT(statut='d',min=1,max='**',
+                    CHAM=SIMP(statut='f',typ='TXM',defaut="R"),
+                   ),
+          )
+
+def INCLUDE_prod(self,UNITE,**args):
+  """ Fonction sd_prod pour la macro include
+  """
+  # Si unite a change on reevalue le fichier associe
+  if not hasattr(self,'unite') or self.unite != UNITE:
+    f,text=self.get_file(unite=UNITE)
+    self.unite=UNITE
+    self.fichier_init = f
+    # on execute le texte fourni dans le contexte forme par
+    # le contexte de l etape pere (global au sens Python)
+    # et le contexte de l etape (local au sens Python)
+    code=compile(text,f,'exec')
+    if self.jdc and self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande
+      # On teste la validite de la commande avec interruption eventuelle
+      cr=self.report()
+      self.parent.cr.add(cr)
+      if not cr.estvide():
+        raise EOFError
+    d={}
+    self.g_context = d
+    self.contexte_fichier_init = d
+    exec code in self.parent.g_context,d
+
+def INCLUDE_context(self,d):
+  """ Fonction op_init pour macro INCLUDE
+  """
+  for k,v in self.g_context.items():
+    d[k]=v
+
+INCLUDE=MACRO(nom="INCLUDE",op=-1,
+             sd_prod=INCLUDE_prod,
+             op_init=INCLUDE_context,
+             #fichier_ini=1,
+              UNITE = SIMP(statut='o',typ='I'),
+);
+
diff --git a/Tests/testelem/cata5.py b/Tests/testelem/cata5.py
new file mode 100644 (file)
index 0000000..aeb2094
--- /dev/null
@@ -0,0 +1,185 @@
+# -*- coding: iso-8859-15 -*-
+from Accas import SIMP,FACT,OPER,ASSD,AsException,AsType,CO,MACRO,JDC_CATA
+JdC=JDC_CATA(code="ASTER")
+
+class concept(ASSD):pass
+class concept2(ASSD):pass
+class concept3(ASSD):pass
+class concept4(concept2):pass
+
+def OP_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  return ier
+
+def op2_prod(self,MATR,**args):
+   self.type_sdprod(MATR,concept2)
+   return concept
+OP1=MACRO(nom='OP1',op=OP_ops,sd_prod=op2_prod, MATR=SIMP(statut='o',typ=CO),)
+OP2=MACRO(nom='OP2',op=OP_ops,sd_prod=op2_prod, MATR=SIMP(statut='o',typ=(CO,concept2)),)
+OP10=MACRO(nom='OP10',op=OP_ops,sd_prod=op2_prod, MATR=SIMP(statut='o',typ=concept2),)
+OP11=MACRO(nom='OP11',op=OP_ops,sd_prod=concept, MATR=SIMP(statut='o',typ=concept2),)
+OP12=MACRO(nom='OP12',op=OP_ops,sd_prod=concept, MATR=SIMP(statut='o',typ=CO),)
+OP13=MACRO(nom='OP13',op=OP_ops,sd_prod=concept, MATR=SIMP(statut='o',typ=(CO,concept2)),)
+
+def op3_prod(self,MATR,**args):
+   for m in MATR:
+      t=m['CHAM']
+      if t == 'R':self.type_sdprod(m['MM'],concept)
+   return concept
+OP3=MACRO(nom='OP3',op=OP_ops,sd_prod=op3_prod,
+          MATR=FACT(statut='f',min=1,max='**',
+                    CHAM=SIMP(statut='o',typ='TXM',into=("R","I"),),
+                    MM=SIMP(statut='o',typ=(CO,concept)),),)
+
+def op4_prod(self,MATR,**args):
+   if MATR == None :raise AsException("impossible recuperer mot cle facteur par defaut")
+   return concept
+OP4=MACRO(nom='OP4',op=OP_ops,sd_prod=op4_prod,
+          MATR=FACT(statut='d',min=1,max='**',
+                    CHAM=SIMP(statut='f',typ='TXM',defaut="R"),),)
+
+OP5=MACRO(nom='OP5',op=OP_ops,sd_prod=op2_prod, MATR=SIMP(statut='o',typ=CO),)
+
+def op6_prod(self,MATR,**args):
+   self.type_sdprod(MATR,concept4)
+   return concept
+def OP6_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP2(MATR=MATR)
+  return ier
+OP6=MACRO(nom='OP6',op=OP6_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),)
+
+def OP7_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP8(MATR=MATR)
+  return ier
+OP7=MACRO(nom='OP7',op=OP7_ops,sd_prod=op2_prod, MATR=SIMP(statut='o',typ=CO),)
+
+OP8=MACRO(nom='OP8',op=OP_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=(CO,concept4)),)
+
+def OP9_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP10(MATR=MATR)
+  return ier
+OP9=MACRO(nom='OP9',op=OP9_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),)
+def OP14_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP1(MATR=MATR)
+  return ier
+OP14=MACRO(nom='OP14',op=OP14_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),)
+def OP15_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP11(MATR=MATR)
+  return ier
+OP15=MACRO(nom='OP15',op=OP15_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),)
+def OP16_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP12(MATR=MATR)
+  return ier
+OP16=MACRO(nom='OP16',op=OP16_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),)
+def OP17_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP13(MATR=MATR)
+  return ier
+OP17=MACRO(nom='OP17',op=OP17_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),)
+
+def OP18_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP6(MATR=MATR)
+  dd=OP2(MATR=MATR)
+  ee=OP11(MATR=MATR)
+  return ier
+OP18=MACRO(nom='OP18',op=OP18_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),)
+OP20=MACRO(nom='OP20',op=OP_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),
+                                               MATRB=SIMP(statut='o',typ=CO),)
+def OP19_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP20(MATR=MATR,MATRB=MATR)
+  return ier
+OP19=MACRO(nom='OP19',op=OP19_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),)
+
+OP21=OPER(nom='OP21',op=1,sd_prod=concept)
+def OP22_ops(self,MATR,**args):
+  ier=0
+  self.set_icmd(1)
+  self.DeclareOut('cc',self.sd)
+  cc=OP21()
+  return ier
+OP22=MACRO(nom='OP22',op=OP22_ops,sd_prod=op6_prod, MATR=SIMP(statut='o',typ=CO),)
+
+import pickle
+import Accas
+
+def poursuite_sdprod(self,PAR_LOT):
+  j=self.jdc
+  #j.UserError=j.codex.error
+  j.actif_status=1
+  j.fico=None
+  j.set_par_lot(PAR_LOT)
+  if hasattr(self,'already_init'):return
+  self.already_init=None
+  context={}
+  try:
+       file=open("pick.1",'r')
+       # Le contexte sauvegardé a été picklé en une seule fois. Il est seulement
+       # possible de le récupérer en bloc. Si cette opération echoue, on ne récupère
+       # aucun objet.
+       context=pickle.load(file)
+       file.close()
+  except:
+       # En cas d'erreur on ignore le contenu du fichier
+       import traceback
+       traceback.print_exc()
+       pass
+  for k,v in context.items():
+    if isinstance(v,Accas.ASSD):
+       self.parent.NommerSdprod(v,k)
+  self.g_context.update(context)
+  return None
+
+def poursuite(self,PAR_LOT):
+  ier=0
+  self.set_icmd(1)
+  return ier
+
+POURSUITE=MACRO(nom='POURSUITE',op=poursuite,sd_prod=poursuite_sdprod,PAR_LOT=SIMP(typ='TXM',defaut='OUI'))
+
+def fin(self):
+  self.set_icmd(1)
+  raise EOFError
+FIN=MACRO(nom='FIN',op=fin,sd_prod=None)
+
+def debut_sdprod(self,PAR_LOT):
+  j=self.jdc
+  #j.UserError=j.codex.error
+  j.actif_status=1
+  j.fico=None
+  j.set_par_lot(PAR_LOT)
+  return None
+
+def debut(self,PAR_LOT):
+  ier=0
+  self.set_icmd(1)
+  return ier
+
+DEBUT=MACRO(nom='DEBUT',op=debut,sd_prod=debut_sdprod,PAR_LOT=SIMP(typ='TXM',defaut='OUI'))
+
diff --git a/Tests/testelem/testbloc1.py b/Tests/testelem/testbloc1.py
new file mode 100644 (file)
index 0000000..abdd135
--- /dev/null
@@ -0,0 +1,174 @@
+# coding=utf-8
+from Accas import SIMP,FACT,BLOC,UN_PARMI,OPER,ASSD,MACRO,_F
+
+import unittest
+
+class CATA:
+   def __init__(self):
+      CONTEXT.unset_current_cata()
+      CONTEXT.set_current_cata(self)
+   def enregistre(self,cmd):
+      pass
+
+cata=CATA()
+
+class concept(ASSD):pass
+
+OP1 = OPER(nom='OP1',op=1, sd_prod=concept, 
+      WWWW=SIMP(statut='o',typ='TXM', position='global'),
+      XXXX=SIMP(typ='TXM', position='global',defaut='XXXX'),
+    traitement=FACT(statut='o',
+      TATA=SIMP(typ='TXM', position='global',defaut='DDD'),
+      TTTT=SIMP(statut='o',typ='TXM', position='global',defaut='EEE'),
+      UUUU=SIMP(typ='TXM', position='global'),
+      VVVV=SIMP(statut='o',typ='TXM', position='global'),
+      regles=( UN_PARMI('TYPE_RAFFINEMENT_LIBRE','TYPE_RAFFINEMENT_UNIFORME'),),
+      TYPE_RAFFINEMENT_LIBRE = FACT(statut='f',
+                RAFFINEMENT   = SIMP(statut='o',typ='TXM', position='global',
+                                     into=("LIBRE","UNIFORME",) ),
+                DERAFFINEMENT = SIMP(statut='o',typ='TXM', position='global',
+                                     into=("LIBRE",),),
+                TOTO=SIMP(statut='o',typ='TXM', position='global'),
+                # un mot cle global facultatif ne sera pas visible tant
+                # qu'il n'aura pas de valeur meme s'il a un defaut
+                TITI=SIMP(typ='TXM', position='global',defaut='BBB'),
+                TUTU=SIMP(statut='o',typ='TXM', position='global',defaut='CCC'),
+      ),
+      b_maj_champ =BLOC(condition="(RAFFINEMENT!=None) or (DERAFFINEMENT!=None)",
+                       NITER =SIMP(statut='o',typ='I',),
+                       NOM_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM',),
+                       FICHIER_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM',),
+      ),
+    ),
+    trait=FACT(statut='o',
+      FFFF=SIMP(typ='TXM',),
+      b_champ =BLOC(condition="WWWW=='WWWW'",
+                    N =SIMP(statut='o',typ='I',),
+      ),
+    ),
+)
+
+MACR_BIDON=OPER(nom="MACR_BIDON",op=None,sd_prod=concept,
+                 reentrant='n',UIinfo={"groupes":("Outils métier",)},fr="",
+                 NOM_CHAM=SIMP(statut='f',typ='TXM',into=('ACCE','DEPL'),position="global"),
+                 RESULTAT=FACT(statut='o',b_acce=BLOC(condition="NOM_CHAM=='ACCE'",
+                                                       VAL1=SIMP(statut='o',typ='R'),
+                                                     ),
+                                VAL2=SIMP(statut='o',typ='R'),
+                              ),
+                )
+import pprint
+
+class TestMCBlocCase(unittest.TestCase):
+
+   def test001(self):
+      """ bloc conditionnel declenche par mot cle global avec defaut
+      """
+      mcf={'TYPE_RAFFINEMENT_LIBRE':{'TOTO':'AAA'}}
+      co=OP1(traitement=mcf,WWWW='WWWW')
+      mcfact=co.etape['traitement']
+      self.assertEqual(mcfact['TYPE_RAFFINEMENT_LIBRE']['DERAFFINEMENT'] , None)
+      dico=mcfact[0].cree_dict_valeurs(mcfact[0].mc_liste)
+      self.assertEqual(dico['DERAFFINEMENT'] , None)
+      self.assertEqual(dico['RAFFINEMENT'] , None)
+      self.assertEqual(dico['WWWW'] , 'WWWW')
+      self.assertRaises(IndexError, mcfact.__getitem__, 'NITER')
+
+      mcfact=co.etape['trait'][0]
+      dico=mcfact.cree_dict_valeurs(mcfact.mc_liste)
+      self.assertEqual(dico['DERAFFINEMENT'] , None)
+      self.assertEqual(dico['RAFFINEMENT'] , None)
+      self.assertEqual(dico['WWWW'] , 'WWWW')
+      self.assertEqual(dico['TOTO'] , 'AAA')
+      self.assertEqual(dico['TUTU'] , 'CCC')
+      self.assertEqual(dico['FFFF'] , None)
+      self.assertEqual(dico['VVVV'] , None)
+      self.assertEqual(dico['TTTT'] , 'EEE')
+      self.assertEqual(dico['XXXX'] , 'XXXX')
+      self.assertEqual(mcfact['N'] , None)
+      self.assertRaises(KeyError, dico.__getitem__, 'TITI')
+
+   def test002(self):
+      mcf={'TYPE_RAFFINEMENT_LIBRE':{'RAFFINEMENT':'LIBRE'},'NITER':1}
+      co=OP1(traitement=mcf)
+      mcfact=co.etape['traitement']
+      self.assertEqual(mcfact['TYPE_RAFFINEMENT_LIBRE']['RAFFINEMENT'] , 'LIBRE')
+      self.assertEqual(mcfact['NITER'] , 1)
+
+   def test003(self):
+      co=MACR_BIDON(NOM_CHAM='ACCE',RESULTAT=_F(VAL2=3.4))
+      mcfact=co.etape['RESULTAT']
+      self.assertEqual(co.etape.isvalid(), 0)
+
+   def test004(self):
+      mcf={'VVVV':'',
+           'TYPE_RAFFINEMENT_LIBRE':{'RAFFINEMENT':'LIBRE','DERAFFINEMENT':'LIBRE','TOTO':'AA'},
+           'NITER':1,
+           'FICHIER_MED_MAILLAGE_NP1':'',
+           'NOM_MED_MAILLAGE_NP1':'',
+           }
+      co=OP1(traitement=mcf,WWWW="WWWW",trait={'N':1})
+      val=co.etape.isvalid()
+      if not val:msg=co.etape.report()
+      else:msg=""
+      self.assertEqual(co.etape.isvalid() , 1,msg=msg)
+
+      co=OP1(traitement=mcf,WWWW="WWWW")
+      val=co.etape.isvalid()
+      if not val:msg=co.etape.report()
+      else:msg=""
+      self.assertEqual(co.etape.isvalid() , 0,msg=msg)
+
+      co=OP1(traitement=mcf,WWWW="WW",trait={'N':1})
+      val=co.etape.isvalid()
+      if not val:msg=co.etape.report()
+      else:msg=""
+      self.assertEqual(co.etape.isvalid() , 0,msg=msg)
+
+      co=OP1(traitement=mcf,WWWW="WW",trait={'FFFF':'X'})
+      val=co.etape.isvalid()
+      if not val:msg=co.etape.report()
+      else:msg=""
+      self.assertEqual(co.etape.isvalid() , 1,msg=msg)
+
+      co=OP1(traitement=mcf,WWWW="WW",)
+      val=co.etape.isvalid()
+      if not val:msg=co.etape.report()
+      else:msg=""
+      self.assertEqual(co.etape.isvalid() , 1,msg=msg)
+
+   def test005(self):
+      OP1 = OPER(nom='OP1',op=1, sd_prod=concept,
+                 MASS = FACT(statut='f',max='**',
+                               Y  = SIMP(statut='f',typ='I',),
+                               Z  = FACT(T=SIMP(typ='I')),
+                            ),
+                 b_mass = BLOC(condition = "MASS != None",
+                               MODE   = SIMP(statut='o',typ='I',)
+                              ),
+                 bb_mass = BLOC(condition = "MASS and len(MASS) > 1 ",
+                               XX   = SIMP(statut='o',typ='I',)
+                              ),
+                 bbb_mass = BLOC(condition = "MASS and MASS[0]['Y'] == 1 ",
+                               YY   = SIMP(statut='o',typ='I',)
+                              ),
+                 bbbb_mass = BLOC(condition = "MASS and MASS[0]['Z'] and MASS[0]['Z'][0]['T'] == 1 ",
+                               ZZ   = SIMP(statut='o',typ='I',)
+                              ),
+                )
+      co=OP1()
+      msg=co.etape.report()
+      self.assertEqual(co.etape.isvalid() , 1,msg=msg)
+      co=OP1(MASS={},MODE=1)
+      msg=co.etape.report()
+      self.assertEqual(co.etape.isvalid() , 1,msg=msg)
+      co=OP1(MASS=({},{}),MODE=1,XX=1)
+      msg=co.etape.report()
+      self.assertEqual(co.etape.isvalid() , 1,msg=msg)
+      co=OP1(MASS=({'Y':1},{}),MODE=1,XX=1,YY=1)
+      msg=co.etape.report()
+      self.assertEqual(co.etape.isvalid() , 1,msg=msg)
+      co=OP1(MASS=({'Y':1,'Z':{'T':1}},{}),MODE=1,XX=1,YY=1,ZZ=1)
+      msg=co.etape.report()
+      self.assertEqual(co.etape.isvalid() , 1,msg=msg)
+
diff --git a/Tests/testelem/testfact1.py b/Tests/testelem/testfact1.py
new file mode 100644 (file)
index 0000000..c3e6989
--- /dev/null
@@ -0,0 +1,90 @@
+# coding=utf-8
+from Accas import SIMP,FACT
+
+import unittest
+
+class TestFactCase(unittest.TestCase):
+   def setUp(self):
+      self.cata=FACT(a=SIMP(typ='I',statut='o'),
+                     b=SIMP(typ='R'),
+                     c=SIMP(typ='C',defaut=('RI',1,0)),
+                    )
+
+   def tearDown(self):
+      del self.cata
+
+   def testStatut1(self):
+      o=self.cata({'a':1},'mcs1',None)
+      cr=o.report()
+      self.assert_(cr.estvide())
+
+   def testStatut2(self):
+      o=self.cata(None,'mcs1',None)
+      cr=o.report()
+      expected_cr="""Mot cle Facteur :mcs1
+   Mot-clé simple : a
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+      ! Mot-clé :  a  obligatoire non valorisé !
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+      ! None n'est pas une valeur autorisée !
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   Fin Mot-clé simple : a
+Fin Mot cle Facteur :mcs1
+"""
+      self.assertEqual(str(cr) , expected_cr)
+
+   def testType1(self):
+      """Verification de type"""
+      self.assertRaises(AttributeError,self.cata,1,'mcs1',None)
+      o=self.cata({'a':1.},'mcs1',None)
+      cr=o.report()
+      expected_cr="""Mot cle Facteur :mcs1
+   Mot-clé simple : a
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+      ! 1.0 n'est pas d'un type autorisé !
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   Fin Mot-clé simple : a
+Fin Mot cle Facteur :mcs1
+"""
+      self.assertEqual(str(cr) , expected_cr)
+
+   def test031(self):
+       cata=FACT(min=2,max=3,a=SIMP(typ='I',statut='o'),)
+
+       liste=(
+             (({'a':1},{'a':2}),1),
+             (({'a':1},{'a':2},{'a':3},{'a':4}),0),
+             (({'a':1},{'a':2},{'a':3}),1),
+             (({'a':1},),0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcf',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+
+   def test032(self):
+       cata=FACT(max=3,a=SIMP(typ='I',statut='o'),)
+       mcfact=cata({'a':1},'mcf',None)
+       self.assertEqual(mcfact[0].get_mocle('a') , 1)
+       self.assertEqual(mcfact['a'] , 1)
+
+       mcfact=cata(({'a':1},{'a':2}),'mcf',None)
+       self.assertEqual(mcfact[0]['a'] , 1)
+       self.assertEqual(mcfact[1]['a'] , 2)
+       self.assertRaises(TypeError,mcfact.__getitem__, 'a')
+       def f():
+           return mcfact['a']
+       self.assertRaises(TypeError,f)
+
+   def test033(self):
+       cata=FACT(xx=FACT(statut='o',max=3,a=SIMP(typ='I'),))
+       mcfact=cata({},'mcf',None)
+       valid=0
+       liste=(
+             ({},1),
+             ({'xx':{}},1),
+             ({'xx':{'a':1}},1),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcf',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
diff --git a/Tests/testelem/testfact2.py b/Tests/testelem/testfact2.py
new file mode 100644 (file)
index 0000000..5dce989
--- /dev/null
@@ -0,0 +1,158 @@
+from Accas import SIMP,FACT,BLOC
+
+import unittest
+
+
+class TestFactCase(unittest.TestCase):
+
+   def test001(self):
+      """
+       Cas test avec un bloc conditionnel active par un mot cle simple avec 
+       valeur par defaut, non present
+       Le bloc contient un mot cle simple avec defaut non present
+       On s'attend a recuperer les 2 mots cles simples avec leur valeur par 
+       defaut.
+      """
+      cata=FACT(ZORGLUB  =SIMP(statut='f',typ='TXM',defaut='OOO'),
+                b_unit1  =BLOC(condition = "ZORGLUB=='OOO'",
+                               TOTO  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),  
+                              ),
+                    )
+      mcfact=cata({},'mcf',None)
+      valeur_attendue={'ZORGLUB':'OOO','TOTO':'AAA'}
+      dico=mcfact[0].cree_dict_valeurs(mcfact[0].mc_liste)
+      #dico=mcfact.cree_dict_valeurs(mcfact.mc_liste)
+      self.assertEqual(dico , valeur_attendue)
+      self.assertEqual(mcfact[0].get_mocle('TOTO') , 'AAA')
+      self.assertEqual(mcfact[0].get_mocle('ZORGLUB') , 'OOO')
+      self.assertEqual(mcfact['TOTO'] , 'AAA')
+      self.assertRaises(IndexError, mcfact.__getitem__, 'TITI')
+
+   def test002(self):
+      cata=FACT(ZORGLUB  =SIMP(statut='f',typ='TXM',defaut='OOO'),
+                b_unit1  =BLOC(condition = "ZORGLUB=='ZZZ'",
+                               TOTO  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                              ),
+                    )
+      mcfact=cata({},'mcf',None)
+      valeur_attendue={'ZORGLUB':'OOO'}
+      dico=mcfact[0].cree_dict_valeurs(mcfact[0].mc_liste)
+      #dico=mcfact.cree_dict_valeurs(mcfact.mc_liste)
+      self.assertEqual(dico , valeur_attendue)
+      self.assertEqual(mcfact[0].get_mocle('ZORGLUB') , 'OOO')
+
+   def test003(self):
+      cata=FACT(ZORGLUB  =SIMP(statut='f',typ='TXM',defaut='OOO'),
+                b_unit1  =BLOC(condition = "ZORGLUB=='ZZZ'",
+                               TOTO  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                              ),
+                    )
+      mcfact=cata({'ZORGLUB':'ZZZ'},'mcf',None)
+      valeur_attendue={'ZORGLUB':'ZZZ', 'TOTO':'AAA'}
+      dico=mcfact[0].cree_dict_valeurs(mcfact[0].mc_liste)
+      self.assertEqual(dico , valeur_attendue)
+      self.assertEqual(mcfact[0].get_mocle('ZORGLUB') , 'ZZZ')
+      self.assertEqual(mcfact['TOTO'] , 'AAA')
+
+   def test004(self):
+      cata=FACT(ZORGLUB  =SIMP(statut='f',typ='TXM',defaut='OOO'),
+                b_unit1  =BLOC(condition = "ZORGLUB=='OOO'",
+                               TOTO  =SIMP(statut='f',typ='TXM',into=('AAA','BBB'),),
+                              ),
+                    )
+      mcfact=cata({},'mcf',None)
+      valeur_attendue={'ZORGLUB':'OOO','TOTO':None}
+      dico=mcfact[0].cree_dict_valeurs(mcfact[0].mc_liste)
+      self.assertEqual(dico , valeur_attendue)
+      self.assertEqual(mcfact[0].get_mocle('TOTO') , None)
+      self.assertEqual(mcfact[0].get_child('ZORGLUB').get_valeur() , 'OOO')
+      self.assertEqual(mcfact[0].get_child('b_unit1').get_child('TOTO').get_valeur() , None)
+      self.assertEqual(mcfact['TOTO'] , None)
+
+   def test005(self):
+      cata=FACT(
+                TOTO=FACT(statut='d',
+                          TITI=SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                          b_unit1  =BLOC(condition = "TITI=='AAA'",
+                                         TOTO  =SIMP(statut='f',typ='TXM',into=('AAA','BBB'),),
+                                        ),
+                         ),
+               )
+      mcfact=cata({},'mcf',None)
+      dico=mcfact[0].cree_dict_valeurs(mcfact[0].mc_liste)
+      self.assertNotEqual(dico["TOTO"] , None)
+
+   def test010(self):
+      """
+      """
+      cata=FACT(ZORGLUB  =SIMP(statut='f',typ='TXM',defaut='OOO'),
+                     b_unit1  =BLOC(condition = "ZORGLUB=='OOO'",
+                                         TOTO  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),  
+                                         b_unit2       =BLOC(condition = "TOTO == 'BBB'",
+                                                             UNITE   =SIMP(statut='f',typ='I',defaut=25),  
+                                                            ),
+                                   ),
+                    )
+      mcfact=cata({'TOTO' : 'BBB'},'mcf',None)
+      valeur_attendue={'UNITE':25, 'ZORGLUB':'OOO','TOTO':'BBB'}
+      dico=mcfact[0].cree_dict_valeurs(mcfact[0].mc_liste)
+      self.assertEqual(dico , valeur_attendue)
+
+   def test011(self):
+      """
+      """
+      cata=FACT(
+                TITI  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                TUTU  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                TATA  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                TOTO  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                b_unit1  =BLOC(condition = "TITI =='AAA'",
+                               TOTO1  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                               c_unit1       =BLOC(condition = "TOTO1 == 'AAA'", UNITE1   =SIMP(statut='f',typ='I',defaut=25),),
+                              ),
+                b_unit2  =BLOC(condition = "TUTU =='AAA'",
+                               TOTO2  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                               c_unit2       =BLOC(condition = "TOTO2 == 'BBB'", UNITE2   =SIMP(statut='f',typ='I',defaut=25),),
+                              ),
+                b_unit3  =BLOC(condition = "TATA =='BBB'",
+                               TOTO3  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                               c_unit3       =BLOC(condition = "TOTO3 == 'BBB'", UNITE3   =SIMP(statut='f',typ='I',defaut=25),),
+                              ),
+                b_unit4  =BLOC(condition = "TOTO =='BBB'",
+                               TOTO4  =SIMP(statut='f',typ='TXM',defaut='AAA',into=('AAA','BBB'),),
+                               c_unit4       =BLOC(condition = "TOTO4 == 'AAA'", UNITE4   =SIMP(statut='f',typ='I',defaut=25),),
+                              ),
+               )
+      mcfact=cata({'TOTO' : 'BBB'},'mcf',None)
+      valeur_attendue={
+          'TITI': 'AAA', 'TOTO': 'BBB', 'TUTU': 'AAA', 'TATA': 'AAA',
+          'TOTO1': 'AAA', 'UNITE1': 25, 
+          'TOTO2': 'AAA',
+          'TOTO4': 'AAA', 'UNITE4': 25, 
+                      }
+      dico=mcfact[0].cree_dict_valeurs(mcfact[0].mc_liste)
+      self.assertEqual(dico , valeur_attendue)
+
+      self.assertEqual(mcfact[0].get_child('TATA').get_valeur() , 'AAA')
+      self.assertEqual(mcfact[0].get_child('TITI').get_valeur() , 'AAA')
+      self.assertEqual(mcfact[0].get_child('TUTU').get_valeur() , 'AAA')
+      self.assertEqual(mcfact[0].get_child('TOTO').get_valeur() , 'BBB')
+      self.assertEqual(mcfact['TITI'] , 'AAA')
+      self.assertEqual(mcfact['TUTU'] , 'AAA')
+      self.assertEqual(mcfact['TATA'] , 'AAA')
+      self.assertEqual(mcfact['TOTO'] , 'BBB')
+
+      self.assertEqual(mcfact['TOTO1'] , 'AAA')
+      self.assertEqual(mcfact['TOTO2'] , 'AAA')
+      self.assertEqual(mcfact['TOTO4'] , 'AAA')
+      self.assertRaises(IndexError, mcfact[0].get_mocle, 'TOTO3')
+
+      self.assertEqual(mcfact['UNITE1'] , 25)
+      self.assertEqual(mcfact['UNITE4'] , 25)
+      self.assertRaises(IndexError, mcfact.__getitem__, 'UNITE2')
+      self.assertRaises(IndexError, mcfact.__getitem__, 'UNITE3')
+      self.assertRaises(IndexError, mcfact[0].get_mocle, 'UNITE2')
+      self.assertRaises(IndexError, mcfact[0].get_mocle, 'UNITE3')
+
+      self.assertEqual(mcfact[0].get_child('b_unit4').get_child('TOTO4').get_valeur(),'AAA')
+      self.assertEqual(mcfact[0].get_child('b_unit4').get_valeur(),{'TOTO4': 'AAA', 'UNITE4': 25})
diff --git a/Tests/testelem/testjdc2.py b/Tests/testelem/testjdc2.py
new file mode 100644 (file)
index 0000000..8cebe09
--- /dev/null
@@ -0,0 +1,162 @@
+# -*- coding: iso-8859-1 -*-
+import cata5
+
+import unittest,re,os
+import compare
+
+class TestJDCCase(unittest.TestCase):
+
+   def test1(self):
+      text="""
+# OP2 : CO converti en concept2 ou concept2. Retourne concept
+# OP6 : uniquement CO converti en concept2. Retourne concept
+# OP3 : CO converti en concept ou concept. Retourne concept
+co0=OP2(MATR=CO("x1"))
+co2=OP6(MATR=CO("xx"))
+co3=OP3(MATR={"CHAM":"R","MM":co2})
+"""
+      self.execute(cata5,text)
+
+   def test2(self):
+      text="""
+# OP2 : CO converti en concept2 ou concept2. Retourne concept
+# OP5 : uniquement CO converti en concept2. Retourne concept
+co0=OP2(MATR=CO("x1"))
+co1=OP5(MATR=co0)
+"""
+      expected="""DEBUT CR validation : bidon
+   Etape : OP5    ligne : 5    fichier : 'bidon'
+      Mot-clé simple : MATR
+         !!!!!!...
+         ! ... n'est pas d'un type autorisé !
+         !!!!!!...
+      Fin Mot-clé simple : MATR
+   Fin Etape : OP5
+FIN CR validation :bidon
+"""
+      self.execute(cata5,text,err3=expected)
+
+   def test3(self):
+      text="""
+# OP2 : CO converti en concept2 ou concept2. Retourne concept
+co0=OP2(MATR=CO("x1"))
+co1=OP2(MATR=x1)
+co2=OP2(MATR=co0)
+"""
+      expected="""DEBUT CR validation : bidon
+   Etape : OP2    ligne : 5    fichier : 'bidon'
+      Mot-clé simple : MATR
+         !!!!...
+         ! ... n'est pas d'un type autorisé !
+         !!!!...
+      Fin Mot-clé simple : MATR
+   Fin Etape : OP2
+FIN CR validation :bidon
+"""
+      self.execute(cata5,text,err3=expected)
+
+   def test8(self):
+      text="""
+co2=OP14(MATR=CO("xx"))
+"""
+      expected=""
+      self.execute(cata5,text,err4=expected)
+
+   def test12(self):
+      text="""
+co2=OP18(MATR=CO("xx"))
+co3=OP2(MATR=xx)
+co4=OP11(MATR=xx)
+"""
+      expected=""
+      self.execute(cata5,text,err4=expected)
+
+   def test13(self):
+      text="""
+co2=OP10(MATR=CO("xx"))
+"""
+      expected="""DEBUT CR validation : bidon
+   Etape : OP10    ligne : 2    fichier : 'bidon'
+      Mot-clé simple : MATR
+         !!!!...
+         ! ... n'est pas d'un type autorisé !
+         !!!!...
+      Fin Mot-clé simple : MATR
+   Fin Etape : OP10
+FIN CR validation :bidon
+"""
+      self.execute(cata5,text,err3=expected)
+
+   def test16(self):
+      text="""
+co=OP22(MATR=CO("xx"))
+"""
+      self.execute(cata5,text)
+
+   def test17(self):
+      text="""
+co=OP22(MATR=CO("xx"))
+co2=OP22(MATR=xx)
+"""
+      expected="""DEBUT CR validation : bidon
+   Etape : OP22    ligne : 3    fichier : 'bidon'
+      Mot-clé simple : MATR
+         !!!!!!!!...
+         ! ... n'est pas d'un type autorisé !
+         !!!!!!!...
+      Fin Mot-clé simple : MATR
+   Fin Etape : OP22
+FIN CR validation :bidon
+"""
+      self.execute(cata5,text,err3=expected)
+
+   def setUp(self):
+      pass
+
+   def tearDown(self):
+      pass
+
+   def execute(self,cata,text_jdc,err1="",err2="",err3="",err4=""):
+      j=cata.JdC(procedure=text_jdc,cata=cata,nom="bidon")
+      j.actif_status=1
+      j.fico=None
+      j.set_par_lot("OUI")
+      # On compile le texte Python
+      j.compile()
+      # On initialise les tops de mesure globale de temps d'execution du jdc
+      j.cpu_user=os.times()[0]
+      j.cpu_syst=os.times()[1]
+      j.impr_macro='NON'
+
+      #print j.cr
+      if err1 == "":
+        self.assert_(j.cr.estvide(),msg='Erreur non attendue dans compile (err1):\n%s' % str(j.cr))
+      else:
+        self.assert_(self.check(err1,str(j.cr)),msg='Erreur non attendue dans compile (err1):\n%s\n!=\n%s' % (str(j.cr),err1))
+        j.supprime()
+        return
+
+      j.exec_compile()
+      #print j.cr
+      if err2 == "":
+        self.assert_(j.cr.estvide(),msg='Erreur non attendue dans exec_compile (err2):\n%s' % str(j.cr))
+      else:
+        self.assert_(self.check(err2,str(j.cr)),msg='Erreur non attendue dans exec_compile(err2):\n%s\n!=\n%s' % (str(j.cr),err2))
+        j.supprime()
+        return
+
+      cr=j.report()
+      #print cr
+      if err3 == "":
+        self.assert_(cr.estvide(),msg='Erreur non attendue dans exec_compile (err3):\n%s' % str(cr))
+      else:
+        self.assert_(self.check(err3,str(cr)),msg='Erreur non attendue dans exec_compile(err3):\n%s\n!=\n%s' % (str(cr),err3))
+        j.supprime()
+        return
+
+      j.set_par_lot("NON")
+
+      j.supprime()
+
+   def check(self,want,got):
+      return compare.check(want,got)
diff --git a/Tests/testelem/testmacro1.py b/Tests/testelem/testmacro1.py
new file mode 100644 (file)
index 0000000..dcb0976
--- /dev/null
@@ -0,0 +1,67 @@
+import cata2
+from cata2 import OP1,OP2,OP3,OP4,OP5,OP6
+
+from Accas import AsException,CO
+
+import unittest
+
+class TestMacroCase(unittest.TestCase):
+   def setUp(self):
+      pass
+
+   def tearDown(self):
+      pass
+
+   def test1(self):
+      co2=OP4()
+      cr=co2.etape.report()
+      self.assert_(cr.estvide(),msg='Erreur non attendue:\n%s' % str(cr))
+      co2.etape.supprime()
+
+   def test4(self):
+      co1=OP1(a=1)
+      co2=OP2(MATR=CO("xx"))
+      cr=co2.etape.report()
+      self.assert_(cr.estvide(),msg='Erreur non attendue:\n%s' % str(cr))
+      co1.etape.supprime()
+      co2.etape.supprime()
+
+   def test3(self):
+      co1=OP1(a=1)
+      co2=OP3(MATR={"CHAM":"R","MM":CO("xx")})
+      cr=co2.etape.report()
+      self.assert_(cr.estvide(),msg='Erreur non attendue:\n%s' % str(cr))
+      co1.etape.supprime()
+      co2.etape.supprime()
+
+   def test2(self):
+      co1=OP1(a=1)
+      co2=OP3(MATR=({"CHAM":"R","MM":CO("xx")},
+                    {"CHAM":"R","MM":CO("xx")},
+                   ),
+             )
+      cr=co2.etape.report()
+      self.assert_(cr.estvide(),msg='Erreur non attendue:\n%s' % str(cr))
+      co1.etape.supprime()
+      co2.etape.supprime()
+
+   def test5(self):
+      co2=OP5(MATR=CO("xx"))
+      co3=OP3(MATR={"CHAM":"R","MM":co2})
+      #print co3.etape.report()
+      cr=co2.etape.report()
+      #print cr
+      self.assert_(cr.estvide(),msg='Erreur non attendue:\n%s' % str(cr))
+      co2.etape.supprime()
+      co3.etape.supprime()
+
+   def test6(self):
+      co2=OP6(MATR=CO("xx"))
+      co3=OP3(MATR={"CHAM":"R","MM":co2})
+      #print co3.etape.report()
+      cr=co2.etape.report()
+      #print cr
+      self.assert_(cr.estvide(),msg='Erreur non attendue:\n%s' % str(cr))
+      co2.etape.supprime()
+      co3.etape.supprime()
+
diff --git a/Tests/testelem/testoper1.py b/Tests/testelem/testoper1.py
new file mode 100644 (file)
index 0000000..2d49755
--- /dev/null
@@ -0,0 +1,174 @@
+# coding=utf-8
+import cata1
+from cata1 import OP1,OP2,OP3,OP4,OP5,OP6
+from Accas import AsException,ASSD,OPER,SIMP,FACT,BLOC,_F
+
+class concept(ASSD):pass
+
+import unittest
+
+class TestOperCase(unittest.TestCase):
+   def setUp(self):
+      pass
+
+   def tearDown(self):
+      pass
+
+   def test01(self):
+      co1=OP1(a=1)
+      cr=co1.etape.report()
+      self.assert_(cr.estvide())
+      co1.etape.supprime()
+
+   def test02(self):
+      """ Test fonction sd_prod
+      """
+      co1=OP2(TYPE_RESU="TRANS")
+      cr=co1.etape.report()
+      self.assert_(cr.estvide())
+      co1.etape.supprime()
+
+   def test04(self):
+      """ Test fonction sd_prod
+          Test du type d'un argument avec AsType
+      """
+      co1=OP1(a=1)
+      co2=OP3(MATR=co1)
+      cr=co2.etape.report()
+      self.assert_(cr.estvide())
+      co1.etape.supprime()
+      co2.etape.supprime()
+
+   def test05(self):
+      """ Test fonction sd_prod
+          Test sur un mot-clé simple d'un mot-clé facteur : mcf[mcs]
+      """
+      co1=OP4(MESURE={'NOM_PARA':'INST'})
+      cr=co1.etape.report()
+      self.assert_(cr.estvide())
+      co1.etape.supprime()
+
+   def test06(self):
+      """ Test fonction sd_prod
+          Test sur un mot-clé simple d'un mot-clé facteur : mcf.get_child(mcs).get_valeur()
+      """
+      co2=OP1(a=1)
+      co1=OP5(FFT={'FONCTION':co2})
+      cr=co1.etape.report()
+      self.assert_(cr.estvide())
+      co1.etape.supprime()
+      co2.etape.supprime()
+
+   def test07(self):
+      """ Test fonction sd_prod
+          Test sur un mot-clé simple d'un mot-clé facteur : mcf[0][mcs]
+      """
+      co2=OP1(a=1)
+      co1=OP6(FILTRE={'MODE':co2})
+      cr=co1.etape.report()
+      self.assert_(cr.estvide())
+      co1.etape.supprime()
+      co2.etape.supprime()
+
+   def test08(self):
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(typ='I'),
+                   c=SIMP(statut='o',typ='TXM',position='global',
+                          into=("TABLEAU","AGRAF"),
+                        ),
+                  b=FACT(statut='o',max='**',
+                  b_forme=BLOC(condition="c == 'TABLEAU'",
+                               d=SIMP(statut='f',typ='TXM'),
+                               ),
+                       ),
+                 )
+
+      co1=OP10(a=1,c="TABLEAU",b=_F(d='rr'))
+      cr=co1.etape.report()
+      self.assertEqual(co1.etape['a'],1)
+      self.assertEqual(co1.etape['c'],'TABLEAU')
+      self.assertEqual(co1.etape['b']['d'],'rr')
+      self.assert_(cr.estvide())
+      co1.etape.supprime()
+
+   def test09(self):
+      co2=OP1(a=1)
+      co1=OP5(FFT={'FONCTION':co2})
+      l= co1.etape.get_sd_utilisees()
+      self.assert_(len(l)==1)
+      self.assert_(co2 in l )
+      d=co1.etape.get_sd_mcs_utilisees()
+      self.assert_(len(d.keys())==1)
+      self.assert_(len(d['FONCTION'])==1)
+      self.assert_(co2 in d['FONCTION'])
+      co1.etape.supprime()
+      co2.etape.supprime()
+
+   def test10(self):
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(statut='o',typ='R',max=5),
+                 )
+      class mylist(list):pass
+      valeur=(0,1)
+      co1=OP10(a=mylist(valeur))
+      #n,v=co1.etape.getvr8("","a",0,1,3)
+      v=tuple(co1.etape["a"])
+      msg="erreur sur le test " +'\n'+str(co1.etape.report())
+      self.assertEqual(v,valeur,msg=msg)
+      co1.etape.supprime()
+
+   def futuretest11(self):
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(statut='o',typ='R',into=(0,1,2),max=5),
+                 )
+      class mylist(list):pass
+      valeur=(2,0,1)
+      co1=OP10(a=mylist(valeur))
+      v=tuple(co1.etape["a"])
+      #n,v=co1.etape.getvr8("","a",0,1,3)
+      msg="erreur sur le test " +'\n'+str(co1.etape.report())
+      self.assertEqual(v,valeur,msg=msg)
+      co1.etape.supprime()
+
+   def futuretest12(self):
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(statut='o',typ='R',into=(2,4,3,5),max=5),
+                 )
+      class mylist(list):pass
+      valeur=(2,0,1)
+      co1=OP10(a=mylist(valeur))
+      msg="erreur sur le test " +'\n'+str(co1.etape.report())
+      self.assertEqual(co1.etape.isvalid(),0,msg=msg)
+      co1.etape.supprime()
+
+   def futuretest13(self):
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(statut='o',typ='R',val_min=0,val_max=3,max=5),
+                 )
+      class mylist(list):pass
+      valeur=(2,0,1)
+      co1=OP10(a=mylist(valeur))
+      msg="erreur sur le test " +'\n'+str(co1.etape.report())
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+      co1.etape.supprime()
+
+   def futuretest14(self):
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(statut='o',typ='R',val_min=0,val_max=1,max=5),
+                 )
+      class mylist(list):pass
+      valeur=(2,0,1)
+      co1=OP10(a=mylist(valeur))
+      msg="erreur sur le test " +'\n'+str(co1.etape.report())
+      self.assertEqual(co1.etape.isvalid(),0,msg=msg)
+      co1.etape.supprime()
+
+   def test15(self):
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(statut='o',typ='R',val_min=0,val_max=1,max=5),
+                 )
+      valeur=(2,0,1)
+      co1=OP10(a=valeur)
+      msg="erreur sur le test " +'\n'+str(co1.etape.report())
+      self.assertEqual(co1.etape.isvalid(),0,msg=msg)
+      co1.etape.supprime()
diff --git a/Tests/testelem/testposition1.py b/Tests/testelem/testposition1.py
new file mode 100644 (file)
index 0000000..520b1e4
--- /dev/null
@@ -0,0 +1,254 @@
+# coding=utf-8
+import os
+import cata3
+from Accas import AsException,ASSD,OPER,SIMP,FACT,BLOC,_F
+
+class concept(ASSD):pass
+
+import unittest
+
+class TestCase(unittest.TestCase):
+   def setUp(self):
+      self.j=cata3.JdC(procedure="",nom="bidon")
+      self.j.actif_status=1
+      CONTEXT.set_current_step(self.j)
+
+   def tearDown(self):
+      CONTEXT.unset_current_step()
+      self.j.supprime()
+
+   def test001(self):
+      """ Test position = global
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(typ='I'),
+                   c=SIMP(statut='o',typ='TXM',position='global',
+                          into=("TABLEAU","AGRAF"),
+                        ),
+                  b=FACT(statut='o',max='**',
+                  b_forme=BLOC(condition="c == 'TABLEAU'",
+                               d=SIMP(statut='f',typ='TXM'),
+                               ),
+                       ),
+                 )
+      co1=OP10(a=1,c="TABLEAU",b=_F(d='rr'))
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+
+   def test002(self):
+      """ Test position=global_jdc
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(typ='I'),
+                   c=SIMP(statut='o',typ='TXM',position='global_jdc',
+                          into=("TABLEAU","AGRAF"),
+                        ),
+                 )
+      OP11 = OPER(nom='OP11',op=10,sd_prod=concept,
+                  b=FACT(statut='o',max='**',
+                  b_forme=BLOC(condition="c == 'TABLEAU'",
+                               d=SIMP(statut='f',typ='TXM'),
+                               ),
+                       ),
+                 )
+      co1=OP10(a=1,c="TABLEAU",)
+      co2=OP11(b=_F(d='rr'))
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+      msg=co2.etape.report()
+      self.assertEqual(co2.etape.isvalid(),1,msg=msg)
+
+   def test003(self):
+      """ Test position=global_jdc
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(typ='I'),
+                   b=FACT( c=SIMP(statut='o',typ='TXM',position='global_jdc',
+                                    into=("TABLEAU","AGRAF"),
+                                 ),
+                         ),
+                 )
+      OP11 = OPER(nom='OP11',op=10,sd_prod=concept,
+                   b=FACT(statut='o',max='**',
+                          b_forme=BLOC(condition="c == 'TABLEAU'",
+                                       d=SIMP(statut='f',typ='TXM'),
+                                       ),
+                         ),
+                 )
+      OP12 = OPER(nom='OP12',op=10,sd_prod=concept,
+                   b=FACT(statut='o',max='**',
+                          b_forme=BLOC(condition="c == 'TABLEAU'",
+                                       d=SIMP(statut='o',typ='TXM'),
+                                       ),
+                         ),
+                 )
+      co1=OP10(a=1,b=_F(c="TABLEAU"))
+      co2=OP11(b=_F(d='rr'))
+      co3=OP11()
+      co4=OP12(b=_F(d='rr'))
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+      msg=co2.etape.report()
+      self.assertEqual(co2.etape.isvalid(),1,msg=msg)
+      msg=co3.etape.report()
+      self.assertEqual(co3.etape.isvalid(),1,msg=msg)
+      msg=co4.etape.report()
+      self.assertEqual(co4.etape.isvalid(),1,msg=msg)
+
+   def futuretest004(self):
+      """ Test position = global
+      """
+      msg0= """ 
+          PROBLEME : les mots cles globaux ne sont pas forcément vus
+          dans les mots cles facteurs (dépendant de l'ordre de création)
+          Dans ce test xx est avant b qui est avant g : g voit c mais pas xx.
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(typ='I'),
+                   b=FACT( c=SIMP(statut='o',typ='TXM',position='global',
+                                    into=("TABLEAU","AGRAF"),
+                                 ),
+                         ),
+                   g=FACT(statut='o',max='**',
+                          b_forme=BLOC(condition="c == 'TABLEAU'",
+                                       d=SIMP(statut='f',typ='TXM'),
+                                       ),
+                         ),
+                   xx=FACT(statut='o',max='**',
+                          b_forme=BLOC(condition="c == 'TABLEAU'",
+                                       d=SIMP(statut='f',typ='TXM'),
+                                       ),
+                         ),
+                 )
+      co1=OP10(a=1,b=_F(c="TABLEAU"),g=_F(d='rr'))
+      msg=msg0+str(co1.etape.report())
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+      co2=OP10(a=1,b=_F(c="TABLEAU"),xx=_F(d='rr'))
+      msg=msg0+str(co2.etape.report())
+      self.assertEqual(co2.etape.isvalid(),1,msg=msg)
+
+   def test005(self):
+      """ Test position = global
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(typ='I'),
+                   g=FACT( c=SIMP(statut='o',typ='TXM',position='global',
+                                    into=("TABLEAU","AGRAF"),
+                                 ),
+                         ),
+                   b_forme=BLOC(condition="c == 'TABLEAU'",
+                                d=SIMP(statut='f',typ='TXM'),
+                               ),
+                 )
+      co1=OP10(a=1,g=_F(c="TABLEAU"),d='rr')
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+
+   def test006(self):
+      """ Test position = global
+          ATTENTION : Un mot cle global, facultatif avec defaut (c) défini dans un mot clé facteur 
+          n'est pas vu globalement
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   a=SIMP(typ='I'),
+                   g=FACT(a=SIMP(typ='I'),
+                          c=SIMP(typ='TXM',position='global',into=("TABLEAU","AGRAF"),defaut="TABLEAU"),
+                         ),
+                   b_forme=BLOC(condition="c == 'TABLEAU'",
+                                d=SIMP(statut='f',typ='TXM'),
+                               ),
+                 )
+      co1=OP10(a=1,g=_F(a=1),d='rr')
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),0,msg=msg)
+
+   def test007(self):
+      """ Test position = global
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                  c=SIMP(typ='TXM',position='global',into=("TABLEAU","AGRAF"),defaut="TABLEAU"),
+                  b=FACT(statut='o',max='**',
+                         b_forme=BLOC(condition="c == 'TABLEAU'",
+                                      d=SIMP(statut='f',typ='TXM'),
+                                     ),
+                        ),
+                 )
+      co1=OP10(b=_F(d='rr'))
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+
+   def test008(self):
+      """ Test position = global
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                  c=SIMP(typ='TXM',position='global',into=("TABLEAU","AGRAF"),defaut="TABLEAU"),
+                  b_forme=BLOC(condition="c == 'TABLEAU'",
+                               d=SIMP(statut='f',typ='TXM'),
+                              ),
+                 )
+      co1=OP10(d='rr')
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+
+   def test009(self):
+      """ Test position = global
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                  c=SIMP(statut='o',typ='TXM',position='global',into=("TABLEAU","AGRAF"),defaut="TABLEAU"),
+                  b_forme=BLOC(condition="c == 'TABLEAU'",
+                               d=SIMP(statut='f',typ='TXM'),
+                              ),
+                 )
+      co1=OP10(d='rr')
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+
+   def test010(self):
+      """ Test position = global
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   g=FACT(a=SIMP(typ='I'),
+                          c=SIMP(statut='o',typ='TXM',position='global',into=("TABLEAU","AGRAF"),defaut="TABLEAU"),
+                         ),
+                   b_forme=BLOC(condition="c == 'TABLEAU'",
+                                d=SIMP(statut='f',typ='TXM'),
+                               ),
+                 )
+      co1=OP10(g=_F(a=1),d='rr')
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+
+   def test011(self):
+      """ Test position = global
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   g=FACT(statut='o',
+                          c=SIMP(statut='o',typ='TXM',position='global',into=("TABLEAU","AGRAF"),defaut="TABLEAU"),
+                         ),
+                   b_forme=BLOC(condition="c == 'TABLEAU'",
+                                d=SIMP(statut='f',typ='TXM'),
+                               ),
+                 )
+      co1=OP10(d='rr')
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),1,msg=msg)
+
+   def test012(self):
+      """ Test position = global
+          ATTENTION : Un mot cle global, facultatif avec defaut (c) défini dans un mot clé facteur 
+          n'est pas vu globalement
+      """
+      OP10 = OPER(nom='OP10',op=10,sd_prod=concept,
+                   g=FACT(statut='o',
+                          c=SIMP(typ='TXM',position='global',into=("TABLEAU","AGRAF"),defaut="TABLEAU"),
+                         ),
+                   b_forme=BLOC(condition="c == 'TABLEAU'",
+                                d=SIMP(statut='f',typ='TXM'),
+                               ),
+                 )
+      co1=OP10(d='rr')
+      msg=co1.etape.report()
+      self.assertEqual(co1.etape.isvalid(),0,msg=msg)
+      co2=OP10(g=_F(c="TABLEAU"),d='rr')
+      msg=co2.etape.report()
+      self.assertEqual(co2.etape.isvalid(),1,msg=msg)
diff --git a/Tests/testelem/testsimp0.py b/Tests/testelem/testsimp0.py
new file mode 100644 (file)
index 0000000..68b3d43
--- /dev/null
@@ -0,0 +1,47 @@
+from Noyau import SIMP
+
+import unittest
+
+class TestSimpCase(unittest.TestCase):
+   def testStatut1(self):
+      a=SIMP(typ='I',statut='o')
+      cr=a.report()
+      self.assert_(cr.estvide())
+
+   def testStatut2(self):
+      a=SIMP(typ='I')
+      cr=a.report()
+      self.assert_(cr.estvide())
+
+   def testStatut3(self):
+      a=SIMP(typ='I',statut='s')
+      cr=a.report()
+      expected_cr="""
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : 's' !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+"""
+      self.assertEqual(str(cr) , expected_cr)
+
+   def testPosition1(self):
+      a=SIMP(typ='I',position='total')
+      cr=a.report()
+      expected_cr="""
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! L'attribut 'position' doit valoir 'local','global' ou 'global_jdc' : 'total' !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+"""
+      self.assertEqual(str(cr) , expected_cr)
+
+   def testMinMax1(self):
+      a=SIMP(typ='I',min='**',max=12)
+      cr=a.report()
+      expected_cr="""
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Nombres d'occurrence min et max invalides : '**' 12 !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+"""
+      self.assertEqual(str(cr) , expected_cr)
diff --git a/Tests/testelem/testsimp1.py b/Tests/testelem/testsimp1.py
new file mode 100644 (file)
index 0000000..c6f90a7
--- /dev/null
@@ -0,0 +1,243 @@
+# coding=utf-8
+from Accas import SIMP,ASSD
+class maillage(ASSD):pass
+class maillage_sdaster(ASSD):pass
+
+import unittest
+
+class TestMCSimpCase(unittest.TestCase):
+   def setUp(self):
+      self.cata=SIMP(typ='I',statut='o')
+
+   def tearDown(self):
+      del self.cata
+
+   def testStatut1(self):
+      o=self.cata(1,'mcs1',None)
+      cr=o.report()
+      self.assert_(cr.estvide())
+
+   def testStatut2(self):
+      o=self.cata(None,'mcs1',None)
+      cr=o.report()
+      expected_cr="""Mot-clé simple : mcs1
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé :  mcs1  obligatoire non valorisé !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! None n'est pas une valeur autorisée !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs1
+"""
+      self.assertEqual(str(cr) , expected_cr)
+
+   def testType1(self):
+      o=self.cata(1,'mcs1',None)
+      cr=o.report()
+      expected_cr="""Mot-clé simple : mcs1
+Fin Mot-clé simple : mcs1
+"""
+      self.assertEqual(str(cr) , expected_cr)
+
+   def test004(self):
+       cata=SIMP(typ='shell',statut='o')
+       liste=((1,0),("a",1), (1.,0),(('RI',1.,0.),0), (('RI',1,0),0),
+              (1+0j,0), ("('RI',1,0)",1), ("toto",1), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   # Chaines
+   def test040(self):
+       cata=SIMP(typ='TXM',statut='o')
+       liste=((1,0),("a",1), (1.,0),(('RI',1.,0.),0),
+              (('RI',1,0),0), (1+0j,0),
+              ("('RI',1,0)",1), ("toto",1), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   def test041(self):
+       cata=SIMP(typ='TXM',statut='o',max=3)
+       liste=((1,0),("a",1), (1.,0),(('RI',1.,0.),0),
+              (('RI',1,0),0), (1+0j,0),
+              (("toot","titi"),1),
+              (("toot","titi","tutu"),1),
+              (("toot","titi",1),0),
+              (("toot","titi","tutu","tata"),0),
+              ("('RI',1,0)",1), ("toto",1), (None,0), 
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur) 
+
+   def test042(self):
+       cata=SIMP(typ='TXM',statut='o',into=("toto","titi"),max=3)
+       liste=((1,0),("a",0), (1.,0),(('RI',1.,0.),0),
+              (('RI',1,0),0), (1+0j,0),
+              (("toto","titi"),1),
+              (("toot","titi","tutu"),0),
+              (("toot","titi",1),0),
+              (("toot","titi","tutu","tata"),0),
+              ("('RI',1,0)",0), ("toto",1), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   def test043(self):
+       cata=SIMP(typ='TXM',statut='o',into=("toto","titi"),min=2,max=3)
+       liste=((1,0),("a",0), (1.,0),(('RI',1.,0.),0),
+              (('RI',1,0),0), (1+0j,0),
+              (("toto","titi"),1),
+              (("toot","titi","tutu"),0),
+              (("toot","titi",1),0),
+              (("toot","titi","tutu","tata"),0),
+              ("('RI',1,0)",0), ("toto",0), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   # Reels
+   def test020(self):
+       cata=SIMP(typ='R',statut='o',max=4)
+       liste=((1,1),("a",0), (1.,1),(('RI',1.,0.),0), ((1.,2.,3.),1),
+              ((1.,2.,3.,4.),1), ((1.,2.,3.,4.,5.),0), ("toto",0), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   def test021(self):
+       cata=SIMP(typ='R',statut='o',min=2,max=4)
+       liste=((1,0),("a",0), (1.,0),(('RI',1.,0.),0),
+              ((1.,2.),1), ((1.,2.,3.),1), ((1.,2.,3.,4.),1),
+              ((1.,2.,3.,4.,5.),0), ("toto",0), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+
+   def test022(self):
+       cata=SIMP(typ='R',statut='o',val_min=2,val_max=4)
+       liste=((1,0),("a",0), (1.,0),(('RI',1.,0.),0), (3,1),
+              (6,0), ((1.,2.),0), ((1.,2.,3.),0), ((1.,2.,3.,4.),0),
+              ((1.,2.,3.,4.,5.),0), ("toto",0), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   def test023(self):
+       cata=SIMP(typ='R',statut='o',val_min=2,val_max=4,max=4)
+       liste=((1,0),("a",0), (1.,0),(('RI',1.,0.),0), (3,1),
+              (6,0), ((1.,6.),0), ((3.,2.),1), ((1.,2.,3.),0),
+              ((1.,2.,3.,4.),0), ((1.,2.,3.,4.,5.),0), ("toto",0),
+              (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   def test024(self):
+       cata=SIMP(typ='R',statut='o')
+       liste=((1,1),("a",0), (1.,1),(('RI',1.,0.),0), (('RI',1,0),0),
+              (1+0j,0), ("('RI',1,0)",0), ((1.,2.,3.),0), ("toto",0),
+              (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+
+   # Entiers
+   def test030(self):
+       cata=SIMP(typ='I',statut='o')
+       liste=((1,1),("a",0), (1.,0),(('RI',1.,0.),0),
+              (('RI',1,0),0), (1+0j,0), ("1",0), ("toto",0), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   def test031(self):
+       cata=SIMP(typ='I',statut='o',into=(1,5,8),max=4)
+       liste=((1,1),("a",0), ("toto",0), (None,0),
+              (1.,0),(('RI',1.,0.),0),
+              (3,0), (6,0), ((1,5),1), ((1,5,8),1), ((1,5,8,5),1),
+              ((1,5,8,5,1),0), ((1.,6.),0), ((3.,2.),0), ((1.,2.,3.),0),
+              ((1.,2.,3.,4.),0), ((1.,2.,3.,4.,5.),0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   # Complexes
+   def test010(self):
+       cata=SIMP(typ='C',statut='o',into=(('RI',1,0),('RI',2,0),('RI',3,0)),max=4)
+       liste=((1,0),("a",0), (1.,0),(('RI',1.,0.),1), ("toto",0), (None,0),
+              ((('RI',1.,0.),('RI',2,0)),1),
+              ((('RI',1.,0.),('RI',2,0),('RI',3,0)),1),
+              ((('RI',1.,0.),('RI',2,0),('RI',3,0),('RI',3,0)),1),
+              ((('RI',1.,0.),('RI',2,0),('RI',3,0),('RI',3,0),('RI',1,0)),0),
+              ((1,5),0), ((1,5,8,5,1),0),
+              ((1.,6.),0), ((3.,2.),0), ((1.,2.,3.),0), ((1.,2.,3.,4.,5.),0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   def test011(self):
+       cata=SIMP(typ='C',statut='o',max=3)
+       liste=((1,1),("a",0), (1.,1),(('RI',1.,0.),1), ("toto",0), (None,0),
+              ((('RI',1.,0.),('RI',2,0)),1),
+              ((('RI',1.,0.),('RI',2,0),('RI',3,0)),1),
+              ((('RI',1.,0.),('RI',2,0),('RI',3,0),('RI',3,0)),0),
+              ((('RI',1.,0.),('RI',2,0),('RI',3,0),('RI',3,0),('RI',1,0)),0),
+              ((1,5),1), ((1,5,8,5,1),0),
+              ((1.,6.),1), ((3.,2.),1), ((1.,2.,3.),1), ((1.,2.,3.,4.,5.),0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   def test012(self):
+       cata=SIMP(typ='C',statut='o')
+       liste=((1,1),("a",0), (1.,1),(('RI',1.,0.),1), (('RI',1,0),1), (1+0j,1),
+              ("('RI',1,0)",0), ("toto",0), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,"erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
+
+   def test013(self):
+       cata=SIMP(typ=('R',maillage),statut='o')
+       liste=((1,1),
+              (maillage(),1),
+              (maillage_sdaster(),0),
+              ("aa",0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           self.assertEqual(o.isvalid(),valid,
+               "erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()))
+           if valid: self.assertEqual(o.get_valeur(),valeur)
diff --git a/Tests/testelem/testsimp2.py b/Tests/testelem/testsimp2.py
new file mode 100644 (file)
index 0000000..4c0aae2
--- /dev/null
@@ -0,0 +1,42 @@
+# coding=utf-8
+from Accas import SIMP,ASSD
+
+import unittest
+
+class TestSimpCase(unittest.TestCase):
+   def setUp(self):
+       pass
+
+   def tearDown(self):
+       pass
+
+   def test001(self):
+       cata=SIMP(statut='o',typ='TXM',defaut="d")
+       liste=((1,0),("a",1), (1.,0),(('RI',1.,0.),0), (('RI',1,0),0),
+              (1+0j,0), ("('RI',1,0)",1), ("toto",1), (None,1),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report())
+           self.assertEqual(o.isvalid(),valid,msg=msg)
+
+   def test002(self):
+       cata=SIMP(statut='f',typ='TXM',defaut="d")
+       liste=((1,0),("a",1), (1.,0),(('RI',1.,0.),0), (('RI',1,0),0),
+              (1+0j,0), ("('RI',1,0)",1), ("toto",1), (None,1),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report())
+           self.assertEqual(o.isvalid(),valid,msg=msg)
+
+   def futuretest003(self):
+       cata=SIMP(statut='o',typ='R',max=3)
+       class mylist(list):pass
+       liste=((1,1),(mylist((0.,1.)),1), (1.,1),(mylist((0.,1.)),1), (('RI',1,0),0),
+              (1+0j,0), ("('RI',1,0)",0), ("toto",0), (None,0),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report())
+           self.assertEqual(o.isvalid(),valid,msg=msg)
diff --git a/Tests/testelem/testvalidator1.py b/Tests/testelem/testvalidator1.py
new file mode 100644 (file)
index 0000000..1a57431
--- /dev/null
@@ -0,0 +1,178 @@
+# coding=utf-8
+from Accas import *
+
+import unittest
+
+class TestValidCase(unittest.TestCase):
+   def setUp(self):
+       pass
+
+   def tearDown(self):
+       pass
+
+   def _test(self,cata,liste):
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           msg=None
+           if valid != o.isvalid() :
+              if not valid:
+                 msg="erreur : le mot cle devrait etre invalide. valeur = %s, valid = %s " % (valeur,valid)
+              else:
+                 msg="erreur : le mot cle devrait etre valide. valeur = %s, valid = %s " % (valeur,valid) + '\n' + str(o.report())
+           self.assertEqual(o.isvalid(),valid,msg)
+           if valid: 
+              self.assertEqual(o.get_valeur(),valeur)
+
+   def test001(self):
+       cata=SIMP(typ='TXM',validators=LongStr(3,5))
+       liste=(("aa",0),("aaa",1),
+              ("aaaa",1),("aaaaa",1),
+              ("axyzaa",0),("bbbbaaa",0),
+             )
+       self._test(cata,liste)
+
+   def test002(self):
+       cata=SIMP(statut='o',typ='TXM',min=1,max=4,validators=LongStr(3,5))
+       liste=(
+              ("aa",0),("aaa",1),
+              (("aaaa","aaaaa","axyzaa","bbbbaaa","zzz"),0),
+              (("aaaa","aaaaa","axyz","bbbb","zzz"),0),
+              (("aaaa","axyz","bbbb","zzz"),1),
+              ("aaaa",1),("aaaaa",1),
+              ("axyzaa",0),("bbbbaaa",0),
+             )
+       self._test(cata,liste)
+
+   def test003(self):
+       cata=SIMP(statut='o',typ='I',validators=TypeVal(1))
+       liste=(
+               (1,1),(1.,0),(1.25,0),
+               (('RI',0.,1.),0),
+             )
+       self._test(cata,liste)
+
+   def test004(self):
+       cata=SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),max='**',validators=OrdList("croissant"))
+       liste=(
+              (1,1),((1,3),1),
+              ((3,1),0),
+              ((1,3,2),0),
+              ((1.,2.),0),
+             )
+       self._test(cata,liste)
+
+   def test005(self):
+       cata=SIMP(statut='o',typ='I',validators=EnumVal((3,2,4,8,9,15)))
+       liste=(
+              (1,0),(9,1),(15,1),
+              (50,0),(1.25,0),
+             )
+       self._test(cata,liste)
+
+   def test006(self):
+       cata=SIMP(statut='o',typ='I',max='**',validators=OrdList("croissant"))
+       liste=(
+              (1,1),((1,3),1),
+              ((50,60,701),1),
+              ((100,50,60,701),0),
+              ((3,1),0),
+              ((1,3,2),0),
+              ((1.,2.),0),
+             )
+       self._test(cata,liste)
+
+   def test007(self):
+       cata=SIMP(statut='o',typ='I',min=1,max=4,validators=PairVal())
+       liste=(
+             (2,1),((2,4),1),
+             (3,0),((3,4),0),
+             ((2,3),0),((3,5),0),
+             ((2,4,6,8),1),
+             ((2,4,6,8,10),0),
+             )
+       self._test(cata,liste)
+
+   def test008(self):
+       cata=SIMP(statut='o',typ='I',validators=RangeVal(3,15))
+       liste=(
+             (2,0),(4,1),
+             (16,0),(14,1),
+             )
+       self._test(cata,liste)
+
+   def test009(self):
+       cata=SIMP(statut='o',typ='I',max='**',validators=CardVal(3,15))
+       liste=(
+             (2,0),((2,4),0),
+             (3,0),((3,4),0),
+             ((2,3),0),((3,5),0),
+             ((2,4,6,8),1),
+             ((2,4,6,8,10),1),
+             )
+       self._test(cata,liste)
+
+   def test010(self):
+       cata=SIMP(statut='o',typ='TXM',min=1,max=6,validators=NoRepeat())
+       liste=(
+              ("aa",1),("aaa",1),
+              (("aaaa","aaaaa","axyzaa","bbbbaaa","zzz"),1),
+              (("aaaa","aaaa","axyz","bbbb","zzz"),0),
+              (("aaaa","axyz","bbbb","zzz"),1),
+              ("aaaa",1),("aaaaa",1),
+              ("axyzaa",1),("bbbbaaa",1),
+             )
+       self._test(cata,liste)
+
+   def test011(self):
+       cata=SIMP(statut='o',typ='TXM',min=1,max=6,into =( "TUTU","TATA","CCCC"),validators=NoRepeat())
+       liste=(
+              ("TUTU",1),("TATA",1),
+              (("TUTU","TATA","CCCC"),1),
+              (("TUTU","TATA","CCCC","TUTU","TATA","CCCC"),0),
+              (("TUTU","TATA","CCCC","TUTU","TATA","CCCC","TUTU","TATA","CCCC"),0),
+             )
+       self._test(cata,liste)
+
+   def test012(self):
+       cata=SIMP(statut='o',typ='I',min=1,max=1,into =( 1,2,3),validators=PairVal())
+       liste=(
+              (2,1),(1,0),(3,0),(4,0),
+             )
+       self._test(cata,liste)
+
+   def test013(self):
+       cata=SIMP(statut='o',typ='I',min=1,max=1,validators=PairVal())
+       liste=(
+              (2,1),(1,0),(3,0),(4,1),
+             )
+       self._test(cata,liste)
+
+   def test014(self):
+       cata=SIMP(statut='o',typ='I',min=1,max=6,validators=PairVal())
+       liste=(
+              (2,1),(1,0),(3,0),(4,1),
+              ((2,4,6,8),1),((2,4,6,8,10,12,14),0),
+              ((2,4,6,8,7),0),((2,4,6,8,10,12,14,23),0),
+             )
+       self._test(cata,liste)
+
+   def test015(self):
+       """Test du validateur OU : pas de doublon OU valeur paire """
+       cata=SIMP(statut='o',typ='I',min=1,max=6,validators=(NoRepeat(),PairVal()))
+       liste=(
+              (2,1),(1,1),(3,1),(4,1),
+              ((2,4,6,8),1),((2,4,6,8,10,12,14),0),
+              ((1,2,3,4),1),
+              ((2,4,6,8,7),1),((2,4,6,8,10,12,14,23),0),
+             )
+       self._test(cata,liste)
+
+   def test016(self):
+       """Test du validateur ET : pas de doublon ET valeur paire """
+       cata=SIMP(statut='o',typ='I',min=1,max=6,validators=[NoRepeat(),PairVal()])
+       liste=( ((2,),1),(None,0),((1,3,5),0),
+               ((2,4,6),1),
+               ((1,3,5),0),
+               ((2,4,4),0),
+             )
+       self._test(cata,liste)
diff --git a/Tests/testelem/testvalidator2.py b/Tests/testelem/testvalidator2.py
new file mode 100644 (file)
index 0000000..31b3b1b
--- /dev/null
@@ -0,0 +1,126 @@
+# coding=utf-8
+from Accas import *
+
+import unittest
+import compare
+OK="""Mot-clé simple : mcs
+Fin Mot-clé simple : mcs
+"""
+
+class TestValidCase(unittest.TestCase):
+   def setUp(self):
+       pass
+
+   def tearDown(self):
+       pass
+
+   def _test(self,cata,liste):
+       for valeur,report in liste:
+           o=cata(valeur,'mcs',None)
+           msg=""
+           rep=str(o.report())
+           valid=compare.check(rep,report)
+           if not valid:
+              msg="le rapport d'erreur est incorrect.\n valeur = %s\n expected =\n%s\n got =\n%s " % (valeur,report,rep)
+              print msg
+           self.assert_(valid,msg=msg)
+
+   def test001(self):
+       """ Validateur LongStr(3,5) """
+       cata=SIMP(typ='TXM',validators=LongStr(3,5))
+       liste=(("aa",
+"""Mot-clé simple : mcs
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé :  mcs devrait avoir  longueur de la chaine entre 3 et 5 !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs
+"""),("aaa",OK),
+              ("aaaa",OK),("aaaaa",OK),
+              ("axyzaa",
+"""Mot-clé simple : mcs
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé :  mcs devrait avoir  longueur de la chaine entre 3 et 5 !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs
+"""),("bbbbaaa",
+"""Mot-clé simple : mcs
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé :  mcs devrait avoir  longueur de la chaine entre 3 et 5 !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs
+"""),
+             )
+       self._test(cata,liste)
+
+   def test010(self):
+       cata=SIMP(statut='o',typ='TXM',min=1,max=6,validators=NoRepeat())
+       liste=(
+              ("aa",OK),("aaa",OK),
+              (("aaaa","aaaaa","axyzaa","bbbbaaa","zzz"),OK),
+              (("aaaa","aaaa","axyz","bbbb","zzz"),
+"""Mot-clé simple : mcs
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé :  mcs devrait avoir  : pas de présence de doublon dans la liste !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs
+"""),
+              (("aaaa","axyz","bbbb","zzz"),OK),
+              ("aaaa",OK),("aaaaa",OK),
+              ("axyzaa",OK),("bbbbaaa",OK),
+             )
+       self._test(cata,liste)
+
+   def test011(self):
+       cata=SIMP(statut='o',typ='TXM',min=1,max=6,into =( "TUTU","TATA","CCCC"),validators=NoRepeat())
+       liste=(
+              ("TUTU",OK),("TATA",OK),
+              (("TUTU","TATA","CCCC"),OK),
+              (("TUTU","TATA","CCCC","TUTU","TATA","CCCC"),
+"""Mot-clé simple : mcs
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé :  mcs devrait avoir  : pas de présence de doublon dans la liste !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs
+"""),
+              (("TUTU","TATA","CCCC","TUTU","TATA","CCCC","TUTU","TATA","CCCC"),
+"""Mot-clé simple : mcs
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Nombre d'arguments de ('TUTU', 'TATA', 'CCCC', 'TUTU', 'TATA', 'CCCC', 'TUTU', !
+   ! 'TATA', 'CCCC') incorrect pour mcs (min = 1, max = 6)                          !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs
+"""),
+             )
+       self._test(cata,liste)
+
+   def test016(self):
+       """Test du validateur ET : pas de doublon ET valeur paire """
+       cata=SIMP(statut='o',typ='I',min=1,max=6,validators=[NoRepeat(),PairVal()])
+       liste=( ((2,),OK),(None,
+"""Mot-clé simple : mcs
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé :  mcs  obligatoire non valorisé !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! None n'est pas une valeur autorisée !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs
+"""),((1,3,5),
+"""Mot-clé simple : mcs
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé :  mcs devrait avoir  : pas de présence de doublon dans la liste !
+   !  et valeur paire                                                         !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs
+"""),
+               ((2,4,6),OK),
+               ((2,4,4),
+"""Mot-clé simple : mcs
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé :  mcs devrait avoir  : pas de présence de doublon dans la liste !
+   !  et valeur paire                                                         !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+Fin Mot-clé simple : mcs
+"""),
+             )
+       self._test(cata,liste)