@@ -105,6 +105,60 @@ test('extract CSS', done => {
105105 } )
106106} )
107107
108+ test ( 'support rules with oneOf' , async ( ) => {
109+ const run = ( entry , assert ) => new Promise ( ( resolve , reject ) => {
110+ mockBundleAndRun ( {
111+ entry,
112+ modify : config => {
113+ config . module . rules = [
114+ { test : / \. v u e $ / , loader : 'vue-loader' } ,
115+ {
116+ test : / \. c s s $ / ,
117+ use : 'vue-style-loader' ,
118+ oneOf : [
119+ {
120+ resourceQuery : / c s s M o d u l e s / ,
121+ use : [
122+ {
123+ loader : 'css-loader' ,
124+ options : {
125+ modules : true ,
126+ localIdentName : '[local]_[hash:base64:5]'
127+ }
128+ }
129+ ]
130+ } ,
131+ {
132+ use : [ 'css-loader' ]
133+ }
134+ ]
135+ }
136+ ]
137+ }
138+ } , res => {
139+ const { jsdomError, bundleError } = res
140+ if ( jsdomError ) return reject ( jsdomError )
141+ if ( bundleError ) return reject ( bundleError )
142+ assert ( res )
143+ resolve ( )
144+ } )
145+ } )
146+
147+ await run ( 'basic.vue' , ( { window } ) => {
148+ let style = window . document . querySelector ( 'style' ) . textContent
149+ style = normalizeNewline ( style )
150+ expect ( style ) . toContain ( 'comp-a h2 {\n color: #f00;\n}' )
151+ } )
152+
153+ await run ( 'css-modules-simple.vue' , ( { window, instance } ) => {
154+ const className = instance . $style . red
155+ expect ( className ) . toMatch ( / ^ r e d _ \w { 5 } / )
156+ let style = window . document . querySelector ( 'style' ) . textContent
157+ style = normalizeNewline ( style )
158+ expect ( style ) . toContain ( '.' + className + ' {\n color: red;\n}' )
159+ } )
160+ } )
161+
108162// TODO
109163// test('multiple rule definitions', done => {
110164// mockBundleAndRun({
0 commit comments