Skip to content

nicferrier/emacs-fakir

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 

Fakir

This is a bunch of functions to mock core Emacs Lisp objects for testing purposes.

These are the two things most difficult to mock in Emacs currently.

We use the variations on the noflet macro to override a lot of Emacs API functions to understand mocked data types.

API

Here's the API currently.

fakir-fake-file faked-file &rest body

Fake faked-file and evaluate body.

faked-file must be a fakir-file object or a list of fakir-file objects.

fakir-file &rest args

Make a fakir-file, a struct.

:FILENAME is the basename of the file

:DIRECTORY is the dirname of the file

:CONTENT is a string of content for the file

:MTIME is the modified time, with a default around the time fakir was written.

fakir-file-path fakir-file

Make the path for fakir-file.

fakir-mock-proc-properties process-obj &rest body

Mock process property list functions.

Within body the functions process-get, process-put and process-plist are all mocked to use a hashtable if the process passed to them is eq to process-obj.

Also provides an additional function process-setplist to set the plist of the specified process-obj. If this function is called on anything but process-obj it will error.

This is the beginning of a noflet alternative to `fakir-mock-process'

fakir-mock-process process-symbol process-bindings &rest body

Allow easier testing by mocking the process functions.

For example:

 (fakir-mock-process :fake
      (:elnode-http-params
       (:elnode-http-method "GET")
       (:elnode-http-query "a=10"))
   (should (equal 10 (elnode-http-param :fake "a"))))

Causes:

 (process-get :fake :elnode-http-method)

to always return "GET".

process-put is also remapped, to set any setting.

process-buffer is also remapped, to deliver the value of the key :buffer if present and a dummy buffer otherwise.

delete-process is also remapped, to throw :mock-process-finished to the catch called :mock-process-finished. You can implement your own catch to do something with the delete-process event.

process-send-string is also remapped to send to a fake output buffer. The fake buffer can be returned with fakir-get-output-buffer.

In normal circumstances, we return what the body returned.

fakir-test-mock-process

A very quick function to test mocking process macro.

fakir-time-encode time-str

Encode the time-str as an EmacsLisp time.

TODO

  • currenly the process functions do not use noflet, they need to be re-written
    • flet-overrides could be thrown away then
  • share the implementation of the faked file functions better
    • this would also have the benefit that they are more instrumentable
    • something like:
(override 
  (expand-file-name fakir/expand-file-name)
  (find-file-noselect fakir/find-file-no-select)
  ...)         

where the 2nd symbol is the implementation function

      • it should be expected to take the original function as 1st argument
      • and all other arguments as the original
  • we need multiple file support
    • just added this - Sun May 12 23:59:50 BST 2013

About

functions and macros to fake bit of Emacs core libraries, like files and processes.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published