| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616 | ;;; test-ob-java.el --- tests for ob-java.el;; Copyright (c) 2020-2022 Free Software Foundation, Inc.;; Authors: Eric Schulte;;          Dan Davison;; Maintainer: Ian Martins <ianxm@jhu.edu>;; This file is not part of GNU Emacs.;; This program is free software; you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation, either version 3 of the License, or;; (at your option) any later version.;; This program is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the;; GNU General Public License for more details.;; You should have received a copy of the GNU General Public License;; along with this program.  If not, see <https://www.gnu.org/licenses/>.;;; Code:(require 'org-test "../testing/org-test")(require 'ob-core)(defvar org-babel-temporary-directory ; from ob-core  (if (boundp 'org-babel-temporary-directory)    org-babel-temporary-directory  (temporary-file-directory)))(org-test-for-executable "java")(org-test-for-executable "javac")(unless (featurep 'ob-java)  (signal 'missing-test-dependency "Support for java code blocks")); simple tests(ert-deftest ob-java/simple ()  "Hello world program that writes output. Also tests thatob-java defaults to scripting mode."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results silentSystem.out.print(42);#+end_src"   (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-bracket ()  "Hello world program that outputs an open square bracket."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentSystem.out.print(\"[42\");#+end_src"   (should (string= "[42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-quote ()  "Hello world program that writes quotes."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentSystem.out.print(\"\\\"42\\\"\");#+end_src"   (should (string= "\"42\"" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-return-int ()  "Hello world program that returns an int value."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results value silentreturn 42;#+end_src"   (should (eq 42 (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-return-float ()  "Hello world program that returns a float value."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results value silentreturn 42.0;#+end_src"   (should (equal 42.0 (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-return-string ()  "Hello world program that returns a string value."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results value silentreturn \"forty two\";#+end_src"    (should (string= "forty two" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-main ()  "Hello world program that defines a main function."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentpublic static void main(String[] args) {    System.out.print(42);}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-two-methods ()  "Hello world program with two methods and no class."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentpublic static void main(String[] args) {    System.out.print(foo());}public static int foo() {    return 42;}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-no-main ()  "Hello world program with no main method.  Babel adds a dummy one so it can run without error."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentpublic static int foo() {    return 42;}#+end_src"    (should (string= "success" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-main-args-array ()  "Hello world program that defines a main function with the square brackets after `args'."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentpublic static void main(String args[]) {    System.out.print(42);}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-main-whitespace ()  "Hello world program that defines a main function with the square brackets after `args'."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentpublicstaticvoidmain ( String args [] ){    System.out.print(42);}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-class ()  "Hello world program that defines a class."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentpublic class Simple {    public static void main(String[] args) {        System.out.print(42);    }}#+end_src"   (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-non-public-class ()  "Hello world program that defines a non-public class."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentclass Simple {    public static void main(String[] args) {        System.out.print(42);    }}#+end_src"   (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-class-and-package ()  "Hello world program that defines a class and package."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentpackage pkg;public class Simple {    public static void main(String[] args) {        System.out.print(42);    }}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-class-attr ()  "Hello world program with class header attribute."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silent :classname Simplepublic static void main(String[] args) {    System.out.print(42);}#+end_src"   (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/simple-with-class-attr-with-package ()  "Hello world program with class attr with package."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silent :classname pkg.Simplepublic static void main(String[] args) {    System.out.print(42);}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/one-arg ()  "Command line arg."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silent :cmdargs \"fortytwo\"System.out.print(args[0]);#+end_src"    (should (string= "fortytwo" (org-babel-execute-src-block)))))(ert-deftest ob-java/args-quoted-string ()  "Two command line args, first contains a space."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silent :cmdargs \"\\\"forty two\\\" 42\"System.out.println(args[0]);System.out.println(args[1]);#+end_src"    (should (string= "forty two\n42\n" (org-babel-execute-src-block)))));; var tests(ert-deftest ob-java/integer-var ()  "Read and write an integer variable."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=42 :results output silentSystem.out.print(a);#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/var-with-main ()  "Read and write an integer variable, with main function provided."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=42 :results output silentpublic static void main(String[] args) {    System.out.print(a);}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/var-with-class ()  "Read and write an integer variable, with class provided."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=42 :results output silentpublic class Main {    public static void main(String[] args) {        System.out.print(a);    }}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/var-with-class-and-package ()  "Read and write an integer variable, with class and package provided."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=42 :results output silentpackage pkg;public class Main {    public static void main(String[] args) {        System.out.print(a);    }}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/var-with-class-and-hanging-curlies ()  "Read and write an integer variable, with class with hanging curlies."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=42 :results output silentpublic class Main{    public static void main(String[] args)    {        System.out.print(a);    }}#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/two-vars ()  "Read two integer variables, combine and write them."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=21 b=2 :results output silentSystem.out.print(a*b);#+end_src"    (should (string= "42" (org-babel-execute-src-block)))))(ert-deftest ob-java/string-var ()  "Read and write a string variable."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=\"forty two\" :results output silentSystem.out.print(String.format(\"%s, len=%d\", a, a.length()));#+end_src"    (should (string= "forty two, len=9" (org-babel-execute-src-block)))))(ert-deftest ob-java/multiline-string-var ()  "Java doesn't support multiline string literals, so this errors."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=\"forty\ntwo\" :results output silentSystem.out.print(String.format(\"%s, len=%d\", a, a.length()));#+end_src"    (should-error (org-babel-execute-src-block)))  :type 'error);; return list(ert-deftest ob-java/return-vector-using-list ()  "Return a vector using a list."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results value vector silentimport java.util.List;import java.util.Arrays;List<List<Integer>> a = Arrays.asList(Arrays.asList(4),                                      Arrays.asList(2));return a;#+end_src"    (should (equal '((4) (2))                   (org-babel-execute-src-block)))))(ert-deftest ob-java/return-vector-using-array ()  "Return a vector using an array."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results value vector silentInteger[][] a = {{4}, {2}};return a;#+end_src"    (should (equal '((4) (2))                   (org-babel-execute-src-block)))))(ert-deftest ob-java/read-return-list ()  "Read and return a list."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=java_list :results value silentimport java.util.List;import java.util.Arrays;List<String> b = Arrays.asList(a.get(0).get(0),                               a.get(1).get(0));return b;#+end_src#+name: java_list- forty- two"    (should (equal '("forty" "two")                   (org-babel-execute-src-block)))))(ert-deftest ob-java/read-list-return-array ()  "Read a list and return an array."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=java_list :results value silentString[] b = {a.get(0).get(0), a.get(1).get(0)};return b;#+end_src#+name: java_list- forty- two"    (should (equal '("forty" "two")                   (org-babel-execute-src-block)))))(ert-deftest ob-java/read-return-list-with-package ()  "Return a vector."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=java_list :results value silentpackage pkg;import java.util.List;import java.util.Arrays;List<String> b = Arrays.asList(a.get(0).get(0),                               a.get(1).get(0));return b;#+end_src#+name: java_list- forty- two"    (should (equal '("forty" "two")                   (org-babel-execute-src-block)))))(ert-deftest ob-java/output-list-with-spaces ()  "Return a vector."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output list raw silentSystem.out.println(\"forty two\");System.out.println(\"forty two\");#+end_src"    (should (equal "forty two\nforty two\n"                   (org-babel-execute-src-block)))));; list vars(ert-deftest ob-java/list-var ()  "Read and write a list variable."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a='(\"forty\" \"two\") :results value silentimport java.util.List;List<String> b = a;return b;#+end_src"    (should (equal '("forty" "two")                   (org-babel-execute-src-block)))))(ert-deftest ob-java/vector-var ()  "Read and write a vector variable."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a='[\"forty\" \"two\"] :results value silentimport java.util.List;List<String> b = a;return b;#+end_src"    (should (equal '("forty" "two")                   (org-babel-execute-src-block)))))(ert-deftest ob-java/matrix-var ()  "Read and write matrix variable."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=java_matrix :results value silentimport java.util.List;import java.util.Arrays;List<List<Integer>> b = Arrays.asList(Arrays.asList(a.get(0).get(0), a.get(1).get(0)),                                      Arrays.asList(a.get(0).get(1), a.get(1).get(1)));return b; // transpose#+end_src#+name: java_matrix| 2 | 1 || 4 | 2 |"    (should (equal '((2 4) (1 2))                   (org-babel-execute-src-block)))))(ert-deftest ob-java/matrix-var-with-header ()  "Read matrix variable and write it with header."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=java_matrix :results value table silentimport java.util.List;import java.util.Arrays;List<List> b = Arrays.asList(Arrays.asList(\"col1\", \"col2\"),                                     null,                                     Arrays.asList(a.get(0).get(0), a.get(1).get(0)),                                     Arrays.asList(a.get(0).get(1), a.get(1).get(1)));return b; // transpose#+end_src#+name: java_matrix| 2 | 1 || 4 | 2 |"    (should (equal '(("col1" "col2") hline (2 4) (1 2))                   (org-babel-execute-src-block)))));; output table(ert-deftest ob-java/output-table-with-header ()  "Write a table that includes a header."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=java_matrix :results output raw table silentSystem.out.println(\"|col1|col2|\");System.out.println(\"|-\");for (int ii=0; ii<a.size(); ii++) {    for (int jj=0; jj<a.get(0).size(); jj++) {        System.out.print(\"|\" + a.get(ii).get(jj));    }    System.out.println(\"\"); }#+end_src#+name: java_matrix| 2 | 1 || 4 | 2 |"    (should (equal "|col1|col2|\n|-\n|2|1\n|4|2\n"                   (org-babel-execute-src-block)))))(ert-deftest ob-java/inhomogeneous_table ()  "Read and write an inhomogeneous table."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :var a=java_table :results value silentimport java.util.List;import java.util.Arrays;List<List> b = Arrays.asList(Arrays.asList(a.get(0).get(0),                                           Integer.parseInt(a.get(0).get(1))*2),                             Arrays.asList(a.get(1).get(0),                                           Integer.parseInt(a.get(1).get(1))*2));return b;#+end_src#+name: java_table  | string | number |  |--------+--------|  | forty  |      2 |  | two    |      1 |"   (should (equal            '(("forty" 4) ("two" 2))            (org-babel-execute-src-block)))));; imports(ert-deftest ob-java/import_library ()  "Import a standard java library."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silent :imports java.util.Base64byte[] encoded = Base64.getEncoder().encode(\"42\".getBytes());String decoded = new String(Base64.getDecoder().decode(encoded));System.out.print(String.format(\"encoded=%s, decoded=%s\", new String(encoded), decoded));#+end_src"   (should (string=            "encoded=NDI=, decoded=42"            (org-babel-execute-src-block)))))(ert-deftest ob-java/import_library_inline ()  "Import a standard java library."  (org-test-with-temp-text      "#+begin_src java :dir 'nil :results output silentimport java.util.Base64;byte[] encoded = Base64.getEncoder().encode(\"42\".getBytes());String decoded = new String(Base64.getDecoder().decode(encoded));System.out.print(String.format(\"encoded=%s, decoded=%s\", new String(encoded), decoded));#+end_src"   (should (string=            "encoded=NDI=, decoded=42"            (org-babel-execute-src-block)))));; tangle(ert-deftest ob-java/tangle ()  "Tangle a source block."  (org-test-with-temp-text-in-file      "#+begin_src java :dir 'nil :tangle \"Tangle.java\" :results value :classname Tanglereturn \"tangled\";#+end_src"    (should     (string=      "public class Tangle {    public static void main(String[] args) {        return \"tangled\";    }}"      (unwind-protect          (progn (org-babel-tangle)                 (with-temp-buffer                   (insert-file-contents "Tangle.java")                   (untabify (point-min) (point-max))                   (buffer-string)))        (delete-file "Tangle.java"))))))(ert-deftest ob-java/tangle-with-package ()  "Tangle a source block."  (org-test-with-temp-text-in-file      "#+begin_src java :dir 'nil :tangle \"tangle/Tangle.java\" :results value :classname tangle.Tanglereturn \"tangled\";#+end_src"    (should     (string=      "package tangle;public class Tangle {    public static void main(String[] args) {        return \"tangled\";    }}"      (unwind-protect          (progn            (make-directory "tangle")            (org-babel-tangle)            (with-temp-buffer              (insert-file-contents "tangle/Tangle.java")              (untabify (point-min) (point-max))              (buffer-string)))        (delete-file "tangle/Tangle.java")        (delete-directory "tangle"))))));; specify output dir(ert-deftest ob-java/simple-dir ()  "Hello world program that writes output."  (org-test-with-temp-text      (format  "#+begin_src java :dir %s :results output silentSystem.out.print(42);#+end_src" org-babel-temporary-directory)    (should (string=             "42"             (unwind-protect                 (org-babel-execute-src-block)               (delete-file (concat (file-name-as-directory org-babel-temporary-directory)                                    "Main.java"))               (delete-file (concat (file-name-as-directory org-babel-temporary-directory)                                    "Main.class")))))))(ert-deftest ob-java/simple-dir-with-package ()  "Hello world program that writes output."  (org-test-with-temp-text      (format "#+begin_src java :dir %s :results output silentpackage pkg;public class Main {    public static void main(String[] args) {      System.out.print(42);    }}#+end_src" org-babel-temporary-directory)    (should (string=             "42"             (unwind-protect                 (org-babel-execute-src-block)               (delete-file (concat (file-name-as-directory org-babel-temporary-directory)                                    "pkg/Main.java"))               (delete-file (concat (file-name-as-directory org-babel-temporary-directory)                                    "pkg/Main.class"))               (delete-directory (concat (file-name-as-directory org-babel-temporary-directory)                                         "pkg")))))));;; test-ob-java.el ends here
 |