Mix.Shell.Process

This module provides a Mix shell implementation that uses the current process mailbox for communication instead of IO.

As an example, when Mix.shell.info("hello") is called, the following message will be sent to the calling process:

{:mix_shell, :info, ["hello"]}

This is mainly useful in tests, allowing us to assert if given messages were received or not instead of performing checks on some captured IO. Since we need to guarantee a clean slate between tests, there is also a flush/1 function responsible for flushing all :mix_shell related messages from the process inbox.