From 62f421c4095cd44bf23dbe3fdec1c8024a353999 Mon Sep 17 00:00:00 2001
From: Jacob Wahlman <jacwa448@student.liu.se>
Date: Sat, 25 Apr 2020 13:51:24 +0200
Subject: [PATCH] added tests for recipes and definition

---
 b_asic/utils.py                  | 11 +++++++++
 test/test_load_save_structure.py | 38 ++++++++++++++++++++++++++++++--
 2 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/b_asic/utils.py b/b_asic/utils.py
index 24ee5f62..42242fd3 100644
--- a/b_asic/utils.py
+++ b/b_asic/utils.py
@@ -54,3 +54,14 @@ def load_structure(_path: str) -> AbstractOperation:
         print("Unexpected error occured while loading structure: ", e)
     
     return None
+
+def load_recipe(module: str) -> None:
+    """Given the module name or the path to a module, import the module and let it evaluate it's content.
+    Returns None as the content from the module will be added to the namespace.
+
+    This runs .py scripts inline by importing them, it currently does no checks for security measure.
+
+    Arguments:
+    module: The path or name of the module to import from.
+    """
+    pass
diff --git a/test/test_load_save_structure.py b/test/test_load_save_structure.py
index 9e4190a9..4881e237 100644
--- a/test/test_load_save_structure.py
+++ b/test/test_load_save_structure.py
@@ -8,7 +8,7 @@ from string import ascii_lowercase
 
 import pytest
 
-from b_asic import SFG, Output, load_structure, save_structure
+from b_asic import SFG, Output, load_structure, save_structure, load_recipe
 
 
 class TestSaveStructures:
@@ -50,4 +50,38 @@ class TestSaveStructures:
         _path = load_structure(_path=_invalid_path)
 
         assert _path is None 
-        
\ No newline at end of file
+    
+    def test_load_recipe_file(self):
+        # Create a file that doesn't exist
+        _file = "".join(choice(ascii_lowercase) for _ in range(4)) + ".py"
+        while path.exists(path.join(getcwd(), _file)):
+            _file = "".join(choice(ascii_lowercase) for _ in range(4)) + ".py"
+
+        try:
+            with open(_file, "w+") as handle:
+                # The string is indented that way so the file is properly indented, .strip() did not work idk why
+                handle.write(
+"""
+from b_asic import SFG, Output, Addition, Constant
+sfg = SFG(outputs=[Output(Addition(Addition(Constant(2), Constant(3)), Addition(Constant(4), Constant(5))))])
+"""
+                )
+        except Exception as e:
+            assert False, f"Could not create file: {e}"
+
+        # Not defined yet
+        with pytest.raises(NameError):
+            sfg.evaluate() == 14
+
+        load_recipe(_file)
+        assert sfg.evaluate() == 14
+
+    def test_load_invalid_recipe_file(self):
+        _file = "".join(choice(ascii_lowercase) for _ in range(4)) + ".py"
+        while path.exists(path.join(getcwd(), _file)):
+            _file = "".join(choice(ascii_lowercase) for _ in range(4)) + ".py"
+
+        load_recipe(_file)
+        with pytest.raises(NameError):
+            assert sfg.evaluate() == 14
+            
\ No newline at end of file
-- 
GitLab