Esempio n. 1
0
 def add_extension(self, element):
     if isinstance(element, Port):
         PortControl.add_port(element)
     elif isinstance(element, CodeTemplate):
         CodeTemplateControl.add_code_template(element)
     elif isinstance(element, BlockModel):
         BlockControl.add_new_block(element)
         self.update_blocks()
     System.reload()
Esempio n. 2
0
class TestBlockControl(TestCase):
    def setUp(self):
        """Do the test basic setup."""
        #data = {"label": ("Type"), "name":"type", "value": "text"}
        self.blockmodel = BlockModel()

        self.blockmodel.id = 1
        self.blockmodel.x = 2
        self.blockmodel.y = 2

        self.blockmodel.language = "c"
        self.blockmodel.framework = "opencv"
        self.blockmodel.help = "Adiciona bordas na imagem."
        self.blockmodel.label = "Teste BlockModel"
        self.blockmodel.color = "0:180:210:150"
        self.blockmodel.in_ports = [{
            "type": "mosaicode_c_opencv.extensions.ports.image",
            "name": "input_image",
            "label": "Input Image"
        }, {
            "type": "mosaicode_c_opencv.extensions.ports.int",
            "name": "border_size",
            "label": "Border Size"
        }]
        self.blockmodel.out_ports = [{
            "type": "mosaicode_c_opencv.extensions.ports.image",
            "name": "output_image",
            "label": "Output Image"
        }]
        self.blockmodel.group = "Experimental"

        self.blockmodel.properties = [{
            "label": "Color",
            "name": "color",
            "type": MOSAICODE_COLOR,
            "value": "#FF0000"
        }, {
            "name":
            "type",
            "label":
            "Type",
            "type":
            MOSAICODE_COMBO,
            "value":
            "IPL_BORDER_CONSTANT",
            "values": [
                "IPL_BORDER_CONSTANT", "IPL_BORDER_REPLICATE",
                "IPL_BORDER_REFLECT", "IPL_BORDER_WRAP"
            ]
        }, {
            "label": "Border Size",
            "name": "border_size",
            "type": MOSAICODE_INT,
            "value": "50"
        }]

        self.blockmodel.codes[0] = \
            "CvScalar get_scalar_color(const char * rgbColor){\n" + \
            "   if (strlen(rgbColor) < 13 || rgbColor[0] != '#')\n" + \
            "       return cvScalar(0,0,0,0);\n" + \
            "   char r[4], g[4], b[4];\n" + \
            "   strncpy(r, rgbColor+1, 4);\n" + \
            "   strncpy(g, rgbColor+5, 4);\n" + \
            "   strncpy(b, rgbColor+9, 4);\n" + \
            "\n" + \
            "   int ri, gi, bi = 0;\n" + \
            "   ri = (int)strtol(r, NULL, 16);\n" + \
            "   gi = (int)strtol(g, NULL, 16);\n" + \
            "   bi = (int)strtol(b, NULL, 16);\n" + \
            "\n" + \
            "   ri /= 257;\n" + \
            "   gi /= 257;\n" + \
            "   bi /= 257;\n" + \
            "   \n" + \
            "   return cvScalar(bi, gi, ri, 0);\n" + \
            "}\n"

        self.blockmodel.codes[1] = \
            "IplImage * block$id$_img_i0 = NULL;\n" + \
            "int block$id$_int_i1 = $prop[border_size]$;\n" + \
            "IplImage * block$id$_img_o0 = NULL;\n"

        self.blockmodel.codes[2] = \
            'if(block$id$_img_i0){\n' + \
            '\tCvSize size$id$ = cvSize(block$id$_img_i0->width +' + \
            ' block$id$_int_i1 * 2, block$id$_img_i0->height' + \
            ' + block$id$_int_i1 * 2);\n' + \
            '\tblock$id$_img_o0 = cvCreateImage(size$id$,' + \
            ' block$id$_img_i0->depth,block$id$_img_i0->nChannels);\n' + \
            '\tCvPoint point$id$ = cvPoint' + \
            '(block$id$_int_i1, block$id$_int_i1);\n' + \
            '\tCvScalar color = get_scalar_color("$prop[color]$");\n' + \
            '\tcvCopyMakeBorder(block$id$_img_i0, block$id$_img_o0,' + \
            ' point$id$, $prop[type]$, color);\n' + \
            '}\n'

        self.blockcontrol = BlockControl()

    # ----------------------------------------------------------------------
    def test_export_xml(self):
        self.assertIsNone(self.blockcontrol.export_xml())

    # ----------------------------------------------------------------------
    def test_export_python(self):
        self.assertIsNone(self.blockcontrol.export_python())

    # ----------------------------------------------------------------------
    def test_load(self):
        file_name = "Aa"
        self.assertIsNone(self.blockcontrol.load(file_name))
        file_name = ""
        self.assertIsNone(self.blockcontrol.load(file_name))
        file_name = "Teste.xml"
        self.assertIsNone(self.blockcontrol.load(file_name))
        file_name = "Teste.py"
        self.assertIsNone(self.blockcontrol.load(file_name))
        # file_name = None
        # self.assertIsNone(self.blockcontrol.load(file_name))

    # ----------------------------------------------------------------------
    def test_add_new_block(self):
        self.assertIsNone(self.blockcontrol.add_new_block(self.blockmodel))

        # NÃO TRATA None
        # self.assertIsNone(self.blockcontrol.add_new_block(None))

    # ----------------------------------------------------------------------
    def test_delete_block(self):
        #self.assertFalse(self.blockcontrol.delete_block("test_codegenerator.py"))
        #self.assertFalse(self.blockcontrol.delete_block("test_codegenerator.py"))

        #Apresenta um erro de System nao tem blockmodels:
        #self.assertFalse(self.blockcontrol.delete_block(self.blockmodel))
        #self.assertTrue(self.blockcontrol.delete_block(self.blockmodel))
        self.assertIsNotNone(self.blockcontrol.delete_block(self.blockmodel))

        self.blockmodel.id = 1
        self.blockmodel.x = 2
        self.blockmodel.y = 2
        self.blockmodel.type = "c"
        self.blockmodel.source = "/home/lucas/mosaicode/extensions/c/opencv/mosaicode.model.blockmodel"

        self.blockmodel.language = "c"
        self.blockmodel.framework = "opencv"
        self.blockmodel.help = "Adiciona bordas na imagem."
        self.blockmodel.label = "Testing A"
        self.blockmodel.color = "0:180:210:150"
        self.blockmodel.in_ports = [{
            "type": "mosaicode_c_opencv.extensions.ports.image",
            "name": "input_image",
            "label": "Input Image"
        }, {
            "type": "mosaicode_c_opencv.extensions.ports.int",
            "name": "border_size",
            "label": "Border Size"
        }]
        self.blockmodel.out_ports = [{
            "type": "mosaicode_c_opencv.extensions.ports.image",
            "name": "output_image",
            "label": "Output Image"
        }]
        self.blockmodel.group = "Experimental"

        self.blockmodel.properties = [{
            "label": "Color",
            "name": "color",
            "type": MOSAICODE_COLOR,
            "value": "#FF0000"
        }, {
            "name":
            "type",
            "label":
            "Type",
            "type":
            MOSAICODE_COMBO,
            "value":
            "IPL_BORDER_CONSTANT",
            "values": [
                "IPL_BORDER_CONSTANT", "IPL_BORDER_REPLICATE",
                "IPL_BORDER_REFLECT", "IPL_BORDER_WRAP"
            ]
        }, {
            "label": "Border Size",
            "name": "border_size",
            "type": MOSAICODE_INT,
            "value": "50"
        }]

        self.blockmodel.codes[0] = \
            "CvScalar get_scalar_color(const char * rgbColor){\n" + \
            "   if (strlen(rgbColor) < 13 || rgbColor[0] != '#')\n" + \
            "       return cvScalar(0,0,0,0);\n" + \
            "   char r[4], g[4], b[4];\n" + \
            "   strncpy(r, rgbColor+1, 4);\n" + \
            "   strncpy(g, rgbColor+5, 4);\n" + \
            "   strncpy(b, rgbColor+9, 4);\n" + \
            "\n" + \
            "   int ri, gi, bi = 0;\n" + \
            "   ri = (int)strtol(r, NULL, 16);\n" + \
            "   gi = (int)strtol(g, NULL, 16);\n" + \
            "   bi = (int)strtol(b, NULL, 16);\n" + \
            "\n" + \
            "   ri /= 257;\n" + \
            "   gi /= 257;\n" + \
            "   bi /= 257;\n" + \
            "   \n" + \
            "   return cvScalar(bi, gi, ri, 0);\n" + \
            "}\n"

        self.blockmodel.codes[1] = \
            "IplImage * block$id$_img_i0 = NULL;\n" + \
            "int block$id$_int_i1 = $prop[border_size]$;\n" + \
            "IplImage * block$id$_img_o0 = NULL;\n"

        self.blockmodel.codes[2] = \
            'if(block$id$_img_i0){\n' + \
            '\tCvSize size$id$ = cvSize(block$id$_img_i0->width +' + \
            ' block$id$_int_i1 * 2, block$id$_img_i0->height' + \
            ' + block$id$_int_i1 * 2);\n' + \
            '\tblock$id$_img_o0 = cvCreateImage(size$id$,' + \
            ' block$id$_img_i0->depth,block$id$_img_i0->nChannels);\n' + \
            '\tCvPoint point$id$ = cvPoint' + \
            '(block$id$_int_i1, block$id$_int_i1);\n' + \
            '\tCvScalar color = get_scalar_color("$prop[color]$");\n' + \
            '\tcvCopyMakeBorder(block$id$_img_i0, block$id$_img_o0,' + \
            ' point$id$, $prop[type]$, color);\n' + \
            '}\n'

        #self.assertFalse(self.blockcontrol.delete_block(self.blockmodel))
        #self.assertTrue(self.blockcontrol.delete_block(self.blockmodel))
        self.assertIsNotNone(self.blockcontrol.delete_block(self.blockmodel))

        # PARA QUE O TESTE ABAIXO SEJA EXECUTADO,
        # DEVE-SE CRIAR UM ARQUIVO c.xml DENTRO
        # DA PASTA mosaicode/extensions, QUE SE
        # ENCONTRA NA home do usuário. ASSIM,
        # O TESTE IRÁ ABRANGER 100% DA CLASSE.

        # LEMBRANDO QUE, ISTO É ERRADO, POIS NÃO
        # EXCLUIRÁ O PLUGIN EM SI, MAS, UM ARQUIVO
        # QUALQUER XML. CASO NÃO SE DELETE, NÃO APRESENTA
        # NENHUMA MENSAGEM DE ERRO.
        self.blockmodel.type = "c"
        self.blockmodel.source = "xml"

        #self.assertFalse(self.blockcontrol.delete_block(self.blockmodel))
        #self.assertFalse(self.blockcontrol.delete_block(self.blockmodel))
        self.assertIsNotNone(self.blockcontrol.delete_block(self.blockmodel))

    # ----------------------------------------------------------------------
    def test_print_block(self):

        #self.assertIsNone(self.blockcontrol.print_block("test_codegenerator.py"))
        self.assertIsNone(self.blockcontrol.print_block(self.blockmodel))
Esempio n. 3
0
 def test_add_new_block(self):
     BlockControl.add_new_block(self.create_block())
Esempio n. 4
0
 def add_new_block(self, block):
     BlockControl.add_new_block(block)
     self.update_blocks()
Esempio n. 5
0
 def add_new_block(self, block):
     BlockControl.add_new_block(block)
     self.main_window.block_notebook.update()
Esempio n. 6
0
 def test_export_xml(self):
     System()
     System.reload()
     BlockControl.export_xml()
     BlockControl.add_new_block(self.create_block())
     BlockControl.print_block(self.create_block())