blob: 63656b0e39474ef48958077687a7a76a30ff7813 [file] [log] [blame]
/*
* Copyright (c) 2001, 2018, 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.
*/
/**
* @test
* @bug 4331522
* @summary addClassFilter("Foo") acts like "Foo*"
* @author Robert Field/Jim Holmlund
*
* @run build TestScaffold VMConnection
* @run compile -g HelloWorld.java
* @run driver FilterNoMatch
*/
/* This tests the patternMatch function in JDK file:
* .../src/share/back/eventHandler.c
*
* This test verifies that patterns that do not match really don't.
* See also testcase FilterMatch.java.
*/
import java.util.*;
import com.sun.jdi.*;
import com.sun.jdi.event.*;
import com.sun.jdi.request.*;
public class FilterNoMatch extends TestScaffold {
EventSet eventSet = null;
boolean stepCompleted = false;
public static void main(String args[]) throws Exception {
new FilterNoMatch(args).startTests();
}
public FilterNoMatch(String args[]) {
super(args);
}
protected void runTests() throws Exception {
/*
* Get to the top of HelloWorld main() to determine referenceType and mainThread
*/
BreakpointEvent bpe = startToMain("HelloWorld");
ReferenceType referenceType = (ClassType)bpe.location().declaringType();
mainThread = bpe.thread();
// VM has started, but hasn't started running the test program yet.
EventRequestManager requestManager = vm().eventRequestManager();
Location location = findLocation(referenceType, 3);
BreakpointRequest bpRequest = requestManager.createBreakpointRequest(location);
try {
addListener(this);
} catch (Exception ex){
ex.printStackTrace();
failure("failure: Could not add listener");
throw new Exception("FilterNoMatch: failed");
}
bpRequest.enable();
StepRequest stepRequest = requestManager.createStepRequest(mainThread,
StepRequest.STEP_LINE,StepRequest.STEP_OVER);
// We have to filter out all these so that they don't cause the
// listener to be called.
stepRequest.addClassExclusionFilter("java.*");
stepRequest.addClassExclusionFilter("javax.*");
stepRequest.addClassExclusionFilter("sun.*");
stepRequest.addClassExclusionFilter("com.sun.*");
stepRequest.addClassExclusionFilter("com.oracle.*");
stepRequest.addClassExclusionFilter("oracle.*");
stepRequest.addClassExclusionFilter("jdk.internal.*");
// We want our listener to be called if a pattern does not match.
// So, here we want patterns that do not match HelloWorld.
// If any pattern here erroneously matches, then our listener
// will not get called and the test will fail.
stepRequest.addClassExclusionFilter("H");
stepRequest.addClassExclusionFilter("HelloWorl");
stepRequest.addClassExclusionFilter("HelloWorldx");
stepRequest.addClassExclusionFilter("xHelloWorld");
stepRequest.addClassExclusionFilter("*elloWorldx");
stepRequest.addClassExclusionFilter("*elloWorl");
stepRequest.addClassExclusionFilter("*xHelloWorld");
stepRequest.addClassExclusionFilter("elloWorld*");
stepRequest.addClassExclusionFilter("HelloWorldx*");
stepRequest.addClassExclusionFilter("xHelloWorld*");
// As a test, uncomment this line and this test should fail.
//stepRequest.addClassExclusionFilter("*elloWorld");
stepRequest.enable();
vm().resume();
waitForVMDisconnect();
if (!stepCompleted) {
throw new Exception( "Failed: .");
}
System.out.println( "Passed: ");
}
// **************** event handlers **************
public void eventSetReceived(EventSet set) {
this.eventSet = set;
}
// This gets called if no patterns match. If any
// pattern is erroneously matched, then this method
// will not get called.
public void stepCompleted(StepEvent event) {
stepCompleted = true;
System.out.println("StepEvent at" + event.location());
// disable the step and then run to completion
StepRequest str = (StepRequest)event.request();
str.disable();
eventSet.resume();
}
public void breakpointReached(BreakpointEvent event) {
System.out.println("BreakpointEvent at" + event.location());
BreakpointRequest bpr = (BreakpointRequest)event.request();
// The bkpt was hit; disable it.
bpr.disable();
}
}