Index: trunk/src/base/android/jni_generator/jni_generator_tests.py |
=================================================================== |
--- trunk/src/base/android/jni_generator/jni_generator_tests.py (revision 237955) |
+++ trunk/src/base/android/jni_generator/jni_generator_tests.py (working copy) |
@@ -12,7 +12,6 @@ |
""" |
import difflib |
-import inspect |
import os |
import sys |
import unittest |
@@ -65,29 +64,8 @@ |
print '=' * 80 |
print generated_text |
print '=' * 80 |
- print 'Run with:' |
- print 'REBASELINE=1', sys.argv[0] |
- print 'to regenerate the data files.' |
- self.fail('Golden text mismatch.') |
+ self.fail('Golden text mismatch') |
- def _ReadGoldenFile(self, golden_file): |
- if not os.path.exists(golden_file): |
- return None |
- with file(golden_file, 'r') as f: |
- return f.read() |
- |
- def assertGoldenTextEquals(self, generated_text): |
- script_dir = os.path.dirname(sys.argv[0]) |
- caller = inspect.stack()[1][3] |
- golden_file = os.path.join(script_dir, caller + '.golden') |
- golden_text = self._ReadGoldenFile(golden_file) |
- if os.environ.get('REBASELINE'): |
- if golden_text != generated_text: |
- with file(golden_file, 'w') as f: |
- f.write(generated_text) |
- return |
- self.assertTextEquals(golden_text, generated_text) |
- |
def testNatives(self): |
test_data = """" |
interface OnFrameAvailableListener {} |
@@ -241,8 +219,226 @@ |
self.assertListEquals(golden_natives, natives) |
h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', |
natives, [], TestOptions()) |
- self.assertGoldenTextEquals(h.GetContent()) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator.py |
+// For |
+// org/chromium/TestJni |
+ |
+#ifndef org_chromium_TestJni_JNI |
+#define org_chromium_TestJni_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kTestJniClassPath[] = "org/chromium/TestJni"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_TestJni_clazz = NULL; |
+} // namespace |
+ |
+static jint Init(JNIEnv* env, jobject obj); |
+ |
+static jstring GetDomainAndRegistry(JNIEnv* env, jclass clazz, |
+ jstring url); |
+ |
+static void CreateHistoricalTabFromState(JNIEnv* env, jclass clazz, |
+ jbyteArray state, |
+ jint tab_index); |
+ |
+static jbyteArray GetStateAsByteArray(JNIEnv* env, jobject obj, |
+ jobject view); |
+ |
+static jobjectArray GetAutofillProfileGUIDs(JNIEnv* env, jclass clazz); |
+ |
+static void SetRecognitionResults(JNIEnv* env, jobject obj, |
+ jint sessionId, |
+ jobjectArray results); |
+ |
+static jint FindAll(JNIEnv* env, jobject obj, |
+ jstring find); |
+ |
+static jobject GetInnerClass(JNIEnv* env, jclass clazz); |
+ |
+// Step 2: method stubs. |
+static void Destroy(JNIEnv* env, jobject obj, |
+ jint nativeChromeBrowserProvider) { |
+ DCHECK(nativeChromeBrowserProvider) << "Destroy"; |
+ ChromeBrowserProvider* native = |
+ reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); |
+ return native->Destroy(env, obj); |
+} |
+ |
+static jlong AddBookmark(JNIEnv* env, jobject obj, |
+ jint nativeChromeBrowserProvider, |
+ jstring url, |
+ jstring title, |
+ jboolean isFolder, |
+ jlong parentId) { |
+ DCHECK(nativeChromeBrowserProvider) << "AddBookmark"; |
+ ChromeBrowserProvider* native = |
+ reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); |
+ return native->AddBookmark(env, obj, url, title, isFolder, parentId); |
+} |
+ |
+static jlong AddBookmarkFromAPI(JNIEnv* env, jobject obj, |
+ jint nativeChromeBrowserProvider, |
+ jstring url, |
+ jobject created, |
+ jobject isBookmark, |
+ jobject date, |
+ jbyteArray favicon, |
+ jstring title, |
+ jobject visits) { |
+ DCHECK(nativeChromeBrowserProvider) << "AddBookmarkFromAPI"; |
+ ChromeBrowserProvider* native = |
+ reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); |
+ return native->AddBookmarkFromAPI(env, obj, url, created, isBookmark, date, |
+ favicon, title, visits); |
+} |
+ |
+static jobject QueryBitmap(JNIEnv* env, jobject obj, |
+ jint nativeChromeBrowserProvider, |
+ jobjectArray projection, |
+ jstring selection, |
+ jobjectArray selectionArgs, |
+ jstring sortOrder) { |
+ DCHECK(nativeChromeBrowserProvider) << "QueryBitmap"; |
+ ChromeBrowserProvider* native = |
+ reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); |
+ return native->QueryBitmap(env, obj, projection, selection, selectionArgs, |
+ sortOrder).Release(); |
+} |
+ |
+static void GotOrientation(JNIEnv* env, jobject obj, |
+ jint nativeDataFetcherImplAndroid, |
+ jdouble alpha, |
+ jdouble beta, |
+ jdouble gamma) { |
+ DCHECK(nativeDataFetcherImplAndroid) << "GotOrientation"; |
+ DataFetcherImplAndroid* native = |
+ reinterpret_cast<DataFetcherImplAndroid*>(nativeDataFetcherImplAndroid); |
+ return native->GotOrientation(env, obj, alpha, beta, gamma); |
+} |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kTestJniClassPath).obj())); |
+ static const JNINativeMethod kMethodsTestJni[] = { |
+ { "nativeInit", |
+"(" |
+")" |
+"I", reinterpret_cast<void*>(Init) }, |
+ { "nativeDestroy", |
+"(" |
+"I" |
+")" |
+"V", reinterpret_cast<void*>(Destroy) }, |
+ { "nativeAddBookmark", |
+"(" |
+"I" |
+"Ljava/lang/String;" |
+"Ljava/lang/String;" |
+"Z" |
+"J" |
+")" |
+"J", reinterpret_cast<void*>(AddBookmark) }, |
+ { "nativeGetDomainAndRegistry", |
+"(" |
+"Ljava/lang/String;" |
+")" |
+"Ljava/lang/String;", reinterpret_cast<void*>(GetDomainAndRegistry) }, |
+ { "nativeCreateHistoricalTabFromState", |
+"(" |
+"[B" |
+"I" |
+")" |
+"V", reinterpret_cast<void*>(CreateHistoricalTabFromState) }, |
+ { "nativeGetStateAsByteArray", |
+"(" |
+"Landroid/view/View;" |
+")" |
+"[B", reinterpret_cast<void*>(GetStateAsByteArray) }, |
+ { "nativeGetAutofillProfileGUIDs", |
+"(" |
+")" |
+"[Ljava/lang/String;", reinterpret_cast<void*>(GetAutofillProfileGUIDs) }, |
+ { "nativeSetRecognitionResults", |
+"(" |
+"I" |
+"[Ljava/lang/String;" |
+")" |
+"V", reinterpret_cast<void*>(SetRecognitionResults) }, |
+ { "nativeAddBookmarkFromAPI", |
+"(" |
+"I" |
+"Ljava/lang/String;" |
+"Ljava/lang/Long;" |
+"Ljava/lang/Boolean;" |
+"Ljava/lang/Long;" |
+"[B" |
+"Ljava/lang/String;" |
+"Ljava/lang/Integer;" |
+")" |
+"J", reinterpret_cast<void*>(AddBookmarkFromAPI) }, |
+ { "nativeFindAll", |
+"(" |
+"Ljava/lang/String;" |
+")" |
+"I", reinterpret_cast<void*>(FindAll) }, |
+ { "nativeGetInnerClass", |
+"(" |
+")" |
+"Lorg/chromium/example/jni_generator/SampleForTests$OnFrameAvailableListener;", |
+ reinterpret_cast<void*>(GetInnerClass) }, |
+ { "nativeQueryBitmap", |
+"(" |
+"I" |
+"[Ljava/lang/String;" |
+"Ljava/lang/String;" |
+"[Ljava/lang/String;" |
+"Ljava/lang/String;" |
+")" |
+"Landroid/graphics/Bitmap;", reinterpret_cast<void*>(QueryBitmap) }, |
+ { "nativeGotOrientation", |
+"(" |
+"I" |
+"D" |
+"D" |
+"D" |
+")" |
+"V", reinterpret_cast<void*>(GotOrientation) }, |
+ }; |
+ const int kMethodsTestJniSize = arraysize(kMethodsTestJni); |
+ |
+ if (env->RegisterNatives(g_TestJni_clazz, |
+ kMethodsTestJni, |
+ kMethodsTestJniSize) < 0) { |
+ LOG(ERROR) << "RegisterNatives failed in " << __FILE__; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+#endif // org_chromium_TestJni_JNI |
+""" |
+ self.assertTextEquals(golden_content, h.GetContent()) |
+ |
def testInnerClassNatives(self): |
test_data = """ |
class MyInnerClass { |
@@ -260,8 +456,68 @@ |
self.assertListEquals(golden_natives, natives) |
h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', |
natives, [], TestOptions()) |
- self.assertGoldenTextEquals(h.GetContent()) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator.py |
+// For |
+// org/chromium/TestJni |
+ |
+#ifndef org_chromium_TestJni_JNI |
+#define org_chromium_TestJni_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kTestJniClassPath[] = "org/chromium/TestJni"; |
+const char kMyInnerClassClassPath[] = "org/chromium/TestJni$MyInnerClass"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_TestJni_clazz = NULL; |
+} // namespace |
+ |
+static jint Init(JNIEnv* env, jobject obj); |
+ |
+// Step 2: method stubs. |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kTestJniClassPath).obj())); |
+ static const JNINativeMethod kMethodsMyInnerClass[] = { |
+ { "nativeInit", |
+"(" |
+")" |
+"I", reinterpret_cast<void*>(Init) }, |
+ }; |
+ const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass); |
+ |
+ if (env->RegisterNatives(g_MyInnerClass_clazz, |
+ kMethodsMyInnerClass, |
+ kMethodsMyInnerClassSize) < 0) { |
+ LOG(ERROR) << "RegisterNatives failed in " << __FILE__; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+#endif // org_chromium_TestJni_JNI |
+""" |
+ self.assertTextEquals(golden_content, h.GetContent()) |
+ |
def testInnerClassNativesMultiple(self): |
test_data = """ |
class MyInnerClass { |
@@ -287,8 +543,88 @@ |
self.assertListEquals(golden_natives, natives) |
h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', |
natives, [], TestOptions()) |
- self.assertGoldenTextEquals(h.GetContent()) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator.py |
+// For |
+// org/chromium/TestJni |
+ |
+#ifndef org_chromium_TestJni_JNI |
+#define org_chromium_TestJni_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kMyOtherInnerClassClassPath[] = |
+ "org/chromium/TestJni$MyOtherInnerClass"; |
+const char kTestJniClassPath[] = "org/chromium/TestJni"; |
+const char kMyInnerClassClassPath[] = "org/chromium/TestJni$MyInnerClass"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_TestJni_clazz = NULL; |
+} // namespace |
+ |
+static jint Init(JNIEnv* env, jobject obj); |
+ |
+static jint Init(JNIEnv* env, jobject obj); |
+ |
+// Step 2: method stubs. |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kTestJniClassPath).obj())); |
+ static const JNINativeMethod kMethodsMyOtherInnerClass[] = { |
+ { "nativeInit", |
+"(" |
+")" |
+"I", reinterpret_cast<void*>(Init) }, |
+ }; |
+ const int kMethodsMyOtherInnerClassSize = |
+ arraysize(kMethodsMyOtherInnerClass); |
+ |
+ if (env->RegisterNatives(g_MyOtherInnerClass_clazz, |
+ kMethodsMyOtherInnerClass, |
+ kMethodsMyOtherInnerClassSize) < 0) { |
+ LOG(ERROR) << "RegisterNatives failed in " << __FILE__; |
+ return false; |
+ } |
+ |
+ static const JNINativeMethod kMethodsMyInnerClass[] = { |
+ { "nativeInit", |
+"(" |
+")" |
+"I", reinterpret_cast<void*>(Init) }, |
+ }; |
+ const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass); |
+ |
+ if (env->RegisterNatives(g_MyInnerClass_clazz, |
+ kMethodsMyInnerClass, |
+ kMethodsMyInnerClassSize) < 0) { |
+ LOG(ERROR) << "RegisterNatives failed in " << __FILE__; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+#endif // org_chromium_TestJni_JNI |
+""" |
+ self.assertTextEquals(golden_content, h.GetContent()) |
+ |
def testInnerClassNativesBothInnerAndOuter(self): |
test_data = """ |
class MyOuterClass { |
@@ -313,8 +649,87 @@ |
self.assertListEquals(golden_natives, natives) |
h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', |
natives, [], TestOptions()) |
- self.assertGoldenTextEquals(h.GetContent()) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator.py |
+// For |
+// org/chromium/TestJni |
+ |
+#ifndef org_chromium_TestJni_JNI |
+#define org_chromium_TestJni_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kMyOtherInnerClassClassPath[] = |
+ "org/chromium/TestJni$MyOtherInnerClass"; |
+const char kTestJniClassPath[] = "org/chromium/TestJni"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_TestJni_clazz = NULL; |
+} // namespace |
+ |
+static jint Init(JNIEnv* env, jobject obj); |
+ |
+static jint Init(JNIEnv* env, jobject obj); |
+ |
+// Step 2: method stubs. |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kTestJniClassPath).obj())); |
+ static const JNINativeMethod kMethodsMyOtherInnerClass[] = { |
+ { "nativeInit", |
+"(" |
+")" |
+"I", reinterpret_cast<void*>(Init) }, |
+ }; |
+ const int kMethodsMyOtherInnerClassSize = |
+ arraysize(kMethodsMyOtherInnerClass); |
+ |
+ if (env->RegisterNatives(g_MyOtherInnerClass_clazz, |
+ kMethodsMyOtherInnerClass, |
+ kMethodsMyOtherInnerClassSize) < 0) { |
+ LOG(ERROR) << "RegisterNatives failed in " << __FILE__; |
+ return false; |
+ } |
+ |
+ static const JNINativeMethod kMethodsTestJni[] = { |
+ { "nativeInit", |
+"(" |
+")" |
+"I", reinterpret_cast<void*>(Init) }, |
+ }; |
+ const int kMethodsTestJniSize = arraysize(kMethodsTestJni); |
+ |
+ if (env->RegisterNatives(g_TestJni_clazz, |
+ kMethodsTestJni, |
+ kMethodsTestJniSize) < 0) { |
+ LOG(ERROR) << "RegisterNatives failed in " << __FILE__; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+#endif // org_chromium_TestJni_JNI |
+""" |
+ self.assertTextEquals(golden_content, h.GetContent()) |
+ |
def testCalledByNatives(self): |
test_data = """" |
import android.graphics.Bitmap; |
@@ -623,8 +1038,496 @@ |
h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', |
[], called_by_natives, |
TestOptions()) |
- self.assertGoldenTextEquals(h.GetContent()) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator.py |
+// For |
+// org/chromium/TestJni |
+ |
+#ifndef org_chromium_TestJni_JNI |
+#define org_chromium_TestJni_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kTestJniClassPath[] = "org/chromium/TestJni"; |
+const char kInfoBarClassPath[] = "org/chromium/TestJni$InfoBar"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_TestJni_clazz = NULL; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_InfoBar_clazz = NULL; |
+} // namespace |
+ |
+// Step 2: method stubs. |
+ |
+static base::subtle::AtomicWord g_TestJni_showConfirmInfoBar = 0; |
+static ScopedJavaLocalRef<jobject> Java_TestJni_showConfirmInfoBar(JNIEnv* env, |
+ jobject obj, jint nativeInfoBar, |
+ jstring buttonOk, |
+ jstring buttonCancel, |
+ jstring title, |
+ jobject icon) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "showConfirmInfoBar", |
+ |
+"(" |
+"I" |
+"Ljava/lang/String;" |
+"Ljava/lang/String;" |
+"Ljava/lang/String;" |
+"Landroid/graphics/Bitmap;" |
+")" |
+"Lorg/chromium/Foo$InnerClass;", |
+ &g_TestJni_showConfirmInfoBar); |
+ |
+ jobject ret = |
+ env->CallObjectMethod(obj, |
+ method_id, nativeInfoBar, buttonOk, buttonCancel, title, icon); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jobject>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_showAutoLoginInfoBar = 0; |
+static ScopedJavaLocalRef<jobject> Java_TestJni_showAutoLoginInfoBar(JNIEnv* |
+ env, jobject obj, jint nativeInfoBar, |
+ jstring realm, |
+ jstring account, |
+ jstring args) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "showAutoLoginInfoBar", |
+ |
+"(" |
+"I" |
+"Ljava/lang/String;" |
+"Ljava/lang/String;" |
+"Ljava/lang/String;" |
+")" |
+"Lorg/chromium/Foo$InnerClass;", |
+ &g_TestJni_showAutoLoginInfoBar); |
+ |
+ jobject ret = |
+ env->CallObjectMethod(obj, |
+ method_id, nativeInfoBar, realm, account, args); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jobject>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_InfoBar_dismiss = 0; |
+static void Java_InfoBar_dismiss(JNIEnv* env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InfoBar_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InfoBar_clazz, |
+ "dismiss", |
+ |
+"(" |
+")" |
+"V", |
+ &g_InfoBar_dismiss); |
+ |
+ env->CallVoidMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_shouldShowAutoLogin = 0; |
+static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject view, |
+ jstring realm, |
+ jstring account, |
+ jstring args) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_STATIC>( |
+ env, g_TestJni_clazz, |
+ "shouldShowAutoLogin", |
+ |
+"(" |
+"Landroid/view/View;" |
+"Ljava/lang/String;" |
+"Ljava/lang/String;" |
+"Ljava/lang/String;" |
+")" |
+"Z", |
+ &g_TestJni_shouldShowAutoLogin); |
+ |
+ jboolean ret = |
+ env->CallStaticBooleanMethod(g_TestJni_clazz, |
+ method_id, view, realm, account, args); |
+ base::android::CheckException(env); |
+ return ret; |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_openUrl = 0; |
+static ScopedJavaLocalRef<jobject> Java_TestJni_openUrl(JNIEnv* env, jstring |
+ url) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_STATIC>( |
+ env, g_TestJni_clazz, |
+ "openUrl", |
+ |
+"(" |
+"Ljava/lang/String;" |
+")" |
+"Ljava/io/InputStream;", |
+ &g_TestJni_openUrl); |
+ |
+ jobject ret = |
+ env->CallStaticObjectMethod(g_TestJni_clazz, |
+ method_id, url); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jobject>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_activateHardwareAcceleration = 0; |
+static void Java_TestJni_activateHardwareAcceleration(JNIEnv* env, jobject obj, |
+ jboolean activated, |
+ jint iPid, |
+ jint iType, |
+ jint iPrimaryID, |
+ jint iSecondaryID) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "activateHardwareAcceleration", |
+ |
+"(" |
+"Z" |
+"I" |
+"I" |
+"I" |
+"I" |
+")" |
+"V", |
+ &g_TestJni_activateHardwareAcceleration); |
+ |
+ env->CallVoidMethod(obj, |
+ method_id, activated, iPid, iType, iPrimaryID, iSecondaryID); |
+ base::android::CheckException(env); |
+ |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_uncheckedCall = 0; |
+static void Java_TestJni_uncheckedCall(JNIEnv* env, jobject obj, jint iParam) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "uncheckedCall", |
+ |
+"(" |
+"I" |
+")" |
+"V", |
+ &g_TestJni_uncheckedCall); |
+ |
+ env->CallVoidMethod(obj, |
+ method_id, iParam); |
+ |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_returnByteArray = 0; |
+static ScopedJavaLocalRef<jbyteArray> Java_TestJni_returnByteArray(JNIEnv* env, |
+ jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "returnByteArray", |
+ |
+"(" |
+")" |
+"[B", |
+ &g_TestJni_returnByteArray); |
+ |
+ jbyteArray ret = |
+ static_cast<jbyteArray>(env->CallObjectMethod(obj, |
+ method_id)); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jbyteArray>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_returnBooleanArray = 0; |
+static ScopedJavaLocalRef<jbooleanArray> Java_TestJni_returnBooleanArray(JNIEnv* |
+ env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "returnBooleanArray", |
+ |
+"(" |
+")" |
+"[Z", |
+ &g_TestJni_returnBooleanArray); |
+ |
+ jbooleanArray ret = |
+ static_cast<jbooleanArray>(env->CallObjectMethod(obj, |
+ method_id)); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jbooleanArray>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_returnCharArray = 0; |
+static ScopedJavaLocalRef<jcharArray> Java_TestJni_returnCharArray(JNIEnv* env, |
+ jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "returnCharArray", |
+ |
+"(" |
+")" |
+"[C", |
+ &g_TestJni_returnCharArray); |
+ |
+ jcharArray ret = |
+ static_cast<jcharArray>(env->CallObjectMethod(obj, |
+ method_id)); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jcharArray>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_returnShortArray = 0; |
+static ScopedJavaLocalRef<jshortArray> Java_TestJni_returnShortArray(JNIEnv* |
+ env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "returnShortArray", |
+ |
+"(" |
+")" |
+"[S", |
+ &g_TestJni_returnShortArray); |
+ |
+ jshortArray ret = |
+ static_cast<jshortArray>(env->CallObjectMethod(obj, |
+ method_id)); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jshortArray>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_returnIntArray = 0; |
+static ScopedJavaLocalRef<jintArray> Java_TestJni_returnIntArray(JNIEnv* env, |
+ jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "returnIntArray", |
+ |
+"(" |
+")" |
+"[I", |
+ &g_TestJni_returnIntArray); |
+ |
+ jintArray ret = |
+ static_cast<jintArray>(env->CallObjectMethod(obj, |
+ method_id)); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jintArray>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_returnLongArray = 0; |
+static ScopedJavaLocalRef<jlongArray> Java_TestJni_returnLongArray(JNIEnv* env, |
+ jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "returnLongArray", |
+ |
+"(" |
+")" |
+"[J", |
+ &g_TestJni_returnLongArray); |
+ |
+ jlongArray ret = |
+ static_cast<jlongArray>(env->CallObjectMethod(obj, |
+ method_id)); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jlongArray>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_returnDoubleArray = 0; |
+static ScopedJavaLocalRef<jdoubleArray> Java_TestJni_returnDoubleArray(JNIEnv* |
+ env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "returnDoubleArray", |
+ |
+"(" |
+")" |
+"[D", |
+ &g_TestJni_returnDoubleArray); |
+ |
+ jdoubleArray ret = |
+ static_cast<jdoubleArray>(env->CallObjectMethod(obj, |
+ method_id)); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jdoubleArray>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_returnObjectArray = 0; |
+static ScopedJavaLocalRef<jobjectArray> Java_TestJni_returnObjectArray(JNIEnv* |
+ env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "returnObjectArray", |
+ |
+"(" |
+")" |
+"[Ljava/lang/Object;", |
+ &g_TestJni_returnObjectArray); |
+ |
+ jobjectArray ret = |
+ static_cast<jobjectArray>(env->CallObjectMethod(obj, |
+ method_id)); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jobjectArray>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_returnArrayOfByteArray = 0; |
+static ScopedJavaLocalRef<jobjectArray> |
+ Java_TestJni_returnArrayOfByteArray(JNIEnv* env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "returnArrayOfByteArray", |
+ |
+"(" |
+")" |
+"[[B", |
+ &g_TestJni_returnArrayOfByteArray); |
+ |
+ jobjectArray ret = |
+ static_cast<jobjectArray>(env->CallObjectMethod(obj, |
+ method_id)); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jobjectArray>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_getCompressFormat = 0; |
+static ScopedJavaLocalRef<jobject> Java_TestJni_getCompressFormat(JNIEnv* env, |
+ jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "getCompressFormat", |
+ |
+"(" |
+")" |
+"Landroid/graphics/Bitmap$CompressFormat;", |
+ &g_TestJni_getCompressFormat); |
+ |
+ jobject ret = |
+ env->CallObjectMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jobject>(env, ret); |
+} |
+ |
+static base::subtle::AtomicWord g_TestJni_getCompressFormatList = 0; |
+static ScopedJavaLocalRef<jobject> Java_TestJni_getCompressFormatList(JNIEnv* |
+ env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_TestJni_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_TestJni_clazz, |
+ "getCompressFormatList", |
+ |
+"(" |
+")" |
+"Ljava/util/List;", |
+ &g_TestJni_getCompressFormatList); |
+ |
+ jobject ret = |
+ env->CallObjectMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jobject>(env, ret); |
+} |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kTestJniClassPath).obj())); |
+ g_InfoBar_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kInfoBarClassPath).obj())); |
+ return true; |
+} |
+ |
+#endif // org_chromium_TestJni_JNI |
+""" |
+ self.assertTextEquals(golden_content, h.GetContent()) |
+ |
def testCalledByNativeParseError(self): |
try: |
jni_generator.ExtractCalledByNatives(""" |
@@ -687,8 +1590,73 @@ |
jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'), |
TestOptions()) |
self.assertEquals(1, len(jni_from_javap.called_by_natives)) |
- self.assertGoldenTextEquals(jni_from_javap.GetContent()) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator.py |
+// For |
+// java/util/HashSet |
+ |
+#ifndef java_util_HashSet_JNI |
+#define java_util_HashSet_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kHashSetClassPath[] = "java/util/HashSet"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_HashSet_clazz = NULL; |
+} // namespace |
+ |
+namespace JNI_HashSet { |
+ |
+// Step 2: method stubs. |
+ |
+static base::subtle::AtomicWord g_HashSet_dummy = 0; |
+static void Java_HashSet_dummy(JNIEnv* env, jobject obj) __attribute__ |
+ ((unused)); |
+static void Java_HashSet_dummy(JNIEnv* env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_HashSet_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_HashSet_clazz, |
+ "dummy", |
+"()V", |
+ &g_HashSet_dummy); |
+ |
+ env->CallVoidMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ |
+} |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_HashSet_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kHashSetClassPath).obj())); |
+ return true; |
+} |
+} // namespace JNI_HashSet |
+ |
+#endif // java_util_HashSet_JNI |
+""" |
+ self.assertTextEquals(golden_content, jni_from_javap.GetContent()) |
+ |
def testSnippnetJavap6_7(self): |
content_javap6 = """ |
public class java.util.HashSet { |
@@ -743,8 +1711,265 @@ |
jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'), |
TestOptions()) |
self.assertEquals(10, len(jni_from_javap.called_by_natives)) |
- self.assertGoldenTextEquals(jni_from_javap.GetContent()) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator.py |
+// For |
+// java/io/InputStream |
+ |
+#ifndef java_io_InputStream_JNI |
+#define java_io_InputStream_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kInputStreamClassPath[] = "java/io/InputStream"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_InputStream_clazz = NULL; |
+} // namespace |
+ |
+namespace JNI_InputStream { |
+ |
+// Step 2: method stubs. |
+ |
+static base::subtle::AtomicWord g_InputStream_available = 0; |
+static jint Java_InputStream_available(JNIEnv* env, jobject obj) __attribute__ |
+ ((unused)); |
+static jint Java_InputStream_available(JNIEnv* env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "available", |
+"()I", |
+ &g_InputStream_available); |
+ |
+ jint ret = |
+ env->CallIntMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ return ret; |
+} |
+ |
+static base::subtle::AtomicWord g_InputStream_close = 0; |
+static void Java_InputStream_close(JNIEnv* env, jobject obj) __attribute__ |
+ ((unused)); |
+static void Java_InputStream_close(JNIEnv* env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "close", |
+"()V", |
+ &g_InputStream_close); |
+ |
+ env->CallVoidMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ |
+} |
+ |
+static base::subtle::AtomicWord g_InputStream_mark = 0; |
+static void Java_InputStream_mark(JNIEnv* env, jobject obj, jint p0) |
+ __attribute__ ((unused)); |
+static void Java_InputStream_mark(JNIEnv* env, jobject obj, jint p0) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "mark", |
+"(I)V", |
+ &g_InputStream_mark); |
+ |
+ env->CallVoidMethod(obj, |
+ method_id, p0); |
+ base::android::CheckException(env); |
+ |
+} |
+ |
+static base::subtle::AtomicWord g_InputStream_markSupported = 0; |
+static jboolean Java_InputStream_markSupported(JNIEnv* env, jobject obj) |
+ __attribute__ ((unused)); |
+static jboolean Java_InputStream_markSupported(JNIEnv* env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "markSupported", |
+"()Z", |
+ &g_InputStream_markSupported); |
+ |
+ jboolean ret = |
+ env->CallBooleanMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ return ret; |
+} |
+ |
+static base::subtle::AtomicWord g_InputStream_readI = 0; |
+static jint Java_InputStream_readI(JNIEnv* env, jobject obj) __attribute__ |
+ ((unused)); |
+static jint Java_InputStream_readI(JNIEnv* env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "read", |
+"()I", |
+ &g_InputStream_readI); |
+ |
+ jint ret = |
+ env->CallIntMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ return ret; |
+} |
+ |
+static base::subtle::AtomicWord g_InputStream_readI_AB = 0; |
+static jint Java_InputStream_readI_AB(JNIEnv* env, jobject obj, jbyteArray p0) |
+ __attribute__ ((unused)); |
+static jint Java_InputStream_readI_AB(JNIEnv* env, jobject obj, jbyteArray p0) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "read", |
+"([B)I", |
+ &g_InputStream_readI_AB); |
+ |
+ jint ret = |
+ env->CallIntMethod(obj, |
+ method_id, p0); |
+ base::android::CheckException(env); |
+ return ret; |
+} |
+ |
+static base::subtle::AtomicWord g_InputStream_readI_AB_I_I = 0; |
+static jint Java_InputStream_readI_AB_I_I(JNIEnv* env, jobject obj, jbyteArray |
+ p0, |
+ jint p1, |
+ jint p2) __attribute__ ((unused)); |
+static jint Java_InputStream_readI_AB_I_I(JNIEnv* env, jobject obj, jbyteArray |
+ p0, |
+ jint p1, |
+ jint p2) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "read", |
+"([BII)I", |
+ &g_InputStream_readI_AB_I_I); |
+ |
+ jint ret = |
+ env->CallIntMethod(obj, |
+ method_id, p0, p1, p2); |
+ base::android::CheckException(env); |
+ return ret; |
+} |
+ |
+static base::subtle::AtomicWord g_InputStream_reset = 0; |
+static void Java_InputStream_reset(JNIEnv* env, jobject obj) __attribute__ |
+ ((unused)); |
+static void Java_InputStream_reset(JNIEnv* env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "reset", |
+"()V", |
+ &g_InputStream_reset); |
+ |
+ env->CallVoidMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ |
+} |
+ |
+static base::subtle::AtomicWord g_InputStream_skip = 0; |
+static jlong Java_InputStream_skip(JNIEnv* env, jobject obj, jlong p0) |
+ __attribute__ ((unused)); |
+static jlong Java_InputStream_skip(JNIEnv* env, jobject obj, jlong p0) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "skip", |
+"(J)J", |
+ &g_InputStream_skip); |
+ |
+ jlong ret = |
+ env->CallLongMethod(obj, |
+ method_id, p0); |
+ base::android::CheckException(env); |
+ return ret; |
+} |
+ |
+static base::subtle::AtomicWord g_InputStream_Constructor = 0; |
+static ScopedJavaLocalRef<jobject> Java_InputStream_Constructor(JNIEnv* env) |
+ __attribute__ ((unused)); |
+static ScopedJavaLocalRef<jobject> Java_InputStream_Constructor(JNIEnv* env) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_InputStream_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_InputStream_clazz, |
+ "<init>", |
+"()V", |
+ &g_InputStream_Constructor); |
+ |
+ jobject ret = |
+ env->NewObject(g_InputStream_clazz, |
+ method_id); |
+ base::android::CheckException(env); |
+ return ScopedJavaLocalRef<jobject>(env, ret); |
+} |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_InputStream_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kInputStreamClassPath).obj())); |
+ return true; |
+} |
+} // namespace JNI_InputStream |
+ |
+#endif // java_io_InputStream_JNI |
+""" |
+ self.assertTextEquals(golden_content, jni_from_javap.GetContent()) |
+ |
def testREForNatives(self): |
# We should not match "native SyncSetupFlow" inside the comment. |
test_data = """ |
@@ -822,8 +2047,69 @@ |
jni_from_java = jni_generator.JNIFromJavaSource( |
test_data, 'org/chromium/example/jni_generator/Example', TestOptions()) |
jni_generator.JniParams.SetJarJarMappings('') |
- self.assertGoldenTextEquals(jni_from_java.GetContent()) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator.py |
+// For |
+// org/chromium/example/jni_generator/Example |
+ |
+#ifndef org_chromium_example_jni_generator_Example_JNI |
+#define org_chromium_example_jni_generator_Example_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kExampleClassPath[] = "com/test/jni_generator/Example"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_Example_clazz = NULL; |
+} // namespace |
+ |
+static void Test(JNIEnv* env, jclass clazz, |
+ jobject t); |
+ |
+// Step 2: method stubs. |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_Example_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kExampleClassPath).obj())); |
+ static const JNINativeMethod kMethodsExample[] = { |
+ { "nativeTest", |
+"(" |
+"Lorg/test2/org/chromium/example2/Test;" |
+")" |
+"V", reinterpret_cast<void*>(Test) }, |
+ }; |
+ const int kMethodsExampleSize = arraysize(kMethodsExample); |
+ |
+ if (env->RegisterNatives(g_Example_clazz, |
+ kMethodsExample, |
+ kMethodsExampleSize) < 0) { |
+ LOG(ERROR) << "RegisterNatives failed in " << __FILE__; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+#endif // org_chromium_example_jni_generator_Example_JNI |
+""" |
+ self.assertTextEquals(golden_content, jni_from_java.GetContent()) |
+ |
def testImports(self): |
import_header = """ |
// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
@@ -907,8 +2193,73 @@ |
self.assertListEquals(golden_natives, natives) |
h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', |
natives, [], test_options) |
- self.assertGoldenTextEquals(h.GetContent()) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator.py |
+// For |
+// org/chromium/TestJni |
+#ifndef org_chromium_TestJni_JNI |
+#define org_chromium_TestJni_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kTestJniClassPath[] = "org/chromium/TestJni"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_TestJni_clazz = NULL; |
+} // namespace |
+ |
+// Step 2: method stubs. |
+static void Destroy(JNIEnv* env, jobject obj, |
+ jlong nativeChromeBrowserProvider) { |
+ DCHECK(nativeChromeBrowserProvider) << "Destroy"; |
+ ChromeBrowserProvider* native = |
+ reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); |
+ return native->Destroy(env, obj); |
+} |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kTestJniClassPath).obj())); |
+ static const JNINativeMethod kMethodsTestJni[] = { |
+ { "nativeDestroy", |
+"(" |
+"J" |
+")" |
+"V", reinterpret_cast<void*>(Destroy) }, |
+ }; |
+ const int kMethodsTestJniSize = arraysize(kMethodsTestJni); |
+ |
+ if (env->RegisterNatives(g_TestJni_clazz, |
+ kMethodsTestJni, |
+ kMethodsTestJniSize) < 0) { |
+ LOG(ERROR) << "RegisterNatives failed in " << __FILE__; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+#endif // org_chromium_TestJni_JNI |
+""" |
+ self.assertTextEquals(golden_content, h.GetContent()) |
+ |
+ |
if __name__ == '__main__': |
unittest.main() |