blob: 11e9b52f5b6f7b01acfbc7c087631c9432d42a33 [file] [log] [blame]
/*
* Copyright (c) 2004, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
import java.io.IOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.channels.FileChannel;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import java.util.regex.Matcher;
public class ResultsProducer {
private static Charset charset = Charset.forName("ISO-8859-15");
private static CharsetDecoder decoder = charset.newDecoder();
private static Pattern linePattern = Pattern.compile(".*\r?\n");
private static Pattern pattern;
public static void main(String[] args) {
try {
if (args.length < 1) {
System.err.println("Usage: java ResultProducer file");
return;
}
FileOutputStream outputStream = new FileOutputStream(args[2]);
FileChannel channel = outputStream.getChannel();
CharBuffer buffer = CharBuffer.allocate(8192);
buffer.put("\n************************\n");
CharBuffer charBuffer = loadFile(new File(args[0]));
StringTokenizer tokens = new StringTokenizer("pass,fail",",");
String token;
int count = 0;
int pass = 0;
int fail = 0;
while( tokens.hasMoreElements() ){
token = tokens.nextToken();
compile(token);
count = countOccurance(charBuffer);
buffer.put(token.toUpperCase() + "ED= " + count + "\n");
buffer.put("------------ =========\n");
if (token.equals("pass")){
pass = count;
} else {
fail = count;
}
}
buffer.put("DID NOT RUN= "
+ (new Integer(args[1]).intValue() - (pass + fail))+ "\n");
buffer.put("------------ =========\n");
buffer.put("Total Expected=" + args[1]);
buffer.put("\n************************\n");
buffer.flip();
System.out.println(buffer.toString());
channel.write(ByteBuffer.wrap(buffer.toString().getBytes()));
if( pass != (new Integer(args[1]).intValue()) )
{
System.err.println("All Tests NOT passed, so returning UNSUCCESS status.");
System.exit(1);
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
private static void compile(String pat) {
try {
pattern = Pattern.compile(pat);
} catch (PatternSyntaxException x) {
System.err.println(x.getMessage());
System.exit(1);
}
}
private static int countOccurance(CharBuffer cb) {
Matcher lm = linePattern.matcher(cb);
Matcher pm = null;
int count = 0;
while (lm.find()) {
CharSequence cs = lm.group();
if (pm == null)
pm = pattern.matcher(cs);
else
pm.reset(cs);
if (pm.find()){
count++;
}
if (lm.end() == cb.limit())
break;
}
return count;
}
private static CharBuffer loadFile(File f) throws IOException {
FileInputStream fis = new FileInputStream(f);
FileChannel fc = fis.getChannel();
int sz = (int)fc.size();
MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);
CharBuffer cb = decoder.decode(bb);
fc.close();
return cb;
}
}