hexo-yam/test/filter.test.js

161 lines
4.4 KiB
JavaScript
Raw Normal View History

/* eslint-env jest */
'use strict'
const Hexo = require('hexo')
const hexo = new Hexo(__dirname)
global.hexo = hexo
describe('html', () => {
const { htmlDefault } = require('../index')
const h = require('../lib/filter').minifyHtml.bind(hexo)
const Htmlminifier = require('html-minifier').minify
beforeEach(() => {
hexo.config.minify.html = htmlDefault
})
test('default', () => {
const input = '<p id="">foo</p>'
const result = h(input, { path: '' })
const expected = Htmlminifier(input, hexo.config.minify.html)
expect(result).toBe(expected)
})
test('option', () => {
const customOpt = { removeEmptyAttributes: false }
hexo.config.minify.html = customOpt
const input = '<p id="">foo</p>'
const result = h(input, { path: '' })
const expected = Htmlminifier(input, customOpt)
expect(result).toBe(input)
expect(result).toBe(expected)
})
test('exclude', () => {
const exclude = '*.min.html'
hexo.config.minify.html.exclude = exclude
const input = '<p id="">foo</p>'
const result = h(input, { path: 'foo/bar.min.html' })
expect(result).toBe(input)
})
test('exclude - slash in pattern', () => {
const exclude = '**/bar.html'
hexo.config.minify.html.exclude = exclude
const input = '<p id="">foo</p>'
const result = h(input, { path: 'foo/bar.html' })
expect(result).toBe(input)
})
})
describe('css', () => {
const { cssDefault } = require('../index')
const c = require('../lib/filter').minifyCss.bind(hexo)
const CleanCSS = require('clean-css')
beforeEach(() => {
hexo.config.minify.css = cssDefault
})
test('default', async () => {
const input = 'foo { bar: baz; } foo { aaa: bbb; }'
const result = await c(input, { path: '' })
const { styles } = await new CleanCSS(hexo.config.minify.css).minify(input)
expect(result).toBe(styles)
})
test('option', async () => {
const customOpt = {
level: {
1: {
mergeAdjacentRules: false
}
}
}
hexo.config.minify.css = customOpt
const input = 'foo { bar: baz; } foo { aaa: bbb; }'
const result = await c(input, { path: '' })
const { styles } = await new CleanCSS(customOpt).minify(input)
expect(result).toBe(styles)
})
test('exclude - *.min.css', async () => {
const input = 'foo { bar: baz; } foo { aaa: bbb; }'
const result = await c(input, { path: 'foo/bar.min.css' })
expect(result).toBe(input)
})
test('exclude - basename', async () => {
const exclude = '*baz.css'
hexo.config.minify.css.exclude = exclude
const input = 'foo { bar: baz; } foo { aaa: bbb; }'
const result = await c(input, { path: 'foo/barbaz.css' })
expect(result).toBe(input)
})
test('exclude - slash in pattern', async () => {
const exclude = '**/bar.css'
hexo.config.minify.css.exclude = exclude
const input = 'foo { bar: baz; } foo { aaa: bbb; }'
const result = await c(input, { path: 'foo/bar.css' })
expect(result).toBe(input)
})
})
describe('js', () => {
const { jsDefault } = require('../index')
const j = require('../lib/filter').minifyJs.bind(hexo)
const Terser = require('terser')
beforeEach(() => {
hexo.config.minify.js = jsDefault
})
test('default', () => {
const input = 'var o = { "foo": 1, bar: 3 };'
const result = j(input, { path: '' })
const { code } = Terser.minify(input, { mangle: jsDefault.mangle })
expect(result).toBe(code)
})
test('option', () => {
const customOpt = {
mangle: {
properties: true
}
}
hexo.config.minify.js = customOpt
const input = 'var o = { "foo": 1, bar: 3 };'
const result = j(input, { path: '' })
const { code } = Terser.minify(input, customOpt)
expect(result).toBe(code)
})
test('exclude - *.min.js', () => {
const input = 'var o = { "foo": 1, bar: 3 };'
const result = j(input, { path: 'foo/bar.min.js' })
expect(result).toBe(input)
})
test('exclude - basename', () => {
const exclude = '*baz.js'
hexo.config.minify.js.exclude = exclude
const input = 'var o = { "foo": 1, bar: 3 };'
const result = j(input, { path: 'foo/barbaz.js' })
expect(result).toBe(input)
})
test('exclude - slash in pattern', () => {
const exclude = '**/bar.js'
hexo.config.minify.js.exclude = exclude
const input = 'var o = { "foo": 1, bar: 3 };'
const result = j(input, { path: 'foo/bar.js' })
expect(result).toBe(input)
})
})