@@ -313,6 +313,51 @@ myReverse xs = revAcc [] xs where
313
313
(delete-directory mock-directory-name t )
314
314
(idris-quit))))
315
315
316
+ (defun idris-file-to-load-alist (file-name )
317
+ " Return FILE-NAME as an alist with keys: source-dir, work-dir and path."
318
+ (let* ((ipkg-file (car-safe (idris-find-file-upwards " ipkg" )))
319
+ (work-dir (directory-file-name (file-name-parent-directory (or ipkg-file file-name))))
320
+ (source-dir (or (idris-ipkg-find-src-dir) work-dir)))
321
+ (list
322
+ (cons 'work-dir work-dir)
323
+ (cons 'source-dir source-dir)
324
+ (cons 'path (file-relative-name file-name source-dir)))))
325
+
326
+ (ert-deftest idris-test-idris-file-to-load-alist ()
327
+ " Test that `idris-file-to-load-alist' returns expected data structure."
328
+ (cl-flet ((idris-ipkg-find-src-dir-stub () src-dir)
329
+ (idris-find-file-upwards-stub (_ex) ipkg-files))
330
+ (advice-add 'idris-ipkg-find-src-dir :override #'idris-ipkg-find-src-dir-stub )
331
+ (advice-add 'idris-find-file-upwards :override #'idris-find-file-upwards-stub )
332
+ (let* ((default-directory " /some/path/to/idris-project/src/Component" )
333
+ (file " Foo.idr" )
334
+ (file-name (file-name-concat default-directory file))
335
+ ipkg-files
336
+ src-dir)
337
+ (unwind-protect
338
+ (progn
339
+ ; ; it contains all expected keys
340
+ (let ((result (idris-file-to-load-alist file-name)))
341
+ (should (equal " Foo.idr" (alist-get 'path result)))
342
+ (should (equal default-directory (alist-get 'source-dir result)))
343
+ (should (equal default-directory (alist-get 'work-dir result))))
344
+
345
+ (let* ((src-dir " /some/path/to/idris-project/src" )
346
+ (result (idris-file-to-load-alist file-name)))
347
+ (should (equal " Component/Foo.idr" (alist-get 'path result)))
348
+ (should (equal src-dir (alist-get 'source-dir result)))
349
+ (should (equal default-directory (alist-get 'work-dir result))))
350
+
351
+ (let* ((ipkg-files '(" /some/path/to/idris-project/foo.ipkg" ))
352
+ (src-dir " /some/path/to/idris-project/src" )
353
+ (result (idris-file-to-load-alist file-name)))
354
+ (should (equal " Component/Foo.idr" (alist-get 'path result)))
355
+ (should (equal src-dir (alist-get 'source-dir result)))
356
+ (should (equal " /some/path/to/idris-project" (alist-get 'work-dir result)))))
357
+
358
+ (advice-remove 'idris-ipkg-find-src-dir #'idris-ipkg-find-src-dir-stub )
359
+ (advice-remove 'idris-find-file-upwards #'idris-find-file-upwards-stub )))))
360
+
316
361
; ; Tests by Yasuhiko Watanabe
317
362
; ; https://github.com/idris-hackers/idris-mode/pull/537/files
318
363
(idris-ert-command-action " test-data/CaseSplit.idr" idris-case-split idris-test-eq-buffer)
0 commit comments