@@ -8,6 +8,7 @@ var MemoryFS = require('memory-fs')
88var expect = require ( 'chai' ) . expect
99var hash = require ( 'hash-sum' )
1010var SSR = require ( 'vue-server-renderer' )
11+ var Vue = require ( 'vue/dist/vue.runtime.js' )
1112// var compiler = require('../lib/template-compiler')
1213var normalizeNewline = require ( 'normalize-newline' )
1314var ExtractTextPlugin = require ( 'extract-text-webpack-plugin' )
@@ -86,38 +87,10 @@ function test (options, assert) {
8687 } )
8788}
8889
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
12194}
12295
12396function interopDefault ( module ) {
@@ -134,10 +107,11 @@ describe('vue-loader', function () {
134107 var vnode = mockRender ( module , {
135108 msg : 'hi'
136109 } )
110+
137111 // <h2 class="red">{{msg}}</h2>
138112 expect ( vnode . tag ) . to . equal ( 'h2' )
139113 expect ( vnode . data . staticClass ) . to . equal ( 'red' )
140- expect ( vnode . children [ 0 ] ) . to . equal ( 'hi' )
114+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'hi' )
141115
142116 expect ( module . data ( ) . msg ) . to . contain ( 'Hello from Component A!' )
143117 var style = window . document . querySelector ( 'style' ) . textContent
@@ -222,11 +196,11 @@ describe('vue-loader', function () {
222196 // <svg><template><p></p></template></svg>
223197 // </div>
224198 expect ( vnode . children [ 0 ] . tag ) . to . equal ( 'div' )
225- expect ( vnode . children [ 1 ] ) . to . equal ( ' ' )
199+ expect ( vnode . children [ 1 ] . text ) . to . equal ( ' ' )
226200 expect ( vnode . children [ 2 ] . tag ) . to . equal ( 'p' )
227201 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' )
230204
231205 var style = window . document . querySelector ( 'style' ) . textContent
232206 style = normalizeNewline ( style )
@@ -264,7 +238,7 @@ describe('vue-loader', function () {
264238 var vnode = mockRender ( module )
265239 // '<div><h1>hello</h1></div>'
266240 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' )
268242 done ( )
269243 } )
270244 } )
@@ -401,7 +375,7 @@ describe('vue-loader', function () {
401375 // <div class="msg">{{ msg }}</div>
402376 expect ( vnode . tag ) . to . equal ( 'div' )
403377 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!' )
405379 done ( )
406380 } )
407381 } )
@@ -522,7 +496,7 @@ describe('vue-loader', function () {
522496 msg : 'success'
523497 } )
524498 expect ( vnode . tag ) . to . equal ( 'div' )
525- expect ( vnode . children [ 0 ] ) . to . equal ( 'success' )
499+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'success' )
526500 expect ( new Module ( ) . msg === 'success' )
527501 done ( )
528502 } )
@@ -541,7 +515,7 @@ describe('vue-loader', function () {
541515 } )
542516 expect ( vnode . tag ) . to . equal ( 'h2' )
543517 expect ( vnode . data . staticClass ) . to . equal ( 'red' )
544- expect ( vnode . children [ 0 ] ) . to . equal ( 'hi' )
518+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'hi' )
545519
546520 expect ( rawModule . default . data ( ) . msg ) . to . contain ( 'Hello from Component A!' )
547521 done ( )
@@ -635,7 +609,7 @@ describe('vue-loader', function () {
635609 // <h2 id="-msg-">{{msg}}</h2>
636610 expect ( vnode . tag ) . to . equal ( 'h2' )
637611 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' )
639613 done ( )
640614 } )
641615 } )
@@ -816,7 +790,7 @@ describe('vue-loader', function () {
816790 // <h2 class="green">{{msg}}</h2>
817791 expect ( vnode . tag ) . to . equal ( 'h2' )
818792 expect ( vnode . data . staticClass ) . to . equal ( 'green' )
819- expect ( vnode . children [ 0 ] ) . to . equal ( 'hi' )
793+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'hi' )
820794
821795 expect ( module . data ( ) . msg ) . to . contain ( 'Changed!' )
822796 var style = window . document . querySelector ( 'style' ) . textContent
@@ -846,7 +820,7 @@ describe('vue-loader', function () {
846820 msg : JSON . parse ( module . __i18n ) . en . hello ,
847821 blog : module . __blog
848822 } )
849- expect ( vnode . children [ 0 ] . children [ 0 ] ) . to . equal ( 'hello world' )
823+ expect ( vnode . children [ 0 ] . children [ 0 ] . text ) . to . equal ( 'hello world' )
850824 expect ( vnode . children [ 2 ] . data . domProps . innerHTML ) . to . equal ( '<h2 id="foo">foo</h2>' )
851825 done ( )
852826 } )
@@ -872,10 +846,10 @@ describe('vue-loader', function () {
872846 } , ( window , module ) => {
873847 var results = [ ]
874848 // 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+ )
879853 expect ( results ) . to . deep . equal ( [
880854 { 'flex-direction' : 'row' } ,
881855 { 'transform' : 'translateX(10px)' }
@@ -931,7 +905,7 @@ describe('vue-loader', function () {
931905 // <div class="foo">hi</div>
932906 expect ( vnode . tag ) . to . equal ( 'div' )
933907 expect ( vnode . data . class ) . to . equal ( 'foo' )
934- expect ( vnode . children [ 0 ] ) . to . equal ( 'functional' )
908+ expect ( vnode . children [ 0 ] . text ) . to . equal ( 'functional' )
935909
936910 var style = window . document . querySelector ( 'style' ) . textContent
937911 style = normalizeNewline ( style )
@@ -951,10 +925,52 @@ describe('vue-loader', function () {
951925 expect ( vnode . tag ) . to . equal ( 'div' )
952926 expect ( vnode . children . length ) . to . equal ( 2 )
953927 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' )
955929 expect ( vnode . children [ 1 ] . isComment ) . to . true
956930 expect ( vnode . children [ 1 ] . text ) . to . equal ( ' comment here ' )
957931 done ( )
958932 } )
959933 } )
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+ } )
960976} )
0 commit comments