19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
170dc59e78e18493aecd37427531d093e800846c3eBrett Chabotpackage android.core;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.Suppress;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@Suppress
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class JniLibTest extends TestCase {
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setUp() throws Exception {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /*
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * This causes the native shared library to be loaded when the
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * class is first used.  The library is only loaded once, even if
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * multiple classes include this line.
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The library must be in java.library.path, which is derived from
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * LD_LIBRARY_PATH.  The actual library name searched for will be
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * "libjni_lib_test.so" under Linux, but may be different on other
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * platforms.
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            System.loadLibrary("jni_lib_test");
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (UnsatisfiedLinkError ule) {
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.e("JniLibTest", "WARNING: Could not load jni_lib_test natives");
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static native int nativeStaticThing(float f);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private native void nativeThing(int val);
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testNativeCall() {
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.i("JniLibTest", "JNI search path is "
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + System.getProperty("java.library.path"));
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.i("JniLibTest", "'jni_lib_test' becomes '"
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + System.mapLibraryName("jni_lib_test") + "'");
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int result = nativeStaticThing(1234.5f);
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        nativeThing(result);
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
60