22
33describe 'opal-jquery extensions' , js : true do
44 describe 'Element' do
5- xit 'will reuse the wrapper component class for the same Element ' do
6- evaluate_ruby do
5+ it 'renders a top level component using render with a block ' do
6+ expect_evaluate_ruby do
77 class Foo < Hyperloop ::Component
88 param :name
99 def render
1010 "hello #{ params . name } "
1111 end
12+ end
13+ test_div = Element . new ( :div )
14+ test_div . render { Foo ( name : 'fred' ) }
15+ Element [ test_div ] . find ( 'span' ) . html
16+ end . to eq ( 'hello fred' )
17+ end
18+
19+ it 'renders a top level component using render with a container and params ' do
20+ expect_evaluate_ruby do
21+ test_div = Element . new ( :div )
22+ test_div . render ( SPAN , id : :render_test_span ) { 'hello' }
23+ Element [ test_div ] . find ( '#render_test_span' ) . html
24+ end . to eq ( 'hello' )
25+ end
26+
27+ it 'will reuse the wrapper component class for the same Element' do
28+ evaluate_ruby do
29+ class Foo < Hyperloop ::Component
30+ param :name
31+ before_mount do
32+ @render_count = 0
33+ end
34+
35+ def render
36+ "hello #{ params . name } render-count: #{ @render_count += 1 } "
37+ end
1238
1339 def self . rec_cnt
1440 @@rec_cnt ||= 0
@@ -24,28 +50,21 @@ def self.rec_cnt
2450 test_div . render { Foo ( name : 'fred' ) }
2551 test_div . render { Foo ( name : 'freddy' ) }
2652 [ Element [ test_div ] . find ( 'span' ) . html , Foo . rec_cnt ]
27- end . to eq ( [ 'hello freddy' , 0 ] )
28- end
29-
30- it 'renders a top level component using render with a block' do
53+ end . to eq ( [ 'hello freddy render-count: 2' , 0 ] )
3154 expect_evaluate_ruby do
32- class Foo < Hyperloop ::Component
33- param :name
34- def render
35- "hello #{ params . name } "
36- end
37- end
3855 test_div = Element . new ( :div )
39- test_div . render { Foo ( name : 'fred' ) }
40- Element [ test_div ] . find ( 'span' ) . html
41- end . to eq ( 'hello fred' )
56+ test_div . render ( Foo , name : 'fred' )
57+ test_div . render ( Foo , name : 'freddy' )
58+ [ Element [ test_div ] . find ( 'span' ) . html , Foo . rec_cnt ]
59+ end . to eq ( [ 'hello freddy render-count: 2' , 0 ] )
4260 end
4361
44- it 'renders a top level component using render with a container and params ' do
45- expect_evaluate_ruby do
62+ it 'will use the ref call back to get the component ' do
63+ expect_promise do
4664 test_div = Element . new ( :div )
47- test_div . render ( :span , id : :render_test_span ) { 'hello' }
48- Element [ test_div ] . find ( '#render_test_span' ) . html
65+ Promise . new . then { |c | Element [ c ] . html } . tap do |p |
66+ test_div . render ( SPAN , id : :render_test_span , ref : p . method ( :resolve ) ) { 'hello' }
67+ end
4968 end . to eq ( 'hello' )
5069 end
5170
0 commit comments