Skip to content

Commit 078fa1c

Browse files
committed
test: add test case for multiple rule uses (ref #1131)
1 parent 905b813 commit 078fa1c

File tree

4 files changed

+91
-0
lines changed

4 files changed

+91
-0
lines changed

test/fixtures/multiple-rules-1.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<template>
2+
<div class="multiple-rule">Hello World</div>
3+
</template>
4+
5+
<style>
6+
.multiple-rule-1 {
7+
font-size: 7px;
8+
}
9+
</style>

test/fixtures/multiple-rules-2.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<template>
2+
<div class="multiple-rule">Hello World</div>
3+
</template>
4+
5+
<style>
6+
.multiple-rule-2 {
7+
font-size: 28px;
8+
}
9+
</style>

test/fixtures/multiple-rules.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import Rule1 from './multiple-rules-1.vue'
2+
import Rule2 from './multiple-rules-2.vue'
3+
4+
window.rules = [Rule1, Rule2]

test/test.js

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,4 +1035,73 @@ describe('vue-loader', () => {
10351035
done()
10361036
})
10371037
})
1038+
1039+
it('multiple rule definitions', done => {
1040+
test({
1041+
modify: config => {
1042+
// remove default rule
1043+
config.module.rules.shift()
1044+
},
1045+
entry: './test/fixtures/multiple-rules.js',
1046+
module: {
1047+
rules: [
1048+
{
1049+
test: /\.vue$/,
1050+
oneOf: [
1051+
{
1052+
include: /-1\.vue$/,
1053+
loader: loaderPath,
1054+
options: {
1055+
postcss: [
1056+
css => {
1057+
css.walkDecls('font-size', decl => {
1058+
decl.value = `${parseInt(decl.value, 10) * 2}px`
1059+
})
1060+
}
1061+
],
1062+
compilerModules: [{
1063+
postTransformNode: el => {
1064+
el.staticClass = '"multiple-rule-1"'
1065+
}
1066+
}]
1067+
}
1068+
},
1069+
{
1070+
include: /-2\.vue$/,
1071+
loader: loaderPath,
1072+
options: {
1073+
postcss: [
1074+
css => {
1075+
css.walkDecls('font-size', decl => {
1076+
decl.value = `${parseInt(decl.value, 10) / 2}px`
1077+
})
1078+
}
1079+
],
1080+
compilerModules: [{
1081+
postTransformNode: el => {
1082+
el.staticClass = '"multiple-rule-2"'
1083+
}
1084+
}]
1085+
}
1086+
}
1087+
]
1088+
}
1089+
]
1090+
}
1091+
}, (window, module) => {
1092+
const vnode1 = mockRender(window.rules[0])
1093+
const vnode2 = mockRender(window.rules[1])
1094+
expect(vnode1.data.staticClass).to.equal('multiple-rule-1')
1095+
expect(vnode2.data.staticClass).to.equal('multiple-rule-2')
1096+
const styles = window.document.querySelectorAll('style')
1097+
const expr = /\.multiple-rule-\d\s*\{\s*font-size:\s*([.0-9]+)px;/
1098+
for (let i = 0, l = styles.length; i < l; i++) {
1099+
const content = styles[i].textContent
1100+
if (expr.test(content)) {
1101+
expect(parseFloat(RegExp.$1)).to.be.equal(14)
1102+
}
1103+
}
1104+
done()
1105+
})
1106+
})
10381107
})

0 commit comments

Comments
 (0)