# -*- coding: utf-8 -*-
import sys
from os import mkdir
from os.path import join, isdir
from shutil import rmtree, copyfile
from random import uniform
from PySide2 import QtWidgets
from PySide2.QtCore import Qt
from PySide2.QtTest import QTest
from pyleecan.Classes.MatMagnetics import MatMagnetics
from pyleecan.Classes.Material import Material
from pyleecan.GUI.Dialog.DMatLib.DMatSetup.DMatSetup import DMatSetup
from Tests import save_load_path as save_path, TEST_DATA_DIR
import pytest
[docs]class TestDMatSetup(object):
"""Test that the widget DMatSetup behave like it should"""
[docs] @pytest.fixture
def setup(self):
"""Run at the begining of every test to setup the gui"""
if not QtWidgets.QApplication.instance():
self.app = QtWidgets.QApplication(sys.argv)
else:
self.app = QtWidgets.QApplication.instance()
work_path = join(save_path, "Material")
# Delete old test if needed
if isdir(work_path):
rmtree(work_path)
mkdir(work_path)
copyfile(
join(TEST_DATA_DIR, "Material", "Magnet1.json"),
join(work_path, "Magnet1.json"),
)
test_obj = Material()
test_obj.name = "Magnet1"
test_obj.path = join(work_path, "Magnet1.json")
test_obj.is_isotropic = True
test_obj.elec.rho = 0.11
test_obj.mag = MatMagnetics(mur_lin=0.12, Wlam=0.13)
test_obj.struct.rho = 0.14
test_obj.struct.Ex = 0.15
test_obj.struct.Ey = 0.152
test_obj.struct.Ez = 0.153
test_obj.struct.nu_xy = 0.16
test_obj.struct.nu_yz = 0.162
test_obj.struct.nu_xz = 0.163
test_obj.struct.Gxy = 0.17
test_obj.struct.Gyz = 0.172
test_obj.struct.Gxz = 0.173
test_obj.HT.lambda_x = 0.18
test_obj.HT.lambda_y = 0.182
test_obj.HT.lambda_z = 0.183
test_obj.HT.Cp = 0.19
test_obj.HT.alpha = 0.20
test_obj.eco.cost_unit = 0.21
widget = DMatSetup(material=test_obj)
yield {"widget": widget, "work_path": work_path, "test_obj": test_obj}
self.app.quit()
rmtree(work_path)
[docs] def test_init(self, setup):
"""Check that the Widget spinbox initialise to the lamination value"""
assert setup["widget"].nav_ther.currentIndex() == 1
assert setup["widget"].nav_meca.currentIndex() == 1
assert setup["widget"].le_name.text() == "Magnet1"
assert setup["widget"].is_isotropic.checkState() == Qt.Checked
assert setup["widget"].lf_rho_elec.value() == 0.11
assert setup["widget"].lf_mur_lin.value() == 0.12
assert setup["widget"].lf_Wlam.value() == 0.13
assert setup["widget"].lf_rho_meca.value() == 0.14
assert setup["widget"].lf_E.value() == 0.15
assert setup["widget"].lf_nu.value() == 0.16
assert setup["widget"].lf_G.value() == 0.17
assert setup["widget"].lf_L.value() == 0.18
assert setup["widget"].lf_Cp.value() == 0.19
assert setup["widget"].lf_alpha.value() == 0.2
assert setup["widget"].lf_cost_unit.value() == 0.21
# Test Raw Material
setup["test_obj"].mag = None
setup["widget"] = DMatSetup(material=setup["test_obj"])
assert setup["widget"].nav_ther.currentIndex() == 1
assert setup["widget"].nav_meca.currentIndex() == 1
assert setup["widget"].le_name.text() == "Magnet1"
assert setup["widget"].is_isotropic.checkState() == Qt.Checked
assert setup["widget"].lf_rho_elec.value() == 0.11
assert setup["widget"].lf_rho_meca.value() == 0.14
assert setup["widget"].lf_E.value() == 0.15
assert setup["widget"].lf_nu.value() == 0.16
assert setup["widget"].lf_G.value() == 0.17
assert setup["widget"].lf_L.value() == 0.18
assert setup["widget"].lf_Cp.value() == 0.19
assert setup["widget"].lf_alpha.value() == 0.2
assert setup["widget"].lf_cost_unit.value() == 0.21
# Test Magnet material Non isotropic
setup["test_obj"].is_isotropic = False
setup["test_obj"].mag = MatMagnetics(mur_lin=0.22, Brm20=0.23, alpha_Br=0.24)
setup["widget"] = DMatSetup(material=setup["test_obj"])
assert setup["widget"].nav_ther.currentIndex() == 0
assert setup["widget"].nav_meca.currentIndex() == 0
assert setup["widget"].le_name.text() == "Magnet1"
assert setup["widget"].is_isotropic.checkState() == Qt.Unchecked
assert setup["widget"].lf_rho_elec.value() == 0.11
assert setup["widget"].lf_mur_lin.value() == 0.22
assert setup["widget"].lf_Brm20.value() == 0.23
assert setup["widget"].lf_alpha_Br.value() == 0.24
assert setup["widget"].lf_rho_meca.value() == 0.14
assert setup["widget"].lf_Ex.value() == 0.15
assert setup["widget"].lf_Ey.value() == 0.152
assert setup["widget"].lf_Ez.value() == 0.153
assert setup["widget"].lf_nu_xy.value() == 0.16
assert setup["widget"].lf_nu_yz.value() == 0.162
assert setup["widget"].lf_nu_xz.value() == 0.163
assert setup["widget"].lf_Gxy.value() == 0.17
assert setup["widget"].lf_Gyz.value() == 0.172
assert setup["widget"].lf_Gxz.value() == 0.173
assert setup["widget"].lf_Lx.value() == 0.18
assert setup["widget"].lf_Ly.value() == 0.182
assert setup["widget"].lf_Lz.value() == 0.183
assert setup["widget"].lf_Cp.value() == 0.19
assert setup["widget"].lf_alpha.value() == 0.2
assert setup["widget"].lf_cost_unit.value() == 0.21
# Test Magnet material None elec
setup["test_obj"].elec = None
setup["widget"] = DMatSetup(material=setup["test_obj"])
assert setup["widget"].mat.elec is not None
# Test Magnet material None eco
setup["test_obj"].eco = None
setup["widget"] = DMatSetup(material=setup["test_obj"])
assert setup["widget"].mat.eco is not None
# Test Magnet material None HT
setup["test_obj"].HT = None
setup["widget"] = DMatSetup(material=setup["test_obj"])
assert setup["widget"].mat.HT is not None
# Test Magnet material None struct
setup["test_obj"].struct = None
setup["widget"] = DMatSetup(material=setup["test_obj"])
assert setup["widget"].mat.struct is not None
[docs] def test_set_name(self, setup):
"""Check that you can change the name and the path"""
setup["widget"].le_name.setText("Magnet2")
setup["widget"].le_name.editingFinished.emit()
assert setup["widget"].mat.name == "Magnet2"
assert setup["widget"].mat.path == join(setup["work_path"], "Magnet2.json")
[docs] def test_set_rho_elec(self, setup):
"""Check that the Widget allow to update rho_elec"""
setup["widget"].lf_rho_elec.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_rho_elec, str(value))
setup["widget"].lf_rho_elec.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.elec.rho == value
[docs] def test_set_mur_lin(self, setup):
"""Check that the Widget allow to update mur_lin"""
setup["widget"].lf_mur_lin.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_mur_lin, str(value))
setup["widget"].lf_mur_lin.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.mag.mur_lin == value
setup["test_obj"].mag = MatMagnetics()
setup["widget"] = DMatSetup(material=setup["test_obj"])
setup["widget"].lf_mur_lin.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_mur_lin, str(value))
setup["widget"].lf_mur_lin.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.mag.mur_lin == value
[docs] def test_set_Wlam(self, setup):
"""Check that the Widget allow to update Wlam"""
setup["widget"].lf_Wlam.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_Wlam, str(value))
setup["widget"].lf_Wlam.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.mag.Wlam == value
[docs] def test_set_Brm20(self, setup):
"""Check that the Widget allow to update Brm20"""
setup["test_obj"].mag = MatMagnetics()
setup["widget"] = DMatSetup(material=setup["test_obj"])
setup["widget"].lf_Brm20.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_Brm20, str(value))
setup["widget"].lf_Brm20.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.mag.Brm20 == value
[docs] def test_set_alpha_Br(self, setup):
"""Check that the Widget allow to update alpha_Br"""
# Set Material for Magnet
setup["test_obj"].mag = MatMagnetics()
setup["widget"] = DMatSetup(material=setup["test_obj"])
setup["widget"].lf_alpha_Br.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_alpha_Br, str(value))
setup["widget"].lf_alpha_Br.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.mag.alpha_Br == value
[docs] def test_set_rho_meca(self, setup):
"""Check that the Widget allow to update rho_meca"""
setup["widget"].lf_rho_meca.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_rho_meca, str(value))
setup["widget"].lf_rho_meca.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.rho == value
[docs] def test_set_E(self, setup):
"""Check that the Widget allow to update E"""
setup["widget"].lf_E.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_E, str(value))
setup["widget"].lf_E.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.Ex == value
assert setup["widget"].mat.struct.Ey == value
assert setup["widget"].mat.struct.Ez == value
[docs] def test_set_Ex(self, setup):
"""Check that the Widget allow to update Ex"""
setup["widget"].lf_Ex.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_Ex, str(value))
setup["widget"].lf_Ex.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.Ex == value
[docs] def test_set_Ey(self, setup):
"""Check that the Widget allow to update Ey"""
setup["widget"].lf_Ey.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_Ey, str(value))
setup["widget"].lf_Ey.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.Ey == value
[docs] def test_set_Ez(self, setup):
"""Check that the Widget allow to update Ez"""
setup["widget"].lf_Ez.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_Ez, str(value))
setup["widget"].lf_Ez.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.Ez == value
[docs] def test_set_nu(self, setup):
"""Check that the Widget allow to update nu"""
setup["widget"].lf_nu.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_nu, str(value))
setup["widget"].lf_nu.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.nu_xy == value
assert setup["widget"].mat.struct.nu_yz == value
assert setup["widget"].mat.struct.nu_xz == value
[docs] def test_set_nu_xy(self, setup):
"""Check that the Widget allow to update nu_xy"""
setup["widget"].lf_nu_xy.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_nu_xy, str(value))
setup["widget"].lf_nu_xy.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.nu_xy == value
[docs] def test_set_nu_xz(self, setup):
"""Check that the Widget allow to update nu_xz"""
setup["widget"].lf_nu_xz.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_nu_xz, str(value))
setup["widget"].lf_nu_xz.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.nu_xz == value
[docs] def test_set_nu_yz(self, setup):
"""Check that the Widget allow to update nu_yz"""
setup["widget"].lf_nu_yz.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_nu_yz, str(value))
setup["widget"].lf_nu_yz.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.nu_yz == value
[docs] def test_set_G(self, setup):
"""Check that the Widget allow to update G"""
setup["widget"].lf_G.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_G, str(value))
setup["widget"].lf_G.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.Gxy == value
assert setup["widget"].mat.struct.Gyz == value
assert setup["widget"].mat.struct.Gxz == value
[docs] def test_set_Gxy(self, setup):
"""Check that the Widget allow to update Gxy"""
setup["widget"].lf_Gxy.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_Gxy, str(value))
setup["widget"].lf_Gxy.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.Gxy == value
[docs] def test_set_Gyz(self, setup):
"""Check that the Widget allow to update Gyz"""
setup["widget"].lf_Gyz.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_Gyz, str(value))
setup["widget"].lf_Gyz.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.Gyz == value
[docs] def test_set_Gxz(self, setup):
"""Check that the Widget allow to update Gxz"""
setup["widget"].lf_Gxz.clear() # Clear the field before writing
value = round(uniform(0, 1), 4)
QTest.keyClicks(setup["widget"].lf_Gxz, str(value))
setup["widget"].lf_Gxz.editingFinished.emit() # To trigger the slot
assert setup["widget"].mat.struct.Gxz == value
[docs] def test_set_is_isotropic(self, setup):
"""Check that the Widget allow to change value of is_isotropic"""
QTest.mouseClick(
setup["widget"].is_isotropic, Qt.LeftButton
) # Clicking the checkbox with the leftbutton
assert setup["widget"].is_isotropic.isChecked() == False
assert setup["widget"].nav_meca.currentIndex() == 0
assert setup["widget"].nav_ther.currentIndex() == 0
QTest.mouseClick(setup["widget"].is_isotropic, Qt.LeftButton)
assert setup["widget"].is_isotropic.isChecked() == True
assert setup["widget"].nav_meca.currentIndex() == 1
assert setup["widget"].nav_ther.currentIndex() == 1
[docs] def test_set_cost_unit(self, setup):
"""Check that the Widget allow to update cost_unit"""
setup["widget"].lf_cost_unit.clear()
value = 0.4548
QTest.keyClicks(setup["widget"].lf_cost_unit, str(value))
setup["widget"].lf_cost_unit.editingFinished.emit()
assert setup["widget"].mat.eco.cost_unit == value
[docs] def test_set_CP(self, setup):
"""Check that the Widget allow to update mat.HT.Cp"""
setup["widget"].lf_Cp.clear()
value = 0.4548
QTest.keyClicks(setup["widget"].lf_Cp, str(value))
setup["widget"].lf_Cp.editingFinished.emit()
assert setup["widget"].mat.HT.Cp == value
[docs] def test_set_alpha(self, setup):
"""Check that the Widget allow to update mat.HT.alpha"""
setup["widget"].lf_alpha.clear()
value = 0.4548
QTest.keyClicks(setup["widget"].lf_alpha, str(value))
setup["widget"].lf_alpha.editingFinished.emit()
assert setup["widget"].mat.HT.alpha == value
[docs] def test_set_lambda(self, setup):
"""Check that the Widget allow to update mat.HT.lambda"""
setup["widget"].lf_L.clear()
value = 0.4548
QTest.keyClicks(setup["widget"].lf_L, str(value))
setup["widget"].lf_L.editingFinished.emit()
assert setup["widget"].mat.HT.lambda_x == value
assert setup["widget"].mat.HT.lambda_y == value
assert setup["widget"].mat.HT.lambda_z == value
[docs] def test_set_lambda_x_y_z(self, setup):
"""Check that the Widget allow to update mat.HT.lambda_x_y_z"""
setup["widget"].lf_Lx.clear()
value = 0.4548
QTest.keyClicks(setup["widget"].lf_Lx, str(value))
setup["widget"].lf_Lx.editingFinished.emit()
assert setup["widget"].mat.HT.lambda_x == value
setup["widget"].lf_Ly.clear()
value = 0.4548
QTest.keyClicks(setup["widget"].lf_Ly, str(value))
setup["widget"].lf_Ly.editingFinished.emit()
assert setup["widget"].mat.HT.lambda_y == value
setup["widget"].lf_Lz.clear()
value = 0.4548
QTest.keyClicks(setup["widget"].lf_Lz, str(value))
setup["widget"].lf_Lz.editingFinished.emit()
assert setup["widget"].mat.HT.lambda_z == value