aboutsummaryrefslogtreecommitdiff
path: root/tests/test-dev-fkeys--f6-language-detect.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-dev-fkeys--f6-language-detect.el')
-rw-r--r--tests/test-dev-fkeys--f6-language-detect.el80
1 files changed, 80 insertions, 0 deletions
diff --git a/tests/test-dev-fkeys--f6-language-detect.el b/tests/test-dev-fkeys--f6-language-detect.el
new file mode 100644
index 000000000..93dd6d8be
--- /dev/null
+++ b/tests/test-dev-fkeys--f6-language-detect.el
@@ -0,0 +1,80 @@
+;;; test-dev-fkeys--f6-language-detect.el --- Tests for cj/--f6-language-detect -*- lexical-binding: t -*-
+
+;;; Commentary:
+;; Tests for the language classifier used by the F6 test runner. Detection
+;; runs purely off the file extension. The classifier returns one of
+;; \\='elisp / \\='python / \\='go / \\='typescript / \\='javascript / \\='unknown.
+
+;;; Code:
+
+(require 'ert)
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+(require 'dev-fkeys)
+
+;;; Normal Cases
+
+(ert-deftest test-dev-fkeys-f6-language-detect-elisp ()
+ "Normal: .el classifies as elisp."
+ (should (eq (cj/--f6-language-detect "foo.el") 'elisp)))
+
+(ert-deftest test-dev-fkeys-f6-language-detect-python ()
+ "Normal: .py classifies as python."
+ (should (eq (cj/--f6-language-detect "foo.py") 'python)))
+
+(ert-deftest test-dev-fkeys-f6-language-detect-go ()
+ "Normal: .go classifies as go."
+ (should (eq (cj/--f6-language-detect "foo.go") 'go)))
+
+(ert-deftest test-dev-fkeys-f6-language-detect-typescript ()
+ "Normal: .ts and .tsx classify as typescript."
+ (should (eq (cj/--f6-language-detect "foo.ts") 'typescript))
+ (should (eq (cj/--f6-language-detect "foo.tsx") 'typescript)))
+
+(ert-deftest test-dev-fkeys-f6-language-detect-javascript ()
+ "Normal: .js and .jsx classify as javascript."
+ (should (eq (cj/--f6-language-detect "foo.js") 'javascript))
+ (should (eq (cj/--f6-language-detect "foo.jsx") 'javascript)))
+
+;;; Boundary Cases
+
+(ert-deftest test-dev-fkeys-f6-language-detect-with-directory-path ()
+ "Boundary: classifier ignores the path, looks only at extension."
+ (should (eq (cj/--f6-language-detect "/abs/path/to/foo.el") 'elisp))
+ (should (eq (cj/--f6-language-detect "rel/dir/foo.py") 'python)))
+
+(ert-deftest test-dev-fkeys-f6-language-detect-test-file-name ()
+ "Boundary: a filename that is itself a test file still classifies by extension.
+The test-file-vs-source distinction is a separate helper."
+ (should (eq (cj/--f6-language-detect "tests/test-foo.el") 'elisp))
+ (should (eq (cj/--f6-language-detect "tests/test_foo.py") 'python))
+ (should (eq (cj/--f6-language-detect "pkg/foo_test.go") 'go)))
+
+(ert-deftest test-dev-fkeys-f6-language-detect-uppercase-extension ()
+ "Boundary: extension match is case-insensitive (.PY, .EL, etc.)."
+ (should (eq (cj/--f6-language-detect "foo.EL") 'elisp))
+ (should (eq (cj/--f6-language-detect "foo.PY") 'python)))
+
+(ert-deftest test-dev-fkeys-f6-language-detect-no-extension ()
+ "Boundary: a filename with no extension classifies as unknown."
+ (should (eq (cj/--f6-language-detect "Makefile") 'unknown))
+ (should (eq (cj/--f6-language-detect "README") 'unknown)))
+
+(ert-deftest test-dev-fkeys-f6-language-detect-unsupported-extension ()
+ "Boundary: an extension we do not classify returns unknown."
+ (should (eq (cj/--f6-language-detect "foo.rs") 'unknown))
+ (should (eq (cj/--f6-language-detect "foo.rb") 'unknown))
+ (should (eq (cj/--f6-language-detect "foo.txt") 'unknown)))
+
+;;; Error Cases
+
+(ert-deftest test-dev-fkeys-f6-language-detect-nil-filename ()
+ "Error: nil filename returns unknown without erroring (defensive against
+buffers that aren't backed by files)."
+ (should (eq (cj/--f6-language-detect nil) 'unknown)))
+
+(ert-deftest test-dev-fkeys-f6-language-detect-empty-filename ()
+ "Error: empty string returns unknown."
+ (should (eq (cj/--f6-language-detect "") 'unknown)))
+
+(provide 'test-dev-fkeys--f6-language-detect)
+;;; test-dev-fkeys--f6-language-detect.el ends here