Skip to content

Commit

Permalink
improved test of combinewith
Browse files Browse the repository at this point in the history
  • Loading branch information
m1dnight committed May 10, 2018
1 parent 62defa2 commit 6b0fe96
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 19 deletions.
2 changes: 1 addition & 1 deletion lib/behavior/gen_observable.ex
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ defmodule Observables.GenObservable do
GenServer.start(__MODULE__, {module, args}, options)
end

def spawn_supervised(module, args) do
def spawn_supervised(module, args \\ []) do
Observables.Supervisor.add_child(__MODULE__, [module, args])
end

Expand Down
50 changes: 32 additions & 18 deletions test/observables_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -480,31 +480,45 @@ defmodule ObservablesTest do
test "Combine Latest" do
testproc = self()

xs = Obs.range(1, 3, 900)
ys = Obs.range(11, 15, 3000)

{:ok, pid1} = GenObservable.spawn_supervised(Observables.Subject)
xs = Obs.from_pid(pid1)

{:ok, pid2} = GenObservable.spawn_supervised(Observables.Subject)
ys = Obs.from_pid(pid2)

Obs.combinelatest(xs, ys)
|> Obs.inspect()
|> Obs.map(fn v -> send(testproc, v) end)

[{3, 11}, {3, 12}, {3, 13}, {3, 14}, {3, 15}]
|> Enum.map(fn x ->
receive do
^x -> Logger.debug("Got #{inspect(x)}")
after
5000 ->
assert "did not get expected value #{inspect(x)}"
end
end)
# Send first value, should not produce.
GenObservable.send_event(pid1, :x0)

# Receive no other values.
receive do
x ->
Logger.error("Received another value, did not want")
assert "received another value: #{inspect(x, charlists: :as_lists)} " == ""
after
1000 ->
:ok
x -> flunk "Mailbox was supposed to be empty, got: #{inspect x}"
after
0 -> :ok
end

# Send second value, should produce.
GenObservable.send_event(pid2, :y0)
assert_receive({:x0, :y0}, 1000, "did not get this message!")

# Update the left observable. Shoudl produce with history.
GenObservable.send_event(pid1, :x1)
assert_receive({:x1, :y0}, 1000, "did not get this message!")

GenObservable.send_event(pid2, :y1)
assert_receive({:x1, :y1}, 1000, "did not get this message!")

# Send a final value, should produce.
GenObservable.send_event(pid1, :xfinal)
assert_receive({:xfinal, :y1}, 1000, "did not get this message!")

receive do
x -> flunk "Mailbox was supposed to be empty, got: #{inspect x}"
after
0 -> :ok
end
end
end

0 comments on commit 6b0fe96

Please sign in to comment.