@@ -850,32 +850,46 @@ fact n =
850850              (4  0  2  4  6 )
851851              (5  0  2  4  6 ))
852852
853+ (defmacro  with-temp-switch-to-buffer  (&rest  body )
854+   " Create a temporary buffer, use `switch-to-buffer'  and evaluate BODY there like `progn' .
855+ 
856+ Seems that `execute-kbd-macro'  is not able to correctly execute keybindings without this."  
857+   (declare  (indent 0 ) (debug  t ))
858+   (let  ((temp-buffer (make-symbol  " temp-buffer" 
859+     `(let  ((, temp-buffergenerate-new-buffer  "  *temp*" 
860+        ; ; FIXME: kill-buffer can change current-buffer in some odd cases.
861+        (unwind-protect 
862+            (progn 
863+              (switch-to-buffer  , temp-buffer
864+              ,@body )
865+          (and  (buffer-name  , temp-buffer
866+               (kill-buffer  , temp-buffer
867+ 
853868(ert-deftest  haskell-indentation-ret-indents ()
854-   (switch-to-buffer  ( get-buffer-create   " source.hs " )) 
855-   (haskell-mode )
856-   (insert  " main = do" 
857-   ( execute-kbd-macro  ( kbd   " <RET> " )) 
858-   ( should  ( equal   2  ( count-lines  ( point-min ) ( point )) ))
859-   (should  (equal  2  (-  (point ) (line-beginning-position )))))
869+   (with-temp- switch-to-buffer
870+     (haskell-mode )
871+     (insert  " main = do" 
872+ 
873+    ( execute-kbd-macro  ( kbd   " <RET> " 
874+     (should  (equal  2  (-  (point ) (line-beginning-position ) )))))
860875
861876(ert-deftest  haskell-indentation-tab-and-backtab ()
862-   (switch-to-buffer  ( get-buffer-create   " source.hs " )) 
863-   (haskell-mode )
864-   (insert  " main = do\n   lala\n   " 
865-   ( execute-kbd-macro  ( kbd   " TAB " )) 
866-   ( should  ( equal   4  ( count-lines  ( point-min ) ( point )) ))
867-   (should  (equal  4  (-  (point ) (line-beginning-position ))))
868-   ( execute-kbd-macro  ( kbd   " <backtab> " )) 
869-   ( should  ( equal   4  ( count-lines  ( point-min ) ( point )) ))
870-   (should  (equal  2  (-  (point ) (line-beginning-position )))))
877+   (with-temp- switch-to-buffer
878+      (haskell-mode )
879+      (insert  " main = do\n   lala\n   " 
880+ 
881+     ( execute-kbd-macro  ( kbd   " TAB " 
882+      (should  (equal  4  (-  (point ) (line-beginning-position ))))
883+ 
884+     ( execute-kbd-macro  ( kbd   " <backtab> " 
885+      (should  (equal  2  (-  (point ) (line-beginning-position ) )))))
871886
872887(ert-deftest  haskell-indentation-altj-comment ()
873888  :expected-result  :failed 
874-   (switch-to-buffer  (get-buffer-create  " another.hs" 
875-   (haskell-mode )
876-   (insert  " main = do\n     return ()\n\n -- comment" 
877-   (execute-kbd-macro  (kbd  " M-j" 
878-   (should  (equal  2  (count-lines  (point-min ) (point ))))
879-   (should  (equal  3  (-  (point ) (line-beginning-position )))))
889+   (with-temp-switch-to-buffer
890+     (haskell-mode )
891+     (insert  " main = do\n     return ()\n\n -- comment" 
892+     (execute-kbd-macro  (kbd  " M-j" 
893+     (should  (equal  3  (-  (point ) (line-beginning-position ))))))
880894
881895; ;; haskell-indentation-tests.el ends here
0 commit comments