View spec_helper.rb
RSpec::Matchers.define_negated_matcher :avoid_outputting, :output
RSpec.configure do |config|
config.around do |ex|
expect(&ex).to avoid_outputting.to_stdout.and avoid_outputting.to_stderr
end
end
View my_macros.ex
defmodule MyMacros do
defmacro my_macro() do
module = __CALLER__.module
Module.get_attribute(module, :foo) |> IO.inspect(label: "outside quote")
quote do
Module.get_attribute(unquote(module), :foo) |> IO.inspect(label: "with unquoted module")
Module.get_attribute(__MODULE__, :foo) |> IO.inspect(label: "with __MODULE__")
end
end
View 0001-add-monitor-statements.patch
From ff210553f1a66db745a32224ff69b57073f953c6 Mon Sep 17 00:00:00 2001
From: Myron Marston <myron.marston@gmail.com>
Date: Mon, 27 Feb 2017 15:01:27 -0800
Subject: [PATCH] WIP: add monitor statements.
---
lib/mix/lib/mix/dep/converger.ex | 120 ++++++++++++++++++++++-----------------
1 file changed, 67 insertions(+), 53 deletions(-)
diff --git a/lib/mix/lib/mix/dep/converger.ex b/lib/mix/lib/mix/dep/converger.ex
View spec_helper.rb
RSpec.configure do |rspec|
if ENV["CI"]
rspec.before(:example, :focus) do
raise "Do not commit examples tagged with :focus"
end
else
rspec.filter_run_when_matching :focus
end
end
View worker.ex
alias Experimental.GenStage
defmodule WorkerPool.Worker do
@type subscription_options :: Keyword.t
@type producer :: pid | {pid, subscription_options}
@doc """
Starts a worker, subscribed to the provided job producers.
"""
@spec start_link([producer], Keyword.t) :: {:ok, pid}
View synchronize_death_on_exit.ex
@doc """
Will ensure the processes with the test does not complete until the process with the
provided pid has exited. This is necessary when writing multiple tests that start the
same named process. See https://github.com/elixir-lang/elixir/issues/3854 for more info.
This accepts either `{:ok, pid}` or just `pid` so that you can use it in a pipeline
after a `start_link` call.
"""
def synchronize_death_on_exit({:ok, pid}) when is_pid(pid), do: synchronize_death_on_exit(pid)
def synchronize_death_on_exit(pid) when is_pid(pid) do
View registry.ex
defmodule Registry do
# ...
def handle_call({:execute_against_shard, campaign_id, fun}, from, state) do
{shard_process, state} = find_or_create_shard(campaign_id, state)
ShardProcess.execute_and_reply(shard_process, fun, from)
{:noreply, state}
end
# ...
View Rakefile
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:specs_prep) do |t|
t.rspec_opts = "--out tmp/specs_task.out"
end
task :specs => :specs_prep do
results = File.read("tmp/specs_task.out")
# do something with results
end
View inverse_hook_filtering.rb
RSpec.configure do |config|
# Either put conditional logic in the hook...
config.around(:example) do |ex|
unless ex.metadata[:slow]
puts "Not tagged slow"
end
ex.run
end
View rspec_output.txt
A group of examples
 passes
 is pending (PENDING: not yet passing)
 fails (FAILED - 1)
 fails with a diff (FAILED - 2)
 fails with a multiline snippet in order to show off syntax highlighting (FAILED - 3)
Pending: (Failures listed here are expected and do not affect your suite's status)