>From 8a9f5b29ec6bf09f63bc41dab09781b3456ff2aa Mon Sep 17 00:00:00 2001
From: Matt Trzcinski <matt@excalamus.com>
Date: Fri, 30 Dec 2022 12:36:41 -0500
Subject: [PATCH 4/7] Refactor ob-shell/bash-uses-assoc-arrays

* testing/lisp/test-ob-shell.el (ob-shell/bash-uses-assoc-arrays):
Split test cases into separate tests,
`test-ob-shell/bash-uses-assoc-arrays' and
`test-ob-shell/bash-uses-assoc-arrays-with-lists'.  Rename prefix from
"ob-shell" to "test-ob-shell".
(ob-shell/bash-uses-assoc-arrays): Move comments from
testing/examples/ob-shell-test.org to docstrings.
(ob-shell/bash-uses-assoc-arrays): Remove dependency on
testing/examples/ob-shell-test.org.
---
 testing/lisp/test-ob-shell.el | 61 +++++++++++++++++++++++++----------
 1 file changed, 44 insertions(+), 17 deletions(-)

diff --git a/testing/lisp/test-ob-shell.el b/testing/lisp/test-ob-shell.el
index 57347229e..1e4bd6729 100644
--- a/testing/lisp/test-ob-shell.el
+++ b/testing/lisp/test-ob-shell.el
@@ -119,24 +119,51 @@ as a single string."
       "#+end_src")
     "\n")
    (should
-    (equal "bread 2 kg spaghetti 20 cm milk 50 dl"
-           (org-trim (org-babel-execute-src-block))))))
+     (equal "bread 2 kg spaghetti 20 cm milk 50 dl"
+            (org-trim (org-babel-execute-src-block))))))
 
-(ert-deftest ob-shell/bash-uses-assoc-arrays ()
-  "Bash associative arrays"
-  (should
-   (equal "two"
-	  (org-test-at-id
-	   "bec1a5b0-4619-4450-a8c0-2a746b44bf8d"
-	   (org-babel-next-src-block 2)
-	   (org-trim (org-babel-execute-src-block)))))
-  ;; Bash associative arrays as strings for the row.
-  (should
-   (equal "20 cm"
-	  (org-test-at-id
-	   "82320a48-3409-49d7-85c9-5de1c6d3ff87"
-	   (org-babel-next-src-block 2)
-	   (org-trim (org-babel-execute-src-block))))))
+(ert-deftest test-ob-shell/bash-uses-assoc-arrays ()
+  "Bash shell: support for associative arrays
+
+Bash will see a table that contains the first column as the
+'index' of the associative array, and the second column as the
+value. "
+  (org-test-with-temp-text
+      (string-join
+       '("#+NAME: sample_mapping_table"
+         "| first  | one   |"
+         "| second | two   |"
+         "| third  | three |"
+         ""
+         "#+begin_src bash :exports :results output results :var table=sample_mapping_table"
+         "echo ${table[second]}"
+         "<point>"
+         "#+end_src")
+       "\n")
+    (should
+     (equal "two"
+            (org-trim (org-babel-execute-src-block))))))
+
+(ert-deftest test-ob-shell/bash-uses-assoc-arrays-with-lists ()
+  "Bash shell: support for associative arrays with lists
+
+Bash will see an associative array that contains each row as a single
+string. Bash cannot handle lists in associative arrays."
+  (org-test-with-temp-text
+      (string-join
+       '("#+NAME: sample_big_table"
+         "| bread     |  2 | kg |"
+         "| spaghetti | 20 | cm |"
+         "| milk      | 50 | dl |"
+         ""
+         "#+begin_src bash :exports results :results output :var table=sample_big_table"
+         "echo ${table[spaghetti]}"
+         "<point>"
+         "#+end_src")
+       "\n")
+    (should
+     (equal "20 cm"
+            (org-trim (org-babel-execute-src-block))))))
 
 (ert-deftest ob-shell/simple-list ()
   "Test list variables in shell."
-- 
2.38.1

