@@ -105,6 +105,60 @@ test('extract CSS', done => {
105
105
} )
106
106
} )
107
107
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
+
108
162
// TODO
109
163
// test('multiple rule definitions', done => {
110
164
// mockBundleAndRun({
0 commit comments