diff --git a/howso/hierarchy.amlg b/howso/hierarchy.amlg index 548e27318..f86017c90 100644 --- a/howso/hierarchy.amlg +++ b/howso/hierarchy.amlg @@ -10,7 +10,11 @@ ; type "assoc" ; description "The map showing the full hierarchy of the Trainee and all of its subtrainees." ; } - (assoc) + (assoc + ;{type "list" values "string"} + ;path to this trainee as a list of path labels + path_list [] + ) (call !Return (assoc payload (call !GetHierarchy) )) ) @@ -845,22 +849,42 @@ ;method to recurse down the the hierarchy to output the currently contained hierarchy as a nested assoc ;with (false) for trainees that are stored independently #!GetHierarchy - (let - (assoc children (indices !childTraineeIsContainedMap)) - - (zip - children - (map - (lambda - (if (get !childTraineeIsContainedMap (current_value)) - (get (call_entity (list !traineeContainer (current_value 1)) "get_hierarchy") (list 1 "payload")) + (append + !metaData + (assoc + "id" (retrieve_from_entity "!traineeId") + "path" path_list + "contained" (true) + "children" + (map + (lambda + (if (get !childTraineeIsContainedMap (current_value)) + (get + (call_entity (list !traineeContainer (current_value 1)) "get_hierarchy" (assoc + path_list + (if (size path_list) + (append path_list (current_value 1)) + [(current_value 2)] + ) + )) + [1 "payload"] + ) - ;can't traverse down trainees that are stored externally - (false) + ;can't traverse down trainees that are stored externally + (assoc + "id" (get !containedTraineeNameToIdMap (current_value 1)) + "path" + (if (size path_list) + (append path_list (current_value 1)) + [(current_value 2)] + ) + "contained" (false) + "children" [] + ) + ) ) + (indices !childTraineeIsContainedMap) ) - children - ) ) ) diff --git a/unit_tests/ut_h_hierarchy_by_id.amlg b/unit_tests/ut_h_hierarchy_by_id.amlg index ebd7e2e81..b2b88d974 100644 --- a/unit_tests/ut_h_hierarchy_by_id.amlg +++ b/unit_tests/ut_h_hierarchy_by_id.amlg @@ -133,15 +133,56 @@ (print "Renames and copies: ") (call assert_same (assoc + unordered (true) obs result exp - (assoc - AA (assoc - b (assoc) - big_C (assoc e (assoc)) - ) - c_copy (assoc e (assoc)) - ) + { + contained (true) + id "model" + path [] + children [ + { + children [ + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "big_C" "e"] + } + ] + contained (true) + id "c2" + path ["AA" "big_C"] + } + { + children [] + contained (true) + id "b2" + path ["AA" "b"] + } + ] + contained (true) + id "A1" + path ["AA"] + } + { + children [ + { + children [] + contained (true) + id "e3" + path ["c_copy" "e"] + } + ] + contained (true) + id "deleteme" + path ["c_copy"] + } + ] + + } )) (call exit_if_failures (assoc msg "Renaming.")) @@ -266,15 +307,48 @@ (call keep_result_payload) (print "Updated is_contained_map has all the c_copy trainees as not contained: ") (call assert_same (assoc + unordered (true) obs result exp - (assoc - AA (assoc - b (assoc) - big_C (assoc e (assoc)) - ) - c_copy (false) - ) + { + children [ + { + children [ + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "big_C" "e"] + } + ] + contained (true) + id "c2" + path ["AA" "big_C"] + } + { + children [] + contained (true) + id "b2" + path ["AA" "b"] + } + ] + contained (true) + id "A1" + path ["AA"] + } + { + children [] + contained (false) + id "deleteme" + path ["c_copy"] + } + ] + contained (true) + id "model" + path [] + } )) ;load into trainee AA @@ -331,16 +405,68 @@ (print "Hierarchy for model after save and load is correct: ") (call assert_same (assoc + unordered (true) obs result exp - (assoc - AA (assoc - b (assoc child_of_b (false)) - big_C (assoc e (assoc)) - loaded (assoc e (assoc)) - ) - c_copy (false) - ) + { + children [ + { + children [ + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "big_C" "e"] + } + ] + contained (true) + id "c2" + path ["AA" "big_C"] + } + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "loaded" "e"] + } + ] + contained (true) + id "deleteme" + path ["AA" "loaded"] + } + { + children [ + { + children [] + contained (false) + id "deleteme2" + path ["AA" "b" "child_of_b"] + } + ] + contained (true) + id "b2" + path ["AA" "b"] + } + ] + contained (true) + id "A1" + path ["AA"] + } + { + children [] + contained (false) + id "deleteme" + path ["c_copy"] + } + ] + contained (true) + id "model" + path [] + } )) ;cleanup saved test model @@ -408,16 +534,54 @@ (print "Hierarchy for model after deletion: ") (call assert_same (assoc + unordered (true) obs result exp - (assoc - AA (assoc - b (assoc) - big_C (assoc e (assoc)) - loaded (assoc) - ) - c_copy (false) - ) + { + children [ + { + children [ + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "big_C" "e"] + } + ] + contained (true) + id "c2" + path ["AA" "big_C"] + } + { + children [] + contained (true) + id "deleteme" + path ["AA" "loaded"] + } + { + children [] + contained (true) + id "b2" + path ["AA" "b"] + } + ] + contained (true) + id "A1" + path ["AA"] + } + { + children [] + contained (false) + id "deleteme" + path ["c_copy"] + } + ] + contained (true) + id "model" + path [] + } )) (call exit_if_failures (assoc msg "delete trainees." )) diff --git a/unit_tests/ut_h_hierarchy_by_name.amlg b/unit_tests/ut_h_hierarchy_by_name.amlg index cc67c62f7..42996d76c 100644 --- a/unit_tests/ut_h_hierarchy_by_name.amlg +++ b/unit_tests/ut_h_hierarchy_by_name.amlg @@ -129,15 +129,56 @@ (print "Renames and copies: ") (call assert_same (assoc + unordered (true) obs result exp - (assoc - AA (assoc - b (assoc) - big_C (assoc e (assoc)) - ) - c_copy (assoc e (assoc)) - ) + { + contained (true) + id "model" + path [] + children [ + { + children [ + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "big_C" "e"] + } + ] + contained (true) + id "c2" + path ["AA" "big_C"] + } + { + children [] + contained (true) + id "b2" + path ["AA" "b"] + } + ] + contained (true) + id "A1" + path ["AA"] + } + { + children [ + { + children [] + contained (true) + id "e3" + path ["c_copy" "e"] + } + ] + contained (true) + id "deleteme" + path ["c_copy"] + } + ] + + } )) (call exit_if_failures (assoc msg "Renaming.")) @@ -292,15 +333,48 @@ (call keep_result_payload) (print "Updated is_contained_map has all the c_copy trainees as not contained: ") (call assert_same (assoc + unordered (true) obs result exp - (assoc - AA (assoc - b (assoc) - big_C (assoc e (assoc)) - ) - c_copy (false) - ) + { + children [ + { + children [ + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "big_C" "e"] + } + ] + contained (true) + id "c2" + path ["AA" "big_C"] + } + { + children [] + contained (true) + id "b2" + path ["AA" "b"] + } + ] + contained (true) + id "A1" + path ["AA"] + } + { + children [] + contained (false) + id "deleteme" + path ["c_copy"] + } + ] + contained (true) + id "model" + path [] + } )) ;load into trainee AA @@ -370,16 +444,71 @@ (print "Hierarchy for model after save and load is correct: ") (call assert_same (assoc + unordered (true) obs result exp - (assoc - AA (assoc - b (assoc child_of_b (false)) - big_C (assoc e (assoc)) - loaded (assoc e (assoc)) - ) - c_copy (false) - ) + { + children [ + { + children [ + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "big_C" "e"] + } + ] + contained (true) + id "c2" + path ["AA" "big_C"] + } + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "loaded" "e"] + } + ] + contained (true) + id "deleteme" + path ["AA" "loaded"] + } + { + children [ + { + children [] + contained (false) + id "deleteme2" + path ["AA" "b" "child_of_b"] + } + ] + contained (true) + id "b2" + path ["AA" "b"] + } + ] + contained (true) + id "A1" + path ["AA"] + } + { + children [] + contained (false) + id "deleteme" + path ["c_copy"] + } + ] + contained (true) + id "model" + path + ;{type "string"} + ;path to this trainee as a list of path labels + [] + } )) ;cleanup saved test model @@ -461,15 +590,54 @@ (print "Hierarchy for model after deletion: ") (call assert_same (assoc + unordered (true) obs result exp - (assoc - AA (assoc - b (assoc) - big_C (assoc e (assoc)) - loaded (assoc) - ) - ) + { + children [ + { + children [ + { + children [ + { + children [] + contained (true) + id "e3" + path ["AA" "big_C" "e"] + } + ] + contained (true) + id "c2" + path ["AA" "big_C"] + } + { + children [] + contained (true) + id "deleteme" + path ["AA" "loaded"] + } + { + children [] + contained (true) + id "b2" + path ["AA" "b"] + } + ] + contained (true) + id "A1" + path ["AA"] + } + { + children [] + contained (false) + id "deleteme" + path ["c_copy"] + } + ] + contained (true) + id "model" + path [] + } )) (call exit_if_failures (assoc msg "delete trainees." ))