Skip to content

Commit

Permalink
CHORE: Improve code coverage (#5337)
Browse files Browse the repository at this point in the history
  • Loading branch information
SMoraisAnsys authored Oct 23, 2024
1 parent 276fc5f commit 3098639
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 48 deletions.
31 changes: 25 additions & 6 deletions _unittest/test_02_3D_modeler.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,6 @@ def test_02_boundingbox(self):
bounding = self.aedtapp.modeler.obounding_box
assert len(bounding) == 6

def test_03_objects(self):
print(self.aedtapp.modeler.oeditor)
print(self.aedtapp.modeler._odefinition_manager)
print(self.aedtapp.modeler._omaterial_manager)

def test_04_convert_to_selection(self):
assert type(self.aedtapp.modeler.convert_to_selections("inner", True)) is list
assert type(self.aedtapp.modeler.convert_to_selections("inner", False)) is str
Expand Down Expand Up @@ -256,7 +251,7 @@ def test_18_chamfer(self):

def test_19_clone(self):
self.restore_model()
status, cloned = self.aedtapp.modeler.clone("Poly1")
status, _ = self.aedtapp.modeler.clone("Poly1")
assert status

def test_20_intersect(self):
Expand Down Expand Up @@ -1192,6 +1187,30 @@ def test_63_create_conical_rings(self, add_app):
assert not self.aedtapp.modeler.create_conical_rings("Z", position, 20, 10, 20, 0)
assert not self.aedtapp.modeler.create_conical_rings("Z", [0], 20, 10, 20, 0)

def test_get_group_bounding_box_with_non_existing_group_name(self):
assert self.aedtapp.modeler.get_group_bounding_box("SomeUnknownGroupName") is None

def test_get_group_bounding_box_with_wrong_input_type(self):
with pytest.raises(ValueError):
self.aedtapp.modeler.get_group_bounding_box(5)

def test_get_group_bounding_box_with_existing_group_name(self):
assert self.aedtapp.modeler.get_group_bounding_box("Sheets") is not None

def test_chassis_subtraction(self):
self.restore_model()
chassis = self.aedtapp.modeler.create_box([0, 0, 0], [10, 10, 5], "chassis", "Copper")
# Add vacuum to extend code coverage
self.aedtapp.modeler.create_box([20, 20, 20], [1, 1, 1], "box", "Vacuum")
assert self.aedtapp.modeler.chassis_subtraction(chassis.name)

def test_explicitly_subtract(self):
box_0 = self.aedtapp.modeler.create_box([0, 0, 0], [10, 10, 5], "box_0", "Copper")
box_1 = self.aedtapp.modeler.create_box([0, 0, 0], [5, 5, 5], "box_1", "Copper")
box_2 = self.aedtapp.modeler.create_box([0, 0, 0], [6, 6, 6], "box_2", "Copper")
box_3 = self.aedtapp.modeler.create_box([0, 0, 0], [7, 7, 7], "box_3", "Copper")
assert self.aedtapp.modeler.explicitly_subtract([box_0.name, box_1.name], [box_2.name, box_3.name])

def test_clean_objects_name(self):
box_0 = self.aedtapp.modeler.create_box([0, 0, 0], [10, 10, 10], name="Object_Part0")
box_1 = self.aedtapp.modeler.create_box([5, 5, 0], [1, 1, 1], name="Object_Part1")
Expand Down
8 changes: 4 additions & 4 deletions src/ansys/aedt/core/desktop.py
Original file line number Diff line number Diff line change
Expand Up @@ -1240,7 +1240,7 @@ def project_list(self):
return list(self.odesktop.GetProjectList())

@pyaedt_function_handler()
def analyze_all(self, project=None, design=None):
def analyze_all(self, project=None, design=None): # pragma: no cover
"""Analyze all setups in a project.
Parameters
Expand Down Expand Up @@ -1598,7 +1598,7 @@ def release_desktop(self, close_projects=True, close_on_exit=True):
for edb_object in _edb_sessions:
try:
edb_object.close()
except Exception:
except Exception: # pragma: no cover
self.logger.warning("Failed to close Edb object.")

if close_projects and "PYTEST_CURRENT_TEST" not in os.environ:
Expand All @@ -1609,7 +1609,7 @@ def release_desktop(self, close_projects=True, close_on_exit=True):
except Exception: # pragma: no cover
self.logger.warning(f"Failed to close Project {project}")
result = _close_aedt_application(self, close_on_exit, self.aedt_process_id, self.is_grpc_api)
if not result:
if not result: # pragma: no cover
self.logger.error("Error releasing desktop.")
return False
self.logger._desktop_class = None
Expand Down Expand Up @@ -2281,7 +2281,7 @@ def are_there_simulations_running(self):
return False

@pyaedt_function_handler()
def get_monitor_data(self):
def get_monitor_data(self): # pragma: no cover
"""Check and get monitor data of an existing analysis.
.. note::
Expand Down
76 changes: 38 additions & 38 deletions src/ansys/aedt/core/modeler/cad/primitives.py
Original file line number Diff line number Diff line change
Expand Up @@ -1278,7 +1278,7 @@ def _get_coordinates_data(self): # pragma: no cover
coord.reverse()
return coord

def _get_lists_data(self):
def _get_lists_data(self): # pragma: no cover
"""Retrieve user object list data.
Returns
Expand Down Expand Up @@ -2073,7 +2073,7 @@ def set_objects_deformation(self, assignment):
self.logger.info("Enabling deformation feedback")
try:
self._odesign.SetObjectDeformation(["EnabledObjects:=", assignment])
except Exception:
except Exception: # pragma: no cover
self.logger.error("Failed to enable the deformation dependence")
return False
else:
Expand Down Expand Up @@ -2133,7 +2133,7 @@ def set_objects_temperature(self, assignment, ambient_temperature=22, create_pro
vargs1.append(vargs2)
try:
self._odesign.SetObjectTemperature(vargs1)
except Exception:
except Exception: # pragma: no cover
self.logger.error("Failed to enable the temperature dependence")
return False
else:
Expand Down Expand Up @@ -2528,7 +2528,7 @@ def get_group_bounding_box(self, group):
self._change_geometry_property(vArg1, objs_to_unmodel)
bounding = self.get_model_bounding_box()
self._odesign.Undo()
else:
else: # pragma: no cover
bounding = self.get_model_bounding_box()
return bounding

Expand Down Expand Up @@ -2705,7 +2705,7 @@ def split(
obj_name = tool.name
obj = o.edges[0]
tool_type = "EdgeTool"
else:
else: # pragma: no cover
self.logger.error("Face tool part has to be provided as a string (name) or an int (face id).")
return False
planes = "Dummy"
Expand Down Expand Up @@ -3638,7 +3638,7 @@ def unite(self, assignment, purge=False, keep_originals=False):
vArg2.append("TurnOnNBodyBoolean:=")
vArg2.append(True)
self.oeditor.Unite(vArg1, vArg2)
if szSelections.split(",")[0] in self.unclassified_names:
if szSelections.split(",")[0] in self.unclassified_names: # pragma: no cover
self.logger.error("Error in uniting objects.")
self._odesign.Undo()
self.cleanup_objects()
Expand Down Expand Up @@ -3709,7 +3709,7 @@ def copy(self, assignment):
vArg1 = ["NAME:Selections", "Selections:=", selections]
self.oeditor.Copy(vArg1)
return selections
except AttributeError:
except AttributeError: # pragma: no cover
self.logger.error("Unable to copy selections to clipboard.")
return None

Expand Down Expand Up @@ -3764,7 +3764,7 @@ def intersect(self, assignment, keep_originals=False, **kwargs):

self.oeditor.Intersect(vArg1, vArg2)
unclassified1 = list(self.oeditor.GetObjectsInGroup("Unclassified"))
if unclassified != unclassified1:
if unclassified != unclassified1: # pragma: no cover
self._odesign.Undo()
self.logger.error("Error in intersection. Reverting Operation")
return
Expand Down Expand Up @@ -3833,7 +3833,7 @@ def connect(self, assignment):
vArg1 = ["NAME:Selections", "Selections:=", szSelections]

self.oeditor.Connect(vArg1)
if unclassified_before != self.unclassified_names:
if unclassified_before != self.unclassified_names: # pragma: no cover
self._odesign.Undo()
self.logger.error("Error in connection. Reverting Operation")
return False
Expand Down Expand Up @@ -3872,9 +3872,7 @@ def chassis_subtraction(self, chassis_part):
blank_part = chassis_part
# in main code this object will need to be determined automatically eg by name such as chassis or sheer size
self.logger.info("Blank Part in Subtraction = " + str(blank_part))
"""
check if blank part exists, if not, skip subtraction
"""
# Check if blank part exists, if not, skip subtraction
tool_parts = list(self.oeditor.GetObjectsInGroup("Solids"))
tool_parts.remove(blank_part)
for mat in mat_names:
Expand All @@ -3885,9 +3883,9 @@ def chassis_subtraction(self, chassis_part):
# tool_parts_final=list(set(tool_parts).difference(set(objnames)))
tool_parts = ",".join(tool_parts)
num_obj_end = self.oeditor.GetNumObjects()
self.subtract(blank_part, tool_parts, True)

res = self.subtract(blank_part, tool_parts, True)
self.logger.info("Subtraction Objs - Initial: " + str(num_obj_start) + " , Final: " + str(num_obj_end))
return res

@pyaedt_function_handler()
def _offset_on_plane(self, i, offset):
Expand Down Expand Up @@ -4188,10 +4186,10 @@ def create_face_list(self, assignment, name=None):
result = user_list.create(assignment=assignment, name=name, entity_type=list_type)
if result:
return user_list
else:
else: # pragma: no cover
self._app.logger.error("Wrong object definition. Review object list and type")
return False
else:
else: # pragma: no cover
self._app.logger.error("User list object could not be created")
return False

Expand Down Expand Up @@ -4228,10 +4226,10 @@ def create_object_list(self, assignment, name=None):
result = user_list.create(assignment=assignment, name=name, entity_type=list_type)
if result:
return user_list
else:
else: # pragma: no cover
self._app.logger.error("Wrong object definition. Review object list and type")
return False
else:
else: # pragma: no cover
self._app.logger.error("User list object could not be created")
return False

Expand Down Expand Up @@ -4306,7 +4304,7 @@ def create_faceted_bondwire_from_true_surface(self, assignment, direction, min_s
if dir == direction:
edgelist.append(el)
verlist.append([p1, p2])
if not edgelist:
if not edgelist: # pragma: no cover
self.logger.error("No edges found specified direction. Check again")
return False
connected = [edgelist[0]]
Expand Down Expand Up @@ -4865,7 +4863,7 @@ def import_3d_cad(
return True

@pyaedt_function_handler(SCFile="input_file")
def import_spaceclaim_document(self, input_file):
def import_spaceclaim_document(self, input_file): # pragma: no cover
"""Import a SpaceClaim document.
Parameters
Expand All @@ -4890,7 +4888,7 @@ def import_spaceclaim_document(self, input_file):
if variable > latest_version:
latest_version = variable
break
if not latest_version:
if not latest_version: # pragma: no cover
self.logger.error("SpaceClaim is not found.")
else:
scdm_path = os.path.join(os.environ[latest_version], "scdm")
Expand Down Expand Up @@ -5104,7 +5102,7 @@ def import_discovery_model(self, input_file):
>>> oEditor.CreateUserDefinedModel
"""
if is_linux:
if is_linux: # pragma: no cover
self.logger.error("Discovery not supported on Linux.")
return False
version = self._app.aedt_version_id[-3:]
Expand Down Expand Up @@ -5731,10 +5729,10 @@ def wrap_sheet(self, sheet, object, imprinted=False):
sheet = self.convert_to_selections(sheet, False)
object = self.convert_to_selections(object, False)

if sheet not in self.sheet_names:
if sheet not in self.sheet_names: # pragma: no cover
self.logger.error(f"{sheet} is not a valid sheet.")
return False
if object not in self.solid_names:
if object not in self.solid_names: # pragma: no cover
self.logger.error(f"{object} is not a valid solid body.")
return False
unclassified = [i for i in self.unclassified_objects]
Expand All @@ -5743,7 +5741,7 @@ def wrap_sheet(self, sheet, object, imprinted=False):
["NAME:WrapSheetParameters", "Imprinted:=", imprinted],
)
is_unclassified = [i for i in self.unclassified_objects if i not in unclassified]
if is_unclassified:
if is_unclassified: # pragma: no cover
self.logger.error("Failed to Wrap sheet. Reverting to original objects.")
self._odesign.Undo()
return False
Expand Down Expand Up @@ -6049,7 +6047,7 @@ def simplify_objects(
try:
self.oeditor.Simplify(selections_args, simplify_parameters, groups_for_new_object)
return True
except Exception:
except Exception: # pragma: no cover
self.logger.error("Simplify objects failed.")
return False

Expand Down Expand Up @@ -6437,7 +6435,7 @@ def _parse_region_args(self, pad_value, pad_type, region_name, parts, region_typ
if not units and pad_value[i].isnumeric() and not is_percentage:
units = self.model_units
pad_value[i] += units
elif units and is_percentage:
elif units and is_percentage: # pragma: no cover
self.logger.error("Percentage input must not have units")
return False, False
elif not is_percentage:
Expand Down Expand Up @@ -6486,7 +6484,7 @@ def _parse_region_args(self, pad_value, pad_type, region_name, parts, region_typ
def _create_region(
self, pad_value=300, pad_type="Percentage Offset", name="Region", parts=None, region_type="Region"
):
if name in self._app.modeler.objects_by_name:
if name in self._app.modeler.objects_by_name: # pragma: no cover
self._app.logger.error(f"{name} object already exists")
return False
if not isinstance(pad_value, list):
Expand Down Expand Up @@ -8942,18 +8940,18 @@ def __init__(self, app, input_file=None, input_dict=None):
props = self._read_csv_cylinder_props(csv_data)
if primitive_type_cleaned in ["Blocks Prism", "Prism"]:
props = self._read_csv_prism_props(csv_data)
if not props:
if not props: # pragma: no cover
msg = "CSV file not valid."
self.logger.error(msg)
raise TypeError(msg)
else:
else: # pragma: no cover
msg = "Format is not valid."
self.logger.error(msg)
raise TypeError(msg)
else:
props = input_dict

if not props or not all(key in props for key in ["Primitives", "Instances"]):
if not props or not all(key in props for key in ["Primitives", "Instances"]): # pragma: no cover
msg = "Input data is wrong."
self.logger.error(msg)
raise AttributeError(msg)
Expand Down Expand Up @@ -8987,15 +8985,15 @@ def create(self):

if self.coordinate_systems:
cs_flag = self._create_coordinate_system()
if not cs_flag:
if not cs_flag: # pragma: no cover
self.logger.error("Wrong coordinate system is defined.")
return False

cs_names = [cs.name for cs in self._app.modeler.coordinate_systems]

for instance_data in self.instances:
name = instance_data.get("Name")
if not name:
if not name: # pragma: no cover
self.logger.error("``Name`` parameter is not defined.")
return False

Expand All @@ -9004,7 +9002,9 @@ def create(self):
self.logger.warning("``Coordinate System`` parameter is not defined, ``Global`` is assigned.")
instance_data["Coordinate System"] = "Global"
cs = instance_data.get("Coordinate System")
elif instance_data["Coordinate System"] != "Global" and instance_data["Coordinate System"] not in cs_names:
elif (
instance_data["Coordinate System"] != "Global" and instance_data["Coordinate System"] not in cs_names
): # pragma: no cover
self.logger.error(f"Coordinate system {cs} does not exist.")
return False

Expand Down Expand Up @@ -9188,7 +9188,7 @@ def _read_csv_cylinder_props(self, csv_data):
csv_keys = csv_keys.tolist()
break

if not all(k in required_csv_keys for k in csv_keys):
if not all(k in required_csv_keys for k in csv_keys): # pragma: no cover
msg = "The column names in the CSV file do not match the expected names."
self.logger.error(msg)
raise ValueError
Expand All @@ -9197,7 +9197,7 @@ def _read_csv_cylinder_props(self, csv_data):
row_cont = 0
for index_row_new, row in csv_data.iloc[index_row + 1 :].iterrows():
row_info = row.dropna().values
if len(row_info) != len(csv_keys):
if len(row_info) != len(csv_keys): # pragma: no cover
msg = "Values missing in the CSV file "
self.logger.error(msg)
raise ValueError
Expand Down Expand Up @@ -9265,7 +9265,7 @@ def _read_csv_prism_props(self, csv_data):
csv_keys = csv_keys.tolist()
break

if not all(k in required_csv_keys for k in csv_keys):
if not all(k in required_csv_keys for k in csv_keys): # pragma: no cover
msg = "The column names in the CSV file do not match the expected names."
self.logger.error(msg)
raise ValueError
Expand All @@ -9274,7 +9274,7 @@ def _read_csv_prism_props(self, csv_data):
row_cont = 0
for index_row_new, row in csv_data.iloc[index_row + 1 :].iterrows():
row_info = row.dropna().values
if len(row_info) != len(csv_keys):
if len(row_info) != len(csv_keys): # pragma: no cover
msg = "Values missing in the CSV file "
self.logger.error(msg)
raise ValueError
Expand Down

0 comments on commit 3098639

Please sign in to comment.