Files
2026-05-26 23:36:42 -07:00

102 lines
2.7 KiB
JavaScript

// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview Test normalization.
*/
'use strict';
const path = require('path');
const sinon = require('sinon');
const corpus = require('../corpus.js');
const helpers = require('./helpers.js');
const sourceHelpers = require('../source_helpers.js');
const { ScriptMutator } = require('../script_mutator.js');
const sandbox = sinon.createSandbox();
function testLoad(testPath, expectedPath, loadFun=helpers.loadTestData) {
const mutator = new ScriptMutator({}, helpers.DB_DIR);
const source = loadFun(testPath);
const dependencies = mutator.resolveInputDependencies([source]);
const code = sourceHelpers.generateCode(source, dependencies);
helpers.assertExpectedResult(expectedPath, code);
}
describe('V8 dependencies', () => {
it('test', () => {
testLoad(
'mjsunit/test_load.js',
'mjsunit/test_load_expected.js');
});
it('does not loop indefinitely', () => {
testLoad(
'mjsunit/test_load_self.js',
'mjsunit/test_load_self_expected.js');
});
it('loads mjsunit dependencies also from another corpus', () => {
const corpusDir = path.join(helpers.BASE_DIR, 'load' ,'fuzzilli_scenario');
const v8Corpus = corpus.create(corpusDir, 'v8');
const fuzzilliCorpus = corpus.create(
corpusDir, 'fuzzilli', false, v8Corpus);
const load = (relPath) => {
return sourceHelpers.loadSource(fuzzilliCorpus, relPath);
};
testLoad(
'fuzzilli/fuzzdir-1/corpus/program_x.js',
'load/fuzzilli_scenario/test_load_expected.js',
load);
});
});
describe('Chakra dependencies', () => {
it('test', () => {
testLoad(
'chakra/load.js',
'chakra/load_expected.js');
});
});
describe('JSTest dependencies', () => {
afterEach(() => {
sandbox.restore();
});
it('test', () => {
const fakeStubs = sourceHelpers.loadSource(
helpers.TEST_CORPUS, 'JSTests/fake_stub.js');
sandbox.stub(sourceHelpers, 'loadResource').callsFake(() => fakeStubs);
testLoad('JSTests/load.js', 'JSTests/load_expected.js');
});
});
describe('SpiderMonkey dependencies', () => {
it('test', () => {
testLoad(
'spidermonkey/test/load.js',
'spidermonkey/test/load_expected.js');
});
});
describe('Sandbox dependencies', () => {
it('test', () => {
testLoad(
'sandbox/load.js',
'sandbox/load_expected.js');
});
});
describe('Language features', () => {
it('test', () => {
testLoad(
'language/features.js',
'language/features_expected.js');
});
});