text: "use strict";
  
  /* globals describe it */
  const path = require("path");
  const fs = require("fs");
  const webpack = require("..");
  
  describe("Examples", () => {
  	const basePath = path.join(__dirname, "..", "examples");
  	const examples = require("../examples/examples.js");
  
  	examples.forEach(examplePath => {
  		const filterPath = path.join(examplePath, "test.filter.js");
  		const relativePath = path.relative(basePath, examplePath);
  		if (fs.existsSync(filterPath) && !require(filterPath)()) {
  			describe.skip(relativePath, () => it("filtered"));
  			return;
  		}
  		it(
  			"should compile " + relativePath,
  			function(done) {
  				let options = {};
  				let webpackConfigPath = path.join(examplePath, "webpack.config.js");
  				webpackConfigPath =
  					webpackConfigPath.substr(0, 1).toUpperCase() +
  					webpackConfigPath.substr(1);
  				if (fs.existsSync(webpackConfigPath))
  					options = require(webpackConfigPath);
  				if (typeof options === "function") options = options();
  				if (Array.isArray(options)) options.forEach(processOptions);
  				else processOptions(options);
  
  				function processOptions(options) {
  					options.context = examplePath;
  					options.output = options.output || {};
  					options.output.pathinfo = true;
  					options.output.path = path.join(examplePath, "dist");
  					options.output.publicPath = "dist/";
  					if (!options.entry) options.entry = "./example.js";
  					if (!options.plugins) options.plugins = [];
  					// To support deprecated loaders
  					// TODO remove in webpack 5
  					options.plugins.push(
  						new webpack.LoaderOptionsPlugin({
  							options: {}
  						})
  					);
  				}
  				webpack(options, (err, stats) => {
  					if (err) return done(err);
  					stats = stats.toJson({
  						errorDetails: true
  					});
  					if (stats.errors.length > 0) {
  						return done(new Error(stats.errors[0]));
  					}
  					done();
  				});
  			},
  			45000
  		);
  	});
  });
  