Commit 62debc29 authored by Samuel GAIST's avatar Samuel GAIST
Browse files

[test] Implement test example

parent b2fb4c7c
# vim: set fileencoding=utf-8 :
###############################################################################
# #
# Copyright (c) 2019 Idiap Research Institute, http://www.idiap.ch/ #
# Contact: beat.support@idiap.ch #
# #
# This file is part of the beat.editor module of the BEAT platform. #
# #
# Commercial License Usage #
# Licensees holding valid commercial BEAT licenses may use this file in #
# accordance with the terms contained in a written agreement between you #
# and Idiap. For further information contact tto@idiap.ch #
# #
# Alternatively, this file may be used under the terms of the GNU Affero #
# Public License version 3 as published by the Free Software and appearing #
# in the file LICENSE.AGPL included in the packaging of this file. #
# The BEAT platform is distributed in the hope that it will be useful, but #
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #
# or FITNESS FOR A PARTICULAR PURPOSE. #
# #
# You should have received a copy of the GNU Affero Public License along #
# with the BEAT platform. If not, see http://www.gnu.org/licenses/. #
# #
###############################################################################
import pytest
from PyQt5 import QtCore
from PyQt5.QtCore import QStringListModel
from PyQt5.QtWidgets import QComboBox
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QGridLayout
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QWidget
from ..widgets.editor import AbstractAssetEditor
class Field(QWidget):
def __init__(self, dataformat_model, parent=None):
super(Field, self).__init__(parent)
self.dataformat_name = QLineEdit()
self.dataformat_box = QComboBox()
self.dataformat_box.setModel(dataformat_model)
layout = QGridLayout(self)
layout.addWidget(self.dataformat_name, 0, 0)
layout.addWidget(self.dataformat_box, 0, 1)
@property
def format_name(self):
return self.dataformat_name.text()
@format_name.setter
def format_name(self, name):
self.dataformat_name.setText(name)
@property
def format_type(self):
return self.dataformat_box.currentText()
@format_type.setter
def format_type(self, name):
self.dataformat_box.setCurrentText(name)
class MockAssetEditor(AbstractAssetEditor):
"""
Base class of all asset editors
"""
def __init__(self, parent=None):
super(MockAssetEditor, self).__init__(parent)
self.dataformat_model = None
self.add_field_button = QPushButton(self.tr("Add"))
layout = QVBoxLayout(self)
layout.addWidget(self.add_field_button)
self.add_field_button.clicked.connect(self.__add_field)
def __add_field(self):
self.layout().addWidget(Field(self.dataformat_model))
def set_dataformat_model(self, model):
self.dataformat_model = model
def load_json(self, json_object):
"""Load the json object passed as parameter"""
for name, type_ in json_object.items():
field = Field(self.dataformat_model)
field.format_name = name
field.format_type = type_
self.layout().addWidget(field)
def dump_json(self):
"""Returns the json representation of the asset"""
field_list = self.findChildren(Field)
json_data = {}
for field in field_list:
json_data[field.format_name] = field.format_type
return json_data
def test_json_load_and_dump(qtbot):
json_reference = {"value32": "float32", "value64": "float64"}
dataformat_model = QStringListModel(["float32", "float64", "int32", "int64"])
widget = MockAssetEditor()
widget.set_dataformat_model(dataformat_model)
widget.load_json(json_reference)
assert widget.dump_json() == json_reference
def test_dataformat_creation(qtbot):
# json_reference = {"value32": "float32", "value64": "float64"}
dataformat_model = QStringListModel(["float32", "float64", "int32", "int64"])
widget = MockAssetEditor()
widget.set_dataformat_model(dataformat_model)
qtbot.mouseClick(widget.add_field_button, QtCore.Qt.LeftButton)
fields = widget.findChildren(Field)
assert len(fields) == 1
field = fields[0]
qtbot.mouseClick(field.dataformat_box, QtCore.Qt.LeftButton)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment