--- old/test/compiler/compilercontrol/share/processors/CommandProcessor.java 2015-11-23 18:15:07.000000000 +0300 +++ new/test/compiler/compilercontrol/share/processors/CommandProcessor.java 2015-11-23 18:15:06.000000000 +0300 @@ -24,8 +24,10 @@ package compiler.compilercontrol.share.processors; import compiler.compilercontrol.share.scenario.CompileCommand; +import jdk.test.lib.Asserts; import jdk.test.lib.OutputAnalyzer; +import java.util.Iterator; import java.util.List; import java.util.function.Consumer; @@ -33,26 +35,56 @@ * Checks that output contains a string with commands and full method pattern */ public class CommandProcessor implements Consumer { - protected final List commands; + private static final String INVALID_COMMAND_MSG = "CompileCommand: " + + "\\b(unrecognized command|Bad pattern|" + + "An error occurred during parsing)\\b"; + private final Iterator nonQuietedIterator; + private final Iterator quietedIterator; - public CommandProcessor(List commands) { - this.commands = commands; + public CommandProcessor(List nonQuieted, + List quieted) { + this.nonQuietedIterator = nonQuieted.iterator(); + this.quietedIterator = quieted.iterator(); } @Override public void accept(OutputAnalyzer outputAnalyzer) { - for (CompileCommand command : commands) { + try { + outputAnalyzer.asLines().stream() + .filter(s -> s.startsWith("CompileCommand:")) + .forEachOrdered(this::check); + } catch (Exception e) { + System.err.println(outputAnalyzer.getOutput()); + throw e; + } + } + + private void check(String input) { + if (nonQuietedIterator.hasNext()) { + CompileCommand command = nonQuietedIterator.next(); + if (command.isValid()) { + Asserts.assertTrue(input.contains(getOutputString(command)), + getOutputString(command) + "missing in output"); + } else { + Asserts.assertTrue(input.matches(INVALID_COMMAND_MSG), + "Error message missing for: " + getOutputString( + command)); + } + } else if (quietedIterator.hasNext()) { + CompileCommand command = quietedIterator.next(); if (command.isValid()) { - outputAnalyzer.shouldContain("CompileCommand: " - + command.command.name + " " - + command.methodDescriptor.getCanonicalString()); - outputAnalyzer.shouldNotContain("CompileCommand: An error " - + "occurred during parsing"); + Asserts.assertFalse(input.contains(getOutputString(command))); } else { - outputAnalyzer.shouldMatch("(CompileCommand: )" - + "(unrecognized command)|(Bad pattern)|" - + "(An error occurred during parsing)"); + Asserts.assertTrue(input.matches(INVALID_COMMAND_MSG), + "Error message missing for: " + getOutputString( + command)); } } } + + private String getOutputString(CompileCommand command) { + return "CompileCommand: " + + command.command.name + " " + + command.methodDescriptor.getCanonicalString(); + } } --- old/test/compiler/compilercontrol/share/scenario/Scenario.java 2015-11-23 18:15:07.000000000 +0300 +++ new/test/compiler/compilercontrol/share/scenario/Scenario.java 2015-11-23 18:15:07.000000000 +0300 @@ -28,7 +28,6 @@ import compiler.compilercontrol.share.processors.LogProcessor; import compiler.compilercontrol.share.processors.PrintDirectivesProcessor; import compiler.compilercontrol.share.processors.PrintProcessor; -import compiler.compilercontrol.share.processors.QuietProcessor; import jdk.test.lib.Asserts; import jdk.test.lib.OutputAnalyzer; import jdk.test.lib.Pair; @@ -77,8 +76,7 @@ nonQuieted.add(cc); } } - processors.add(new CommandProcessor(nonQuieted)); - processors.add(new QuietProcessor(quieted)); + processors.add(new CommandProcessor(nonQuieted, quieted)); List jcmdExecCommands = new ArrayList<>(); boolean addCommandMet = false; boolean printCommandMet = false; @@ -273,9 +271,7 @@ ccList.addAll(builders.get(Type.OPTION).getCompileCommands()); ccList.addAll(builders.get(Type.FILE).getCompileCommands()); - /* - * Create a list of directives to check which one was printed - */ + // Create a list of directives to check which one was printed List directives = new ArrayList<>(); if (jcmdContainsCommand(JcmdType.PRINT)) { if (!isClearedState) { --- old/test/compiler/compilercontrol/share/processors/QuietProcessor.java 2015-11-23 18:15:08.000000000 +0300 +++ /dev/null 2015-11-23 18:15:08.000000000 +0300 @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package compiler.compilercontrol.share.processors; - -import compiler.compilercontrol.share.scenario.CompileCommand; -import jdk.test.lib.OutputAnalyzer; - -import java.util.List; -import java.util.function.Consumer; - -public class QuietProcessor implements Consumer { - private final List commands; - - public QuietProcessor(List compileCommands) { - commands = compileCommands; - } - - @Override - public void accept(OutputAnalyzer outputAnalyzer) { - for (CompileCommand command : commands) { - if (command.isValid()) { - outputAnalyzer.shouldNotContain("CompileCommand: " - + command.command.name + " " - + command.methodDescriptor.getCanonicalString()); - outputAnalyzer.shouldNotContain("CompileCommand: An error " - + "occurred during parsing"); - } else { - outputAnalyzer.shouldMatch("(CompileCommand: )" - + "(unrecognized command)|(Bad pattern)|" - + "(An error occurred during parsing)"); - } - } - } -}