This repository has been archived on 2023-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
ima02/resources/defects4j-checkout-closure-1f/test/com/google/javascript/jscomp/regtests/CompileEachLineOfProgramOutput.java

112 lines
3.5 KiB
Java
Raw Permalink Normal View History

2023-04-25 11:33:41 +00:00
/*
* Copyright 2009 Peter Burns
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.javascript.jscomp.regtests;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import com.google.javascript.jscomp.CompilationLevel;
import com.google.javascript.jscomp.Compiler;
import com.google.javascript.jscomp.CompilerOptions;
import com.google.javascript.jscomp.SourceFile;
import com.google.javascript.jscomp.Result;
import com.google.javascript.jscomp.WarningLevel;
public class CompileEachLineOfProgramOutput {
private static final SourceFile extern =
SourceFile.fromCode("externs.js", "");
private static final CompilerOptions options =
new CompilerOptions();
static {
CompilationLevel.SIMPLE_OPTIMIZATIONS.setOptionsForCompilationLevel(
options);
WarningLevel.QUIET.setOptionsForWarningLevel(options);
Compiler.setLoggingLevel(Level.OFF);
}
public static void main(String[] args) throws IOException {
if (args.length == 0){
usage();
}
Runtime r = Runtime.getRuntime();
Process p = null;
try {
p = r.exec(args);
} catch (IOException e) {
if (args[0].equals("generatejs")) {
// assuming that the command wasn't found
System.out.println("generatejs not found, required for generating " +
"fuzz test cases");
System.out.println("See: http://github.com/rictic/generatejs");
System.exit(2);
} else {
throw e;
}
}
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
int programsCompiled = 0, compilerErrors = 0;
for (String program = br.readLine(); program != null; program =
br.readLine()) {
try {
compile(program, programsCompiled);
} catch(Exception e) {
System.out.println("Compiler error on program #" +
programsCompiled + ":");
System.out.println(program);
System.out.println("Details:");
e.printStackTrace(System.out);
System.out.println("\n\n\n");
compilerErrors++;
}
programsCompiled++;
}
if (compilerErrors == 0){
System.out.println(programsCompiled +
" programs compiled without error");
System.exit(0);
} else {
System.out.println("==========FAILURE===========");
System.out.println(compilerErrors +
" programs caused an error within the compiler out of " +
programsCompiled + " tested.");
System.exit(1);
}
}
public static Result compile(String program, int num) {
SourceFile input = SourceFile.fromCode(""+num, program);
Compiler compiler = new Compiler();
Result result = compiler.compile(extern, input, options);
return result;
}
private static void usage() {
System.out.println(
"Usage: pass in a program to execute (with arguments)");
System.out.println(
"The program is expected to produce JS programs to stdout, " +
"one per line");
}
}