branch: elpa/d-mode
commit f69e94e3cbf5143628cd9407c7d8fb0f9bd83e87
Author: Vladimir Panteleev <[email protected]>
Commit: Vladimir Panteleev <[email protected]>
Change test suite enumeration and activation
- Enumerate the tests/ directory (at compile-time) instead of
redundantly declaring every test file as its own test
- Move the expected-result condition to the test files themselves as a
#min-version header
Following this, adding/removing/changing tests should no longer
require editing d-mode-test.el.
---
d-mode-test.el | 59 ++++++++++++++++++++++++------------------------
tests/I0019.d | 1 +
tests/I0035.d | 1 +
tests/I0039.d | 1 +
tests/I0058.d | 1 +
tests/I0067.d | 1 +
tests/I0070.d | 1 +
tests/I0082.d | 1 +
tests/I0082.d.html | 3 ++-
tests/fonts_enums.d | 1 +
tests/fonts_enums.d.html | 3 ++-
11 files changed, 42 insertions(+), 31 deletions(-)
diff --git a/d-mode-test.el b/d-mode-test.el
index 3e99efb..0616251 100644
--- a/d-mode-test.el
+++ b/d-mode-test.el
@@ -292,35 +292,36 @@ the reference file, raise an error."
"Got:
\n--------------------\n%s\n--------------------\n")
expected actual))))
-(defmacro d-test-deftest (name filename expected-result)
- "Define a d-mode test using the given FILENAME.
-
-EXPECTED-RESULT should return t if the test
-is expected to succeed, and nil otherwise."
- `(ert-deftest ,name ()
- :expected-result (if ,expected-result :passed :failed)
- (should (do-one-test ,filename))))
-
-;; Run the tests
-(d-test-deftest imenu "tests/imenu.d" t)
-(d-test-deftest fonts "tests/fonts.d" t)
-(d-test-deftest fonts_enums "tests/fonts_enums.d" (version< "26.2"
emacs-version))
-(d-test-deftest i0019 "tests/I0019.d" (version< "26.2" emacs-version))
-(d-test-deftest i0021 "tests/I0021.d" t)
-(d-test-deftest i0026 "tests/I0026.d" t)
-(d-test-deftest i0030 "tests/I0030.d" t)
-(d-test-deftest i0035 "tests/I0035.d" (version< "24.4" emacs-version))
-(d-test-deftest i0039 "tests/I0039.d" (version< "24.4" emacs-version))
-(d-test-deftest i0049 "tests/I0049.d" t)
-(d-test-deftest i0054 "tests/I0054.d" t)
-(d-test-deftest i0058 "tests/I0058.d" (version< "24.4" emacs-version))
-(d-test-deftest i0064 "tests/I0064.d" t)
-(d-test-deftest i0067 "tests/I0067.d" (version< "24.4" emacs-version))
-(d-test-deftest i0069 "tests/I0069.txt" t)
-(d-test-deftest i0070 "tests/I0070.d" (version< "24.4" emacs-version))
-(d-test-deftest i0072 "tests/I0072.txt" t)
-(d-test-deftest i0082 "tests/I0082.d" (version< "24.4" emacs-version))
-(d-test-deftest i0090 "tests/I0090.d" t)
+(defun d-test-get-expected-result (filename)
+ (with-temp-buffer
+ (insert-file-contents filename)
+ (let* ((min-ver
+ (if (re-search-forward "^// #min-version: \\(.+\\)$" nil t)
+ (match-string 1)
+ "0")))
+ (version<= min-ver emacs-version))))
+
+(defmacro d-test-dir (dir)
+ "Register all test files from DIR with ert."
+ (apply #'nconc
+ '(progn)
+ (mapcar
+ (lambda (filename)
+ (let ((path (expand-file-name filename dir)))
+ (cond
+ ((string-match-p "\\`\\.\\.?\\'" filename)
+ nil)
+ ((string-match-p "\\.\\(d\\|txt\\)\\'" filename)
+ `((ert-deftest ,(intern (file-name-sans-extension filename)) ()
+ :expected-result (if (d-test-get-expected-result ,path)
:passed :failed)
+ (should (do-one-test ,path)))))
+ ((string-match-p "\\.d\\.html\\'" filename)
+ nil)
+ (t
+ (message "Ignoring test file with unknown extension: %s"
filename)
+ nil))))
+ (directory-files dir))))
+(d-test-dir "tests")
;;----------------------------------------------------------------------------
diff --git a/tests/I0019.d b/tests/I0019.d
index f16181c..d31f9db 100644
--- a/tests/I0019.d
+++ b/tests/I0019.d
@@ -1,3 +1,4 @@
+// #min-version: 26.2
// #run: (d-test-indent)
enum OtherValues2 : uint {
diff --git a/tests/I0035.d b/tests/I0035.d
index 1bf1aab..8a3dbc0 100644
--- a/tests/I0035.d
+++ b/tests/I0035.d
@@ -1,3 +1,4 @@
+// #min-version: 24.5
// #run: (d-test-indent)
static if (true)
diff --git a/tests/I0039.d b/tests/I0039.d
index 42c8949..a424f7d 100644
--- a/tests/I0039.d
+++ b/tests/I0039.d
@@ -1,3 +1,4 @@
+// #min-version: 24.5
// #run: (d-test-indent)
void foo()
diff --git a/tests/I0058.d b/tests/I0058.d
index 8ad6833..40cdf4e 100644
--- a/tests/I0058.d
+++ b/tests/I0058.d
@@ -1,3 +1,4 @@
+// #min-version: 24.5
// #run: (d-test-indent)
double foo(double b)
diff --git a/tests/I0067.d b/tests/I0067.d
index ad12f15..dc6ee06 100644
--- a/tests/I0067.d
+++ b/tests/I0067.d
@@ -1,3 +1,4 @@
+// #min-version: 24.5
// #run: (d-test-indent)
void foo(T)(T stuff)
diff --git a/tests/I0070.d b/tests/I0070.d
index e9bb6df..2f6e3af 100644
--- a/tests/I0070.d
+++ b/tests/I0070.d
@@ -1,3 +1,4 @@
+// #min-version: 24.5
// #run: (progn (c-set-offset 'func-decl-cont #'d-lineup-arglists)
(d-test-indent))
auto foo(A, B, C)
diff --git a/tests/I0082.d b/tests/I0082.d
index 820a1d6..185d245 100644
--- a/tests/I0082.d
+++ b/tests/I0082.d
@@ -1,3 +1,4 @@
+// #min-version: 24.5
// #run: (d-test-fontification)
struct S
diff --git a/tests/I0082.d.html b/tests/I0082.d.html
index eb75859..01fa9bd 100644
--- a/tests/I0082.d.html
+++ b/tests/I0082.d.html
@@ -1,4 +1,5 @@
-<span class="comment-delimiter">// </span><span class="comment">#run:
(d-test-fontification)
+<span class="comment-delimiter">// </span><span class="comment">#min-version:
24.5
+</span><span class="comment-delimiter">// </span><span class="comment">#run:
(d-test-fontification)
</span>
<span class="keyword">struct</span> <span class="type">S</span>
{
diff --git a/tests/fonts_enums.d b/tests/fonts_enums.d
index 547bffc..7b5bce8 100644
--- a/tests/fonts_enums.d
+++ b/tests/fonts_enums.d
@@ -1,3 +1,4 @@
+// #min-version: 26.2
// #run: (d-test-fontification)
auto var = true;
diff --git a/tests/fonts_enums.d.html b/tests/fonts_enums.d.html
index 16bb4b9..3dad54f 100644
--- a/tests/fonts_enums.d.html
+++ b/tests/fonts_enums.d.html
@@ -1,4 +1,5 @@
-<span class="comment-delimiter">// </span><span class="comment">#run:
(d-test-fontification)
+<span class="comment-delimiter">// </span><span class="comment">#min-version:
26.2
+</span><span class="comment-delimiter">// </span><span class="comment">#run:
(d-test-fontification)
</span>
<span class="keyword">auto</span> <span class="variable-name">var</span> =
<span class="constant">true</span>;
<span class="keyword">enum</span> <span class="variable-name">var</span> =
<span class="constant">true</span>;