Skip to content
This repository was archived by the owner on Oct 7, 2020. It is now read-only.

Enrich plugins call #65

Merged
merged 3 commits into from
Nov 12, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 4 additions & 40 deletions elisp/tests/haskell-ide-engine-tests.el
Original file line number Diff line number Diff line change
Expand Up @@ -147,49 +147,13 @@ http://debbugs.gnu.org/cgi/bugreport.cgi?bug=15990."
(really-sleep-for 2 (lambda () response))
(should response)

(should (equal '(tag . "Ok") (assq 'tag response)))
(should (assq 'contents response))))

(haskell-ide-engine-define-test
haskell-ide-engine-can-list-commands-for-base

;; starts the process
(should (haskell-ide-engine-start-process))

(let ((response))
(setq haskell-ide-engine-process-handle-message
(lambda (json)
(setq response json)))
(haskell-ide-engine-post-message
'(("cmd" . "base:commands") ("params" . (("plugin" . (("contents" . "base") ("tag" . "text")))))))

(really-sleep-for 2)
(should response)

(should (equal '(tag . "Ok") (assq 'tag response)))
(should (assq 'contents response))
(should (member "version" (assq 'contents response)))))
(should (assq 'base (assq 'contents response)))
(should (assq 'commands (assq 'base (assq 'contents response))))
(should (cl-find-if (lambda (item) (equal '(name . "version") (assq 'name item)))
(cdr (assq 'commands (assq 'base (assq 'contents response))))))))

(haskell-ide-engine-define-test
haskell-ide-engine-can-list-command-details-for-base-plugins

;; starts the process
(should (haskell-ide-engine-start-process))

(let ((response))
(setq haskell-ide-engine-process-handle-message
(lambda (json)
(setq response json)))
(haskell-ide-engine-post-message
'(("cmd" . "base:commandDetail") ("params" . (("plugin" . (("tag" . "text") ("contents" . "base"))) ("command" . (("tag" . "text") ("contents" . "plugins")))))))

(really-sleep-for 2)

(should response)

(should (equal '(tag . "Ok") (assq 'tag response)))
(should (assq 'contents response))
(should (equal '(name . "plugins") (assq 'name (assq 'contents response))))))

(ert-deftest haskell-ide-engine-can-handle-invalid-input ()

Expand Down
26 changes: 26 additions & 0 deletions haskell-ide-plugin-api/Haskell/Ide/Engine/PluginDescriptor.hs
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,32 @@ instance FromJSON CommandDescriptor where

-- -------------------------------------

instance ToJSON Service where
toJSON service = object [ "name" .= svcName service ]


instance FromJSON Service where
parseJSON (Object v) =
Service <$> v .: "name"
parseJSON _ = empty

-- -------------------------------------

instance ToJSON PluginDescriptor where
toJSON pluginDescriptor = object [ "commands" .= map cmdDesc (pdCommands pluginDescriptor)
, "exposed_services" .= pdExposedServices pluginDescriptor
, "used_services" .= pdUsedServices pluginDescriptor
]

instance FromJSON PluginDescriptor where
parseJSON (Object v) =
PluginDescriptor <$> (fmap (fmap (\desc -> Command desc (error "missing"))) (v .: "commands"))
<*> v .: "exposed_services"
<*> v .: "used_services"
parseJSON _ = empty

-- -------------------------------------

instance ToJSON IdeRequest where
toJSON (IdeRequest{ideCommand = command, ideParams = params}) =
object [ "command" .= command
Expand Down
2 changes: 1 addition & 1 deletion src/Haskell/Ide/Engine/BasePlugin.hs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ versionCmd _ _ = return (IdeResponseOk (String $ T.pack version))
pluginsCmd :: CommandFunc
pluginsCmd _ _ = do
plugins <- getPlugins
return (IdeResponseOk (toJSON $ Map.keys plugins))
return (IdeResponseOk (toJSON $ plugins))

commandsCmd :: CommandFunc
commandsCmd _ req = do
Expand Down