/* * JCarder -- cards Java programs to keep threads disentangled * * Copyright (C) 2006-2007 Enea AB * Copyright (C) 2007 Ulrik Svensson * Copyright (C) 2007 Joel Rosdahl * * This program is made available under the GNU GPL version 2, with a special * exception for linking with JUnit. See the accompanying file LICENSE.txt for * details. * * This program 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. */ package com.enea.jcarder.testclasses.instrumentation; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import com.enea.jcarder.agent.instrument.MonitorWithContext; public final class SynchronizedStaticMethodWithMultipleIntReturns implements SynchronizationTestIfc { public void go() { assertFalse(Thread.holdsLock(this)); assertEquals(-1, help(-5)); assertFalse(Thread.holdsLock(this)); assertFalse(Thread.holdsLock(this)); assertEquals(1, help(5)); assertFalse(Thread.holdsLock(this)); } public static synchronized int help(int foo) { Class clazz = SynchronizedStaticMethodWithMultipleIntReturns.class; assertTrue(Thread.holdsLock(clazz)); if (foo < 0) { return -1; } else { return 1; } } public MonitorWithContext[] getExpectedMonitorEnterings() { return new MonitorWithContext[] { new MonitorWithContext(getClass(), getClass().getName() + ".help()", "class", Thread.currentThread()), new MonitorWithContext(getClass(), getClass().getName() + ".help()", "class", Thread.currentThread()) }; } }