@@ -4,6 +4,8 @@ defmodule Membrane.Integration.ForwardingFilterTest do
4
4
import Membrane.ChildrenSpec
5
5
import Membrane.Testing.Assertions
6
6
7
+ require Membrane.Pad , as: Pad
8
+
7
9
alias Membrane.Buffer
8
10
alias Membrane.ForwardingFilter
9
11
alias Membrane.Testing
@@ -12,21 +14,16 @@ defmodule Membrane.Integration.ForwardingFilterTest do
12
14
defstruct [ :field ]
13
15
end
14
16
15
- defmodule Event do
16
- @ derive Membrane.EventProtocol
17
- defstruct [ :field ]
18
- end
19
-
20
17
defmodule Source do
21
18
use Membrane.Source
22
19
def_output_pad :output , accepted_format: _any , flow_control: :push
23
20
24
21
@ impl true
25
- def handle_parent_notifications ( { action , item } , _ctx , state ) ,
22
+ def handle_parent_notification ( { action , item } , _ctx , state ) ,
26
23
do: { [ { action , { :output , item } } ] , state }
27
24
end
28
25
29
- test "ForwardingFilter buffers data until output pad is linked" do
26
+ test "Membrane. ForwardingFilter buffers data until output pad is linked" do
30
27
pipeline =
31
28
Testing.Pipeline . start_link_supervised! (
32
29
spec:
@@ -42,25 +39,40 @@ defmodule Membrane.Integration.ForwardingFilterTest do
42
39
data
43
40
|> Enum . each ( fn { type , item } ->
44
41
Testing.Pipeline . notify_child ( pipeline , :source , { type , item } )
45
- assert_pipeline_notified ( pipeline , :filter , { ^ type , :input , ^ item } )
42
+
43
+ if type in [ :stream_format , :event ] do
44
+ assert_pipeline_notified ( pipeline , :filter , { ^ type , Pad . ref ( :input , _id ) , ^ item } )
45
+ end
46
+ end )
47
+
48
+ spec = get_child ( :filter ) |> child ( :sink , Testing.Sink )
49
+ Testing.Pipeline . execute_actions ( pipeline , spec: spec )
50
+
51
+ data
52
+ |> Enum . each ( fn
53
+ { :buffer , item } -> assert_sink_buffer ( pipeline , :sink , ^ item )
54
+ { :event , item } -> assert_sink_event ( pipeline , :sink , ^ item )
55
+ { :stream_format , item } -> assert_sink_stream_format ( pipeline , :sink , ^ item )
46
56
end )
47
57
48
- Testing.Pipeline . execute_actions (
49
- spec:
50
- get_child ( :filter )
51
- |> child ( :sink , Testing.Sink )
52
- )
58
+ data = generate_data ( 100 , [ :stream_format , :buffer , :event ] , 200 )
53
59
54
60
data
55
61
|> Enum . each ( fn { type , item } ->
62
+ Testing.Pipeline . notify_child ( pipeline , :source , { type , item } )
63
+
64
+ if type in [ :stream_format , :event ] do
65
+ assert_pipeline_notified ( pipeline , :filter , { ^ type , Pad . ref ( :input , _id ) , ^ item } )
66
+ end
67
+
56
68
case type do
57
69
:buffer -> assert_sink_buffer ( pipeline , :sink , ^ item )
58
70
:event -> assert_sink_event ( pipeline , :sink , ^ item )
59
71
:stream_format -> assert_sink_stream_format ( pipeline , :sink , ^ item )
60
72
end
61
73
end )
62
74
63
- data = generate_data ( 100 , [ :stream_format , :buffer , :event ] , 200 )
75
+ Testing.Pipeline . terminate ( pipeline )
64
76
end
65
77
66
78
defp generate_data ( number , types , pts_offset \\ 0 ) do
@@ -69,7 +81,7 @@ defmodule Membrane.Integration.ForwardingFilterTest do
69
81
|> Enum . map ( fn i ->
70
82
case Enum . random ( types ) do
71
83
:stream_format -> { :stream_format , % Format { field: i } }
72
- :event -> { :event , % Event { field: i } }
84
+ :event -> { :event , % Testing. Event{ } }
73
85
:buffer -> { :buffer , % Buffer { pts: i + pts_offset , payload: << >> } }
74
86
end
75
87
end )
0 commit comments