package org.apache.harmony.security.tests.java.security;

import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;

import junit.framework.TestCase;

import java.security.AccessController;
import java.security.PrivilegedAction;

@TestTargetClass(PrivilegedAction.class)
public class PrivilegedActionTest extends TestCase {

    protected void setUp() throws Exception {
        super.setUp();
    }

    private class MyPrivilegedAction implements PrivilegedAction<String> {

        private boolean called=false;
        public String run() {
            called = true;
            return "ok";
        }
    }

    private class MyPrivilegedAction2 implements PrivilegedAction<String> {

        private boolean called=false;
        public String run() {
            called = true;
            throw new RuntimeException("fail");
        }

    }

    @TestTargetNew(
            level=TestLevel.COMPLETE,
            method="run"
    )
    public void testRun() {
        MyPrivilegedAction action = new MyPrivilegedAction();
        String result = AccessController.doPrivileged(action);
        assertEquals("return value not correct", "ok", result);
        assertTrue("run method was not called", action.called);

        MyPrivilegedAction2 action2 = new MyPrivilegedAction2();


        try {
            result = AccessController.doPrivileged(action2);
            fail("exception expected");
        } catch (RuntimeException e) {
            // expected exception
        }
    }
}
