You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							83 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							83 lines
						
					
					
						
							3.2 KiB
						
					
					
				| /* eslint-disable import/no-dynamic-require, global-require */
 | |
| import fs from 'fs';
 | |
| import path from 'path';
 | |
| import webpack from 'webpack';
 | |
| import ExtractTextPlugin from 'extract-text-webpack-plugin';
 | |
| import OptimizeCssAssetsPlugin from '../src/';
 | |
| import { readFileOrEmpty, defaultConfig, checkForWebpackErrors } from './util/helpers';
 | |
| 
 | |
| const cases = process.env.CASES ? process.env.CASES.split(',') : fs.readdirSync(path.join(__dirname, 'cases'));
 | |
| 
 | |
| describe('Webpack Integration Tests', () => {
 | |
|   cases.forEach((testCase) => {
 | |
|     if (/^_skip_/.test(testCase)) return;
 | |
|     it(testCase, (done) => {
 | |
|       const testDirectory = path.join(__dirname, 'cases', testCase);
 | |
|       const outputDirectory = path.join(__dirname, 'js', testCase);
 | |
|       const expectedDirectory = path.join(testDirectory, 'expected');
 | |
| 
 | |
|       const configFile = path.join(testDirectory, 'webpack.config.js');
 | |
|       const config = Object.assign(
 | |
|         fs.existsSync(configFile) ? require(configFile) : { entry: { test: './index.js' } },
 | |
|         {
 | |
|           context: testDirectory,
 | |
|           output: {
 | |
|             filename: '[name].js',
 | |
|             path: outputDirectory
 | |
|           }
 | |
|         }
 | |
|       );
 | |
| 
 | |
|       webpack(config, (err, stats) => {
 | |
|         checkForWebpackErrors({ err, stats, done });
 | |
|         fs.readdirSync(expectedDirectory).forEach((file) => {
 | |
|           const expectedFile = readFileOrEmpty(path.join(expectedDirectory, file));
 | |
|           const actualFile = readFileOrEmpty(path.join(outputDirectory, file));
 | |
|           expect(actualFile).toEqual(expectedFile);
 | |
|           expect(actualFile).toMatchSnapshot();
 | |
|         });
 | |
|         done();
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   it('calls cssProcessor with correct arguments', (done) => {
 | |
|     const destination = 'destination.css';
 | |
|     const expectedCss = readFileOrEmpty(__dirname + '/util/default.css');
 | |
|     const cssProcessorOptions = { discardComments: { removeAll: true } };
 | |
|     const cssProcessor = {
 | |
|       process: (actualCss, options) => {
 | |
|         expect(options).toEqual(expect.objectContaining(cssProcessorOptions));
 | |
|         expect(actualCss).toEqual(expectedCss);
 | |
|         return Promise.resolve({ css: actualCss });
 | |
|       }
 | |
|     };
 | |
|     const plugin = new OptimizeCssAssetsPlugin({ cssProcessor, cssProcessorOptions });
 | |
|     const config = Object.assign(defaultConfig, {plugins: [plugin, new ExtractTextPlugin(destination)]});
 | |
| 
 | |
|     webpack(config, (err, stats) => {
 | |
|       checkForWebpackErrors({ err, stats, done });
 | |
|       done();
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   it('writes processed css to destination', (done) => {
 | |
|     const destination = 'destination.css';
 | |
|     const expectedCss = '.inifinity-pool{overflow:hidden;}';
 | |
|     const fakeCssProcessor = {
 | |
|       process: jest.fn().mockReturnValue(Promise.resolve({ css: expectedCss }))
 | |
|     };
 | |
|     const plugin = new OptimizeCssAssetsPlugin({ cssProcessor: fakeCssProcessor });
 | |
|     const config = Object.assign(defaultConfig, {plugins: [plugin, new ExtractTextPlugin(destination)]});
 | |
| 
 | |
|     webpack(config, (err, stats) => {
 | |
|       checkForWebpackErrors({ err, stats, done });
 | |
|       const actualCss = readFileOrEmpty(__dirname + '/js/default-exports/destination.css');
 | |
| 
 | |
|       expect(fakeCssProcessor.process).toHaveBeenCalled();
 | |
|       expect(actualCss).toEqual(expectedCss);
 | |
|       done();
 | |
|     });
 | |
|   });
 | |
| });
 |