Initial import
[jpf-core.git] / src / tests / gov / nasa / jpf / test / mc / threads / JPF_gov_nasa_jpf_test_mc_threads_ExceptionalThreadChoiceTest.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18
19 package gov.nasa.jpf.test.mc.threads;
20
21 import gov.nasa.jpf.JPFException;
22 import gov.nasa.jpf.annotation.MJI;
23 import gov.nasa.jpf.vm.MJIEnv;
24 import gov.nasa.jpf.vm.NativePeer;
25 import gov.nasa.jpf.vm.ThreadInfo;
26 import gov.nasa.jpf.vm.VM;
27 import gov.nasa.jpf.vm.choice.ExceptionThreadChoiceFromSet;
28
29 /**
30  *
31  */
32 public class JPF_gov_nasa_jpf_test_mc_threads_ExceptionalThreadChoiceTest extends NativePeer {
33
34   @MJI
35   public void foo____V (MJIEnv env, int objRef){
36     
37     ThreadInfo ti = env.getThreadInfo();
38     if (!ti.isFirstStepInsn()){
39       String[] exceptions = { "java.net.SocketTimeoutException", "java.io.IOException" };
40       
41       System.out.println("    in top half of native foo()");
42       VM vm = ti.getVM();
43       ThreadInfo[] runnables = vm.getThreadList().getAllMatching(vm.getTimedoutRunnablePredicate());
44       ExceptionThreadChoiceFromSet cg = new ExceptionThreadChoiceFromSet("FOO_CG", runnables, ti, exceptions);
45       
46       ti.getVM().getSystemState().setNextChoiceGenerator(cg);
47       env.repeatInvocation();
48       
49     } else {
50       System.out.println("    in bottom half of native foo()");
51       
52       ExceptionThreadChoiceFromSet cg = ti.getVM().getCurrentChoiceGenerator("FOO_CG", ExceptionThreadChoiceFromSet.class);
53       if (cg == null){
54         throw new JPFException("wrong CG: " + cg);
55       }
56         
57       String exceptionName = cg.getExceptionForCurrentChoice();
58       if (exceptionName != null){
59         env.throwException(exceptionName);
60       }
61     }
62   }
63 }