org-mode/testing/lisp/test-ob-java.el

617 lines
19 KiB
EmacsLisp
Raw Normal View History

ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
;;; test-ob-java.el --- tests for ob-java.el
2021-01-01 19:59:20 +00:00
;; Copyright (c) 2020-2021 Free Software Foundation, Inc.
;; Authors: Eric Schulte
;; Dan Davison
;; Maintainer: Ian Martins <ianxm@jhu.edu>
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
;; 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 <http://www.gnu.org/licenses/>.
;;; Code:
* lisp/org-agenda.el: Use lexical-binding - Removed the global (defvar date) and (defvar entry) so as not to conflict with function arguments of that name. Instead I added such `defvar`s in the body of each of the functions where it seemed needed. - I added some FIXMEs for some issues I found along the way. - Added an `org-dlet` macro, just like I had done for `calendar-dlet`, but I also use `defvar` "manually" at some places, when splitting an existing `let` into a mix of `let`s and `dlet`s seemed too much trouble. - Removed uses of `org-let and `org-let2` not only because I consider them offensive to my sense of aesthetics but also because they're basically incompatible with lexical scoping. I replaced them with uses of `cl-progv` which are a bit more verbose. Maybe we should define some `org-progv` macro on top of `cl-progv` to make the code less verbose, but I didn't do that because I like the fact that the current code makes uses of `eval` a bit more obvious (since these behave differently with lexical scoping than with lexical binding, it seemed worthwhile). - Removed the use of `eval` in `org-store-agenda-views` which was only placed there in order to use a macro before it's defined (it would have been simpler/cleaner to just move that functions *after* the macro, but with the new code the problem doesn't occur any more anyway). - Replaced a few `(lambda...) with actual closures. Detailed changes follow: (date, entry): Don't declare as being globally dynbound. (org-agenda-format-date-aligned): Remove unused var `weekyear`. (org-agenda-mode): `run-mode-hooks` is always available nowadays. (org-agenda-undo): Remove unused var `last-undo-buffer`. (org-agenda): Rename arg to `keys` and then dyn-bind it as `org-keys`. Remove unused vars `buf` and `key`. (org-agenda): Use `pcase` and `cl-progv` instead of `org-let`. (org-let, org-let2): Mark as obsolete. (org-agenda-run-series): Use `cl-progv` instead of `org-let` and `org-let2`. (org-agenda-run-series): New function. (org--batch-agenda): New function extracted from `org-batch-agenda`. (org-batch-agenda): Use it. (org--batch-agenda-csv): New function extracted from `org-batch-agenda-csv`. (org-batch-agenda-csv): Use it. (org--batch-store-agenda-views): New function, extracted from `org-batch-store-agenda-views`. (org-store-agenda-views, org-batch-store-agenda-views): Use it. (org--batch-store-agenda-views): Use `cl-progv` instead of `org-eval-in-environment`. (org-agenda-write): Use `cl-progv` instead of `org-let`. Use `with-current-buffer`. (org-agenda-filter-any): Use `cl-some` instead of `eval`. (org-agenda-list): Remove unused var `e`. (org-search-view): η-reduce. (crm-separator): Declare var. (org-agenda-skip-if): Remove unused var `beg`. (org-agenda-list-stuck-projects): Use a closure rather than `(lambda..). (diary-modify-entry-list-string-function, diary-file-name-prefix) (diary-display-function): Declare vars. (org-diary): Declare `date` and `entry` as dynbound. (org-agenda-get-day-entries): Use `org-dlet`. (org-agenda-get-timestamps, org-agenda-get-progress) (org-agenda-get-deadlines, org-agenda-get-scheduled, org-agenda-get-blocks): Declare `date` as dynbound. (org-agenda-get-sexps, org-class): Declare `date` and `entry` as dynbound. (org-agenda-format-item): Declare the vars mentioned in `org-compile-prefix-format` as dyn-bound. Also binding `extra`, suggested by Kyle Meyer <kyle@kyleam.com>. (org-compile-prefix-format): Remove unused var `e`. Use `member` rather than or+equal. (org-set-sorting-strategy): Minor simplification. (org-entries-lessp): Use `org-dlet`. (org-agenda-redo): Declare var `org-agenda-tag-filter-while-redo`. (org-agenda-redo): Use `cl-progv` rather than `org-let`. (org-agenda-filter): Remove unused var `rpl-fn`. Use `org-pushnew-to-end` to replace `add-to-list` on lexical var. (org-agenda-filter-by-tag): Remove unused var `n`. (org-agenda-filter-apply): Use `org-dlet`. (org-agenda-compute-starting-span): Remove unused var `dg`. (org-agenda-forward-block): Remove unused var `pos`. (org-archive-from-agenda): Declare var. (org-agenda-refile): Remove unused var `pos`. (org-agenda-headline-snapshot-before-repeat): Declare var. (org-agenda-todo): Remove redundant use of `bound-and-true-p`. (org-agenda-add-note): Remove unused var `hdmarker` and unused `arg`. (org-agenda-change-all-lines): Remove unused var `pl`. (org-agenda-priority): Remove unused var `marker`. (org-agenda-set-effort): Remove unused var `newhead`. (org-agenda-schedule): Remove unused var `type`. (org-agenda-clock-cancel): Remove unused `arg`. (org-agenda-execute-calendar-command): Use `org-dlet`. (org-agenda-bulk-action): Use closures instead of `(lambda ...). (org-agenda-show-the-flagging-note): Remove unused vars `heading` and `newhead`. (org-agenda-remove-flag): Avoid `setq`. * testing/org-test.el (org--compile-when): New macro. (org-test-jump): Use it so compilation doesn't fail or generate broken code when `jump` is not available. * testing/lisp/test-org-src.el: * testing/lisp/test-org-attach.el: * testing/lisp/test-org-agenda.el: * testing/lisp/test-ob-java.el: Pass explicit filename to `require` so as not to rely on ".../testing" being in `load-path` during compilation. * lisp/org-num.el: Require` org`. * lisp/org-macs.el (org-eval-in-environment): Declare obsolete. (org-dlet, org-pushnew-to-end): New macros. * doc/Makefile (org.texi, orgguide.texi, %_letter.tex): Simplify quoting. * contrib/lisp/ob-sclang.el: Don't crash compilation when `sclang` is not available. * contrib/lisp/ob-clojure-literate.el: Don't crash compilation when `cider` is not available. * contrib/lisp/ob-arduino.el: Don't crash compilation when `arduino-mode` is not available. * .gitignore: Add files generated during `make packages/org`.
2021-02-23 20:47:29 +00:00
(require 'org-test "../testing/org-test")
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
(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 that
ob-java defaults to scripting mode."
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
System.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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
System.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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
System.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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
return 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
return 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
return \"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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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-two-methods ()
"Hello world program with two methods and no class."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
public 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
public 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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-main-whitespace ()
"Hello world program that defines a main function with the square brackets after `args'."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
public
static
void
main
(
String
args []
)
{
System.out.print(42);
}
#+end_src"
(should (string= "42" (org-babel-execute-src-block)))))
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
(ert-deftest ob-java/simple-with-class ()
"Hello world program that defines a class."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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-non-public-class ()
"Hello world program that defines a non-public class."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
class Simple {
public static void main(String[] args) {
System.out.print(42);
}
}
#+end_src"
(should (string= "42" (org-babel-execute-src-block)))))
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
(ert-deftest ob-java/simple-with-class-and-package ()
"Hello world program that defines a class and package."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
package 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent :classname Simple
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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-with-package ()
"Hello world program with class attr with package."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent :classname pkg.Simple
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
public 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent :cmdargs \"fortytwo\"
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent :cmdargs \"\\\"forty two\\\" 42\"
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=42 :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
System.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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=42 :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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 ()
"Read and write an integer variable, with class provided."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=42 :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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-package ()
"Read and write an integer variable, with class and package provided."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=42 :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
package 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=42 :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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/two-vars ()
"Read two integer variables, combine and write them."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=21 b=2 :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
System.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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=\"forty two\" :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
System.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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=\"forty\ntwo\" :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
System.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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results value vector silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
import 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results value vector silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
Integer[][] 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=java_list :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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/read-list-return-array ()
"Read a list and return an array."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=java_list :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
String[] 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=java_list :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
package 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output list raw silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
System.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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a='(\"forty\" \"two\") :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
import 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a='[\"forty\" \"two\"] :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
import 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=java_matrix :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
import 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=java_matrix :results value table silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
import 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=java_matrix :results output raw table silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
System.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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :var a=java_table :results value silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
import 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent :imports java.util.Base64
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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)))))
(ert-deftest ob-java/import_library_inline ()
"Import a standard java library."
(org-test-with-temp-text
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
import 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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :tangle \"Tangle.java\" :results value :classname Tangle
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
return \"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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
"#+begin_src java :dir 'nil :tangle \"tangle/Tangle.java\" :results value :classname tangle.Tangle
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
return \"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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
(format "#+begin_src java :dir %s :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
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)
"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
lisp/ob-java.el: Make the default to write to the current directory * lisp/ob-java.el(org-babel-default-header-args:java): Add :dir default. (org-babel-execute:java): Check for existence of :dir in params using alist-get instead of assq because we want a nil cdr to be false. * testing/lisp/test-ob-java.el (ob-java/simple, ob-java/simple-with-bracket) (ob-java/simple-with-quote, ob-java/simple-return-int) (ob-java/simple-return-float, ob-java/simple-return-string) (ob-java/simple-with-main, ob-java/simple-with-two-methods) (ob-java/simple-with-no-main, ob-java/simple-with-main-args-array) (ob-java/simple-with-main-whitespace, ob-java/simple-with-class) (ob-java/simple-with-non-public-class) (ob-java/simple-with-class-and-package) (ob-java/simple-with-class-attr) (ob-java/simple-with-class-attr-with-package, ob-java/one-arg) (ob-java/args-quoted-string, ob-java/integer-var) (ob-java/var-with-main, ob-java/var-with-class) (ob-java/var-with-class-and-package) (ob-java/var-with-class-and-hanging-curlies, ob-java/two-vars) (ob-java/string-var, ob-java/multiline-string-var) (ob-java/return-vector-using-list, ob-java/return-vector-using-array) (ob-java/read-return-list, ob-java/read-list-return-array) (ob-java/read-return-list-with-package) (ob-java/output-list-with-spaces, ob-java/list-var, ob-java/vector-var) (ob-java/matrix-var, ob-java/matrix-var-with-header) (ob-java/output-table-with-header, ob-java/inhomogeneous_table) (ob-java/import_library, ob-java/import_library_inline) (ob-java/tangle): Set :dir to nil to prevent tests from writing files outside of temporary directory. (ob-java/tangle-with-package, ob-java/simple-dir): (ob-java/simple-dir-with-package): Move :dir param to be consistent with other tests. Most languages write tempfiles to babel's temporary directory, but ob-java originally had to write them to the current directory instead. I suspect this is because java puts the source file in package directories, and babel doesn't expect subdirectories in the babel temporary directory. This change brings back the original behavior. Reported-by: Jarmo Hurri <jarmo.hurri@iki.fi> Ref: https://orgmode.org/list/87mtzk9n30.fsf@iki.fi
2020-11-16 00:08:17 +00:00
(format "#+begin_src java :dir %s :results output silent
ob-java.el: Add support for variables, return values, tramp * lisp/ob-java.el: Add support for variables and return values. Write tempfiles to the `org-babel-temporary-directory'. Make package, class, and main method definitions optional. * testing/lisp/test-ob-java.el: Add tests. ob-java was missing features common to many other org-babel implementations, such as the ability to accept variables and return a value. This brings those features to ob-java, making the experience more consistent across org-babel languages, and expanding the ways java source blocks interact with org mode buffers. A simple java program requires boilerplate code to declare a class and main method. This boilerplate code makes java source blocks more tedious to write and more effort to read. This is more evident in an org buffer where there may be many small source blocks. This change makes that code optional. If it is not provided, the source block will be wrapped in the boilerplate code just before compilation. Most org babel implementation write temporary files to the `org-babel-temporary-directory'. That avoids polluting the current directory and provides built-in support for tramp. ob-java would write source files and binaries to the directory containing the org file by default. This may be unexpected and unwanted, and didn't work with tramp. This change writes all tempfiles to the `org-babel-temporary-directory'. Executing an ob-java source block would always try to compile and run the code in the source block, so a source block that wasn't runnable (didn't contain a main method) would error during run. This change adds a generic main method just before compilation if one isn't included in the source block so that the run will succeed. There were no tests for ob-java. This adds tests.
2020-10-05 12:07:25 +00:00
package 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