@@ -8,6 +8,7 @@ var MemoryFS = require('memory-fs')
8
8
var expect = require ( 'chai' ) . expect
9
9
var hash = require ( 'hash-sum' )
10
10
var SSR = require ( 'vue-server-renderer' )
11
+ var Vue = require ( 'vue/dist/vue.runtime.js' )
11
12
// var compiler = require('../lib/template-compiler')
12
13
var normalizeNewline = require ( 'normalize-newline' )
13
14
var ExtractTextPlugin = require ( 'extract-text-webpack-plugin' )
@@ -86,38 +87,10 @@ function test (options, assert) {
86
87
} )
87
88
}
88
89
89
- function mockRender ( options , data ) {
90
- function h ( tag , data , children ) {
91
- if ( Array . isArray ( data ) ) {
92
- children = data
93
- data = null
94
- }
95
- return {
96
- tag : tag ,
97
- data : data ,
98
- children : children
99
- }
100
- }
101
- function e ( text = '' ) {
102
- return {
103
- text : text ,
104
- isComment : true
105
- }
106
- }
107
- return options . render . call ( Object . assign ( {
108
- _v ( val ) {
109
- return val
110
- } ,
111
- _self : { } ,
112
- _e : e ,
113
- $createElement : h ,
114
- _m ( index ) {
115
- return options . staticRenderFns [ index ] . call ( this )
116
- } ,
117
- _s ( str ) {
118
- return String ( str )
119
- }
120
- } , data ) , h )
90
+ function mockRender ( options , data = { } ) {
91
+ const vm = new Vue ( Object . assign ( { } , options , { data ( ) { return data } } ) )
92
+ vm . $mount ( )
93
+ return vm . _vnode
121
94
}
122
95
123
96
function interopDefault ( module ) {
@@ -134,10 +107,11 @@ describe('vue-loader', function () {
134
107
var vnode = mockRender ( module , {
135
108
msg : 'hi'
136
109
} )
110
+
137
111
// <h2 class="red">{{msg}}</h2>
138
112
expect ( vnode . tag ) . to . equal ( 'h2' )
139
113
expect ( vnode . data . staticClass ) . to . equal ( 'red' )
140
- expect ( vnode . children [ 0 ] ) . to . equal ( 'hi' )
114
+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'hi' )
141
115
142
116
expect ( module . data ( ) . msg ) . to . contain ( 'Hello from Component A!' )
143
117
var style = window . document . querySelector ( 'style' ) . textContent
@@ -222,11 +196,11 @@ describe('vue-loader', function () {
222
196
// <svg><template><p></p></template></svg>
223
197
// </div>
224
198
expect ( vnode . children [ 0 ] . tag ) . to . equal ( 'div' )
225
- expect ( vnode . children [ 1 ] ) . to . equal ( ' ' )
199
+ expect ( vnode . children [ 1 ] . text ) . to . equal ( ' ' )
226
200
expect ( vnode . children [ 2 ] . tag ) . to . equal ( 'p' )
227
201
expect ( vnode . children [ 2 ] . data . staticClass ) . to . equal ( 'abc def' )
228
- expect ( vnode . children [ 4 ] [ 0 ] . tag ) . to . equal ( 'p' )
229
- expect ( vnode . children [ 4 ] [ 0 ] . data . staticClass ) . to . equal ( 'test' )
202
+ expect ( vnode . children [ 4 ] . tag ) . to . equal ( 'p' )
203
+ expect ( vnode . children [ 4 ] . data . staticClass ) . to . equal ( 'test' )
230
204
231
205
var style = window . document . querySelector ( 'style' ) . textContent
232
206
style = normalizeNewline ( style )
@@ -264,7 +238,7 @@ describe('vue-loader', function () {
264
238
var vnode = mockRender ( module )
265
239
// '<div><h1>hello</h1></div>'
266
240
expect ( vnode . children [ 0 ] . tag ) . to . equal ( 'h1' )
267
- expect ( vnode . children [ 0 ] . children [ 0 ] ) . to . equal ( 'hello' )
241
+ expect ( vnode . children [ 0 ] . children [ 0 ] . text ) . to . equal ( 'hello' )
268
242
done ( )
269
243
} )
270
244
} )
@@ -401,7 +375,7 @@ describe('vue-loader', function () {
401
375
// <div class="msg">{{ msg }}</div>
402
376
expect ( vnode . tag ) . to . equal ( 'div' )
403
377
expect ( vnode . data . staticClass ) . to . equal ( 'msg' )
404
- expect ( vnode . children [ 0 ] ) . to . equal ( 'Hello from mocked service!' )
378
+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'Hello from mocked service!' )
405
379
done ( )
406
380
} )
407
381
} )
@@ -522,7 +496,7 @@ describe('vue-loader', function () {
522
496
msg : 'success'
523
497
} )
524
498
expect ( vnode . tag ) . to . equal ( 'div' )
525
- expect ( vnode . children [ 0 ] ) . to . equal ( 'success' )
499
+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'success' )
526
500
expect ( new Module ( ) . msg === 'success' )
527
501
done ( )
528
502
} )
@@ -541,7 +515,7 @@ describe('vue-loader', function () {
541
515
} )
542
516
expect ( vnode . tag ) . to . equal ( 'h2' )
543
517
expect ( vnode . data . staticClass ) . to . equal ( 'red' )
544
- expect ( vnode . children [ 0 ] ) . to . equal ( 'hi' )
518
+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'hi' )
545
519
546
520
expect ( rawModule . default . data ( ) . msg ) . to . contain ( 'Hello from Component A!' )
547
521
done ( )
@@ -635,7 +609,7 @@ describe('vue-loader', function () {
635
609
// <h2 id="-msg-">{{msg}}</h2>
636
610
expect ( vnode . tag ) . to . equal ( 'h2' )
637
611
expect ( vnode . data . attrs . id ) . to . equal ( '-msg-' )
638
- expect ( vnode . children [ 0 ] ) . to . equal ( 'hi' )
612
+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'hi' )
639
613
done ( )
640
614
} )
641
615
} )
@@ -816,7 +790,7 @@ describe('vue-loader', function () {
816
790
// <h2 class="green">{{msg}}</h2>
817
791
expect ( vnode . tag ) . to . equal ( 'h2' )
818
792
expect ( vnode . data . staticClass ) . to . equal ( 'green' )
819
- expect ( vnode . children [ 0 ] ) . to . equal ( 'hi' )
793
+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'hi' )
820
794
821
795
expect ( module . data ( ) . msg ) . to . contain ( 'Changed!' )
822
796
var style = window . document . querySelector ( 'style' ) . textContent
@@ -846,7 +820,7 @@ describe('vue-loader', function () {
846
820
msg : JSON . parse ( module . __i18n ) . en . hello ,
847
821
blog : module . __blog
848
822
} )
849
- expect ( vnode . children [ 0 ] . children [ 0 ] ) . to . equal ( 'hello world' )
823
+ expect ( vnode . children [ 0 ] . children [ 0 ] . text ) . to . equal ( 'hello world' )
850
824
expect ( vnode . children [ 2 ] . data . domProps . innerHTML ) . to . equal ( '<h2 id="foo">foo</h2>' )
851
825
done ( )
852
826
} )
@@ -872,10 +846,10 @@ describe('vue-loader', function () {
872
846
} , ( window , module ) => {
873
847
var results = [ ]
874
848
// var vnode =
875
- mockRender ( module , {
876
- $processStyle : style => results . push ( style ) ,
877
- transform : 'translateX(10px)'
878
- } )
849
+ mockRender (
850
+ Object . assign ( module , { methods : { $processStyle : style => results . push ( style ) } } ) ,
851
+ { transform : 'translateX(10px)' }
852
+ )
879
853
expect ( results ) . to . deep . equal ( [
880
854
{ 'flex-direction' : 'row' } ,
881
855
{ 'transform' : 'translateX(10px)' }
@@ -931,7 +905,7 @@ describe('vue-loader', function () {
931
905
// <div class="foo">hi</div>
932
906
expect ( vnode . tag ) . to . equal ( 'div' )
933
907
expect ( vnode . data . class ) . to . equal ( 'foo' )
934
- expect ( vnode . children [ 0 ] ) . to . equal ( 'functional' )
908
+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'functional' )
935
909
936
910
var style = window . document . querySelector ( 'style' ) . textContent
937
911
style = normalizeNewline ( style )
@@ -951,10 +925,52 @@ describe('vue-loader', function () {
951
925
expect ( vnode . tag ) . to . equal ( 'div' )
952
926
expect ( vnode . children . length ) . to . equal ( 2 )
953
927
expect ( vnode . children [ 0 ] . data . staticClass ) . to . equal ( 'red' )
954
- expect ( vnode . children [ 0 ] . children [ 0 ] ) . to . equal ( 'hi' )
928
+ expect ( vnode . children [ 0 ] . children [ 0 ] . text ) . to . equal ( 'hi' )
955
929
expect ( vnode . children [ 1 ] . isComment ) . to . true
956
930
expect ( vnode . children [ 1 ] . text ) . to . equal ( ' comment here ' )
957
931
done ( )
958
932
} )
959
933
} )
934
+
935
+ // Vue required tests for more complete test cases
936
+ it ( 'should allow functional template' , done => {
937
+ test ( {
938
+ entry : './test/fixtures/functional-root.vue' ,
939
+ vue : {
940
+ preserveWhitespace : false
941
+ }
942
+ } , ( window , module ) => {
943
+ expect ( module . components . Functional . compiled ) . to . equal ( true )
944
+ expect ( module . components . Functional . functional ) . to . equal ( true )
945
+ expect ( module . components . Functional . staticRenderFns ) . to . exist
946
+ expect ( module . components . Functional . render ) . to . be . a ( 'function' )
947
+
948
+ const vnode = mockRender ( module , {
949
+ fn ( ) {
950
+ done ( )
951
+ }
952
+ } ) . children [ 0 ]
953
+
954
+ // Basic vnode
955
+ expect ( vnode . children [ 0 ] . data . staticClass ) . to . equal ( 'red' )
956
+ expect ( vnode . children [ 0 ] . children [ 0 ] . text ) . to . equal ( 'hello' )
957
+ // Default slot vnode
958
+ expect ( vnode . children [ 1 ] . tag ) . to . equal ( 'span' )
959
+ expect ( vnode . children [ 1 ] . children [ 0 ] . text ) . to . equal ( 'hello' )
960
+ // Named slot vnode
961
+ expect ( vnode . children [ 2 ] . tag ) . to . equal ( 'div' )
962
+ expect ( vnode . children [ 2 ] . children [ 0 ] . text ) . to . equal ( 'Second slot' )
963
+ // // Scoped slot vnode
964
+ expect ( vnode . children [ 3 ] . text ) . to . equal ( 'hello' )
965
+ // // Static content vnode
966
+ expect ( vnode . children [ 4 ] . tag ) . to . equal ( 'div' )
967
+ expect ( vnode . children [ 4 ] . children [ 0 ] . text ) . to . equal ( 'Some ' )
968
+ expect ( vnode . children [ 4 ] . children [ 1 ] . tag ) . to . equal ( 'span' )
969
+ expect ( vnode . children [ 4 ] . children [ 1 ] . children [ 0 ] . text ) . to . equal ( 'text' )
970
+ // // v-if vnode
971
+ expect ( vnode . children [ 5 ] . text ) . to . equal ( '' )
972
+
973
+ vnode . children [ 6 ] . data . on . click ( )
974
+ } )
975
+ } )
960
976
} )
0 commit comments