Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1402)

Unified Diff: base/android/jni_generator/jni_generator_tests.py

Issue 1647803004: Move base to DEPS (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/android/jni_generator/jni_generator_helper.h ('k') | base/android/jni_generator/sample_for_tests.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/android/jni_generator/jni_generator_tests.py
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py
deleted file mode 100755
index 21534ef44585fbedc361e7b2fe3e3151c1534c0e..0000000000000000000000000000000000000000
--- a/base/android/jni_generator/jni_generator_tests.py
+++ /dev/null
@@ -1,1152 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""Tests for jni_generator.py.
-
-This test suite contains various tests for the JNI generator.
-It exercises the low-level parser all the way up to the
-code generator and ensures the output matches a golden
-file.
-"""
-
-import difflib
-import inspect
-import optparse
-import os
-import sys
-import unittest
-import jni_generator
-from jni_generator import CalledByNative, JniParams, NativeMethod, Param
-
-
-SCRIPT_NAME = 'base/android/jni_generator/jni_generator.py'
-INCLUDES = (
- 'base/android/jni_generator/jni_generator_helper.h'
-)
-
-# Set this environment variable in order to regenerate the golden text
-# files.
-REBASELINE_ENV = 'REBASELINE'
-
-class TestOptions(object):
- """The mock options object which is passed to the jni_generator.py script."""
-
- def __init__(self):
- self.namespace = None
- self.script_name = SCRIPT_NAME
- self.includes = INCLUDES
- self.pure_native_methods = False
- self.ptr_type = 'long'
- self.jni_init_native_name = None
- self.eager_called_by_natives = False
- self.cpp = 'cpp'
- self.javap = 'javap'
- self.native_exports = False
- self.native_exports_optional = False
-
-class TestGenerator(unittest.TestCase):
- def assertObjEquals(self, first, second):
- dict_first = first.__dict__
- dict_second = second.__dict__
- self.assertEquals(dict_first.keys(), dict_second.keys())
- for key, value in dict_first.iteritems():
- if (type(value) is list and len(value) and
- isinstance(type(value[0]), object)):
- self.assertListEquals(value, second.__getattribute__(key))
- else:
- actual = second.__getattribute__(key)
- self.assertEquals(value, actual,
- 'Key ' + key + ': ' + str(value) + '!=' + str(actual))
-
- def assertListEquals(self, first, second):
- self.assertEquals(len(first), len(second))
- for i in xrange(len(first)):
- if isinstance(first[i], object):
- self.assertObjEquals(first[i], second[i])
- else:
- self.assertEquals(first[i], second[i])
-
- def assertTextEquals(self, golden_text, generated_text):
- if not self.compareText(golden_text, generated_text):
- self.fail('Golden text mismatch.')
-
- def compareText(self, golden_text, generated_text):
- def FilterText(text):
- return [
- l.strip() for l in text.split('\n')
- if not l.startswith('// Copyright')
- ]
- stripped_golden = FilterText(golden_text)
- stripped_generated = FilterText(generated_text)
- if stripped_golden == stripped_generated:
- return True
- print self.id()
- for line in difflib.context_diff(stripped_golden, stripped_generated):
- print line
- print '\n\nGenerated'
- print '=' * 80
- print generated_text
- print '=' * 80
- print 'Run with:'
- print 'REBASELINE=1', sys.argv[0]
- print 'to regenerate the data files.'
-
- 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])
- # This is the caller test method.
- caller = inspect.stack()[1][3]
- self.assertTrue(caller.startswith('test'),
- 'assertGoldenTextEquals can only be called from a '
- 'test* method, not %s' % caller)
- golden_file = os.path.join(script_dir, caller + '.golden')
- golden_text = self._ReadGoldenFile(golden_file)
- if os.environ.get(REBASELINE_ENV):
- if golden_text != generated_text:
- with file(golden_file, 'w') as f:
- f.write(generated_text)
- return
- self.assertTextEquals(golden_text, generated_text)
-
- def testInspectCaller(self):
- def willRaise():
- # This function can only be called from a test* method.
- self.assertGoldenTextEquals('')
- self.assertRaises(AssertionError, willRaise)
-
- def testNatives(self):
- test_data = """"
- interface OnFrameAvailableListener {}
- private native int nativeInit();
- private native void nativeDestroy(int nativeChromeBrowserProvider);
- private native long nativeAddBookmark(
- int nativeChromeBrowserProvider,
- String url, String title, boolean isFolder, long parentId);
- private static native String nativeGetDomainAndRegistry(String url);
- private static native void nativeCreateHistoricalTabFromState(
- byte[] state, int tab_index);
- private native byte[] nativeGetStateAsByteArray(View view);
- private static native String[] nativeGetAutofillProfileGUIDs();
- private native void nativeSetRecognitionResults(
- int sessionId, String[] results);
- private native long nativeAddBookmarkFromAPI(
- int nativeChromeBrowserProvider,
- String url, Long created, Boolean isBookmark,
- Long date, byte[] favicon, String title, Integer visits);
- native int nativeFindAll(String find);
- private static native OnFrameAvailableListener nativeGetInnerClass();
- private native Bitmap nativeQueryBitmap(
- int nativeChromeBrowserProvider,
- String[] projection, String selection,
- String[] selectionArgs, String sortOrder);
- private native void nativeGotOrientation(
- int nativeDataFetcherImplAndroid,
- double alpha, double beta, double gamma);
- """
- jni_generator.JniParams.SetFullyQualifiedClass(
- 'org/chromium/example/jni_generator/SampleForTests')
- jni_generator.JniParams.ExtractImportsAndInnerClasses(test_data)
- natives = jni_generator.ExtractNatives(test_data, 'int')
- golden_natives = [
- NativeMethod(return_type='int', static=False,
- name='Init',
- params=[],
- java_class_name=None,
- type='function'),
- NativeMethod(return_type='void', static=False, name='Destroy',
- params=[Param(datatype='int',
- name='nativeChromeBrowserProvider')],
- java_class_name=None,
- type='method',
- p0_type='ChromeBrowserProvider'),
- NativeMethod(return_type='long', static=False, name='AddBookmark',
- params=[Param(datatype='int',
- name='nativeChromeBrowserProvider'),
- Param(datatype='String',
- name='url'),
- Param(datatype='String',
- name='title'),
- Param(datatype='boolean',
- name='isFolder'),
- Param(datatype='long',
- name='parentId')],
- java_class_name=None,
- type='method',
- p0_type='ChromeBrowserProvider'),
- NativeMethod(return_type='String', static=True,
- name='GetDomainAndRegistry',
- params=[Param(datatype='String',
- name='url')],
- java_class_name=None,
- type='function'),
- NativeMethod(return_type='void', static=True,
- name='CreateHistoricalTabFromState',
- params=[Param(datatype='byte[]',
- name='state'),
- Param(datatype='int',
- name='tab_index')],
- java_class_name=None,
- type='function'),
- NativeMethod(return_type='byte[]', static=False,
- name='GetStateAsByteArray',
- params=[Param(datatype='View', name='view')],
- java_class_name=None,
- type='function'),
- NativeMethod(return_type='String[]', static=True,
- name='GetAutofillProfileGUIDs', params=[],
- java_class_name=None,
- type='function'),
- NativeMethod(return_type='void', static=False,
- name='SetRecognitionResults',
- params=[Param(datatype='int', name='sessionId'),
- Param(datatype='String[]', name='results')],
- java_class_name=None,
- type='function'),
- NativeMethod(return_type='long', static=False,
- name='AddBookmarkFromAPI',
- params=[Param(datatype='int',
- name='nativeChromeBrowserProvider'),
- Param(datatype='String',
- name='url'),
- Param(datatype='Long',
- name='created'),
- Param(datatype='Boolean',
- name='isBookmark'),
- Param(datatype='Long',
- name='date'),
- Param(datatype='byte[]',
- name='favicon'),
- Param(datatype='String',
- name='title'),
- Param(datatype='Integer',
- name='visits')],
- java_class_name=None,
- type='method',
- p0_type='ChromeBrowserProvider'),
- NativeMethod(return_type='int', static=False,
- name='FindAll',
- params=[Param(datatype='String',
- name='find')],
- java_class_name=None,
- type='function'),
- NativeMethod(return_type='OnFrameAvailableListener', static=True,
- name='GetInnerClass',
- params=[],
- java_class_name=None,
- type='function'),
- NativeMethod(return_type='Bitmap',
- static=False,
- name='QueryBitmap',
- params=[Param(datatype='int',
- name='nativeChromeBrowserProvider'),
- Param(datatype='String[]',
- name='projection'),
- Param(datatype='String',
- name='selection'),
- Param(datatype='String[]',
- name='selectionArgs'),
- Param(datatype='String',
- name='sortOrder'),
- ],
- java_class_name=None,
- type='method',
- p0_type='ChromeBrowserProvider'),
- NativeMethod(return_type='void', static=False,
- name='GotOrientation',
- params=[Param(datatype='int',
- name='nativeDataFetcherImplAndroid'),
- Param(datatype='double',
- name='alpha'),
- Param(datatype='double',
- name='beta'),
- Param(datatype='double',
- name='gamma'),
- ],
- java_class_name=None,
- type='method',
- p0_type='content::DataFetcherImplAndroid'),
- ]
- self.assertListEquals(golden_natives, natives)
- h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- natives, [], [], TestOptions())
- self.assertGoldenTextEquals(h.GetContent())
-
- def testInnerClassNatives(self):
- test_data = """
- class MyInnerClass {
- @NativeCall("MyInnerClass")
- private native int nativeInit();
- }
- """
- natives = jni_generator.ExtractNatives(test_data, 'int')
- golden_natives = [
- NativeMethod(return_type='int', static=False,
- name='Init', params=[],
- java_class_name='MyInnerClass',
- type='function')
- ]
- self.assertListEquals(golden_natives, natives)
- h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- natives, [], [], TestOptions())
- self.assertGoldenTextEquals(h.GetContent())
-
- def testInnerClassNativesMultiple(self):
- test_data = """
- class MyInnerClass {
- @NativeCall("MyInnerClass")
- private native int nativeInit();
- }
- class MyOtherInnerClass {
- @NativeCall("MyOtherInnerClass")
- private native int nativeInit();
- }
- """
- natives = jni_generator.ExtractNatives(test_data, 'int')
- golden_natives = [
- NativeMethod(return_type='int', static=False,
- name='Init', params=[],
- java_class_name='MyInnerClass',
- type='function'),
- NativeMethod(return_type='int', static=False,
- name='Init', params=[],
- java_class_name='MyOtherInnerClass',
- type='function')
- ]
- self.assertListEquals(golden_natives, natives)
- h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- natives, [], [], TestOptions())
- self.assertGoldenTextEquals(h.GetContent())
-
- def testInnerClassNativesBothInnerAndOuter(self):
- test_data = """
- class MyOuterClass {
- private native int nativeInit();
- class MyOtherInnerClass {
- @NativeCall("MyOtherInnerClass")
- private native int nativeInit();
- }
- }
- """
- natives = jni_generator.ExtractNatives(test_data, 'int')
- golden_natives = [
- NativeMethod(return_type='int', static=False,
- name='Init', params=[],
- java_class_name=None,
- type='function'),
- NativeMethod(return_type='int', static=False,
- name='Init', params=[],
- java_class_name='MyOtherInnerClass',
- type='function')
- ]
- self.assertListEquals(golden_natives, natives)
- h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- natives, [], [], TestOptions())
- self.assertGoldenTextEquals(h.GetContent())
-
- def testCalledByNatives(self):
- test_data = """"
- import android.graphics.Bitmap;
- import android.view.View;
- import java.io.InputStream;
- import java.util.List;
-
- class InnerClass {}
-
- @CalledByNative
- InnerClass showConfirmInfoBar(int nativeInfoBar,
- String buttonOk, String buttonCancel, String title, Bitmap icon) {
- InfoBar infobar = new ConfirmInfoBar(nativeInfoBar, mContext,
- buttonOk, buttonCancel,
- title, icon);
- return infobar;
- }
- @CalledByNative
- InnerClass showAutoLoginInfoBar(int nativeInfoBar,
- String realm, String account, String args) {
- AutoLoginInfoBar infobar = new AutoLoginInfoBar(nativeInfoBar, mContext,
- realm, account, args);
- if (infobar.displayedAccountCount() == 0)
- infobar = null;
- return infobar;
- }
- @CalledByNative("InfoBar")
- void dismiss();
- @SuppressWarnings("unused")
- @CalledByNative
- private static boolean shouldShowAutoLogin(View view,
- String realm, String account, String args) {
- AccountManagerContainer accountManagerContainer =
- new AccountManagerContainer((Activity)contentView.getContext(),
- realm, account, args);
- String[] logins = accountManagerContainer.getAccountLogins(null);
- return logins.length != 0;
- }
- @CalledByNative
- static InputStream openUrl(String url) {
- return null;
- }
- @CalledByNative
- private void activateHardwareAcceleration(final boolean activated,
- final int iPid, final int iType,
- final int iPrimaryID, final int iSecondaryID) {
- if (!activated) {
- return
- }
- }
- @CalledByNativeUnchecked
- private void uncheckedCall(int iParam);
-
- @CalledByNative
- public byte[] returnByteArray();
-
- @CalledByNative
- public boolean[] returnBooleanArray();
-
- @CalledByNative
- public char[] returnCharArray();
-
- @CalledByNative
- public short[] returnShortArray();
-
- @CalledByNative
- public int[] returnIntArray();
-
- @CalledByNative
- public long[] returnLongArray();
-
- @CalledByNative
- public double[] returnDoubleArray();
-
- @CalledByNative
- public Object[] returnObjectArray();
-
- @CalledByNative
- public byte[][] returnArrayOfByteArray();
-
- @CalledByNative
- public Bitmap.CompressFormat getCompressFormat();
-
- @CalledByNative
- public List<Bitmap.CompressFormat> getCompressFormatList();
- """
- jni_generator.JniParams.SetFullyQualifiedClass('org/chromium/Foo')
- jni_generator.JniParams.ExtractImportsAndInnerClasses(test_data)
- called_by_natives = jni_generator.ExtractCalledByNatives(test_data)
- golden_called_by_natives = [
- CalledByNative(
- return_type='InnerClass',
- system_class=False,
- static=False,
- name='showConfirmInfoBar',
- method_id_var_name='showConfirmInfoBar',
- java_class_name='',
- params=[Param(datatype='int', name='nativeInfoBar'),
- Param(datatype='String', name='buttonOk'),
- Param(datatype='String', name='buttonCancel'),
- Param(datatype='String', name='title'),
- Param(datatype='Bitmap', name='icon')],
- env_call=('Object', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='InnerClass',
- system_class=False,
- static=False,
- name='showAutoLoginInfoBar',
- method_id_var_name='showAutoLoginInfoBar',
- java_class_name='',
- params=[Param(datatype='int', name='nativeInfoBar'),
- Param(datatype='String', name='realm'),
- Param(datatype='String', name='account'),
- Param(datatype='String', name='args')],
- env_call=('Object', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='void',
- system_class=False,
- static=False,
- name='dismiss',
- method_id_var_name='dismiss',
- java_class_name='InfoBar',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='boolean',
- system_class=False,
- static=True,
- name='shouldShowAutoLogin',
- method_id_var_name='shouldShowAutoLogin',
- java_class_name='',
- params=[Param(datatype='View', name='view'),
- Param(datatype='String', name='realm'),
- Param(datatype='String', name='account'),
- Param(datatype='String', name='args')],
- env_call=('Boolean', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='InputStream',
- system_class=False,
- static=True,
- name='openUrl',
- method_id_var_name='openUrl',
- java_class_name='',
- params=[Param(datatype='String', name='url')],
- env_call=('Object', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='void',
- system_class=False,
- static=False,
- name='activateHardwareAcceleration',
- method_id_var_name='activateHardwareAcceleration',
- java_class_name='',
- params=[Param(datatype='boolean', name='activated'),
- Param(datatype='int', name='iPid'),
- Param(datatype='int', name='iType'),
- Param(datatype='int', name='iPrimaryID'),
- Param(datatype='int', name='iSecondaryID'),
- ],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='void',
- system_class=False,
- static=False,
- name='uncheckedCall',
- method_id_var_name='uncheckedCall',
- java_class_name='',
- params=[Param(datatype='int', name='iParam')],
- env_call=('Void', ''),
- unchecked=True,
- ),
- CalledByNative(
- return_type='byte[]',
- system_class=False,
- static=False,
- name='returnByteArray',
- method_id_var_name='returnByteArray',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='boolean[]',
- system_class=False,
- static=False,
- name='returnBooleanArray',
- method_id_var_name='returnBooleanArray',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='char[]',
- system_class=False,
- static=False,
- name='returnCharArray',
- method_id_var_name='returnCharArray',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='short[]',
- system_class=False,
- static=False,
- name='returnShortArray',
- method_id_var_name='returnShortArray',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='int[]',
- system_class=False,
- static=False,
- name='returnIntArray',
- method_id_var_name='returnIntArray',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='long[]',
- system_class=False,
- static=False,
- name='returnLongArray',
- method_id_var_name='returnLongArray',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='double[]',
- system_class=False,
- static=False,
- name='returnDoubleArray',
- method_id_var_name='returnDoubleArray',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='Object[]',
- system_class=False,
- static=False,
- name='returnObjectArray',
- method_id_var_name='returnObjectArray',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='byte[][]',
- system_class=False,
- static=False,
- name='returnArrayOfByteArray',
- method_id_var_name='returnArrayOfByteArray',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='Bitmap.CompressFormat',
- system_class=False,
- static=False,
- name='getCompressFormat',
- method_id_var_name='getCompressFormat',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- CalledByNative(
- return_type='List<Bitmap.CompressFormat>',
- system_class=False,
- static=False,
- name='getCompressFormatList',
- method_id_var_name='getCompressFormatList',
- java_class_name='',
- params=[],
- env_call=('Void', ''),
- unchecked=False,
- ),
- ]
- self.assertListEquals(golden_called_by_natives, called_by_natives)
- h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- [], called_by_natives, [],
- TestOptions())
- self.assertGoldenTextEquals(h.GetContent())
-
- def testCalledByNativeParseError(self):
- try:
- jni_generator.ExtractCalledByNatives("""
-@CalledByNative
-public static int foo(); // This one is fine
-
-@CalledByNative
-scooby doo
-""")
- self.fail('Expected a ParseError')
- except jni_generator.ParseError, e:
- self.assertEquals(('@CalledByNative', 'scooby doo'), e.context_lines)
-
- def testFullyQualifiedClassName(self):
- contents = """
-// Copyright (c) 2010 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.
-
-package org.chromium.content.browser;
-
-import org.chromium.base.BuildInfo;
-"""
- self.assertEquals('org/chromium/content/browser/Foo',
- jni_generator.ExtractFullyQualifiedJavaClassName(
- 'org/chromium/content/browser/Foo.java', contents))
- self.assertEquals('org/chromium/content/browser/Foo',
- jni_generator.ExtractFullyQualifiedJavaClassName(
- 'frameworks/Foo.java', contents))
- self.assertRaises(SyntaxError,
- jni_generator.ExtractFullyQualifiedJavaClassName,
- 'com/foo/Bar', 'no PACKAGE line')
-
- def testMethodNameMangling(self):
- self.assertEquals('closeV',
- jni_generator.GetMangledMethodName('close', [], 'void'))
- self.assertEquals('readI_AB_I_I',
- jni_generator.GetMangledMethodName('read',
- [Param(name='p1',
- datatype='byte[]'),
- Param(name='p2',
- datatype='int'),
- Param(name='p3',
- datatype='int'),],
- 'int'))
- self.assertEquals('openJIIS_JLS',
- jni_generator.GetMangledMethodName('open',
- [Param(name='p1',
- datatype='java/lang/String'),],
- 'java/io/InputStream'))
-
- def testFromJavaPGenerics(self):
- contents = """
-public abstract class java.util.HashSet<T> extends java.util.AbstractSet<E>
- implements java.util.Set<E>, java.lang.Cloneable, java.io.Serializable {
- public void dummy();
- Signature: ()V
-}
-"""
- 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())
-
- def testSnippnetJavap6_7_8(self):
- content_javap6 = """
-public class java.util.HashSet {
-public boolean add(java.lang.Object);
- Signature: (Ljava/lang/Object;)Z
-}
-"""
-
- content_javap7 = """
-public class java.util.HashSet {
-public boolean add(E);
- Signature: (Ljava/lang/Object;)Z
-}
-"""
-
- content_javap8 = """
-public class java.util.HashSet {
- public boolean add(E);
- descriptor: (Ljava/lang/Object;)Z
-}
-"""
-
- jni_from_javap6 = jni_generator.JNIFromJavaP(content_javap6.split('\n'),
- TestOptions())
- jni_from_javap7 = jni_generator.JNIFromJavaP(content_javap7.split('\n'),
- TestOptions())
- jni_from_javap8 = jni_generator.JNIFromJavaP(content_javap8.split('\n'),
- TestOptions())
- self.assertTrue(jni_from_javap6.GetContent())
- self.assertTrue(jni_from_javap7.GetContent())
- self.assertTrue(jni_from_javap8.GetContent())
- # Ensure the javap7 is correctly parsed and uses the Signature field rather
- # than the "E" parameter.
- self.assertTextEquals(jni_from_javap6.GetContent(),
- jni_from_javap7.GetContent())
- # Ensure the javap8 is correctly parsed and uses the descriptor field.
- self.assertTextEquals(jni_from_javap7.GetContent(),
- jni_from_javap8.GetContent())
-
- def testFromJavaP(self):
- contents = self._ReadGoldenFile(os.path.join(os.path.dirname(sys.argv[0]),
- 'testInputStream.javap'))
- 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())
-
- def testConstantsFromJavaP(self):
- for f in ['testMotionEvent.javap', 'testMotionEvent.javap7']:
- contents = self._ReadGoldenFile(os.path.join(os.path.dirname(sys.argv[0]),
- f))
- jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'),
- TestOptions())
- self.assertEquals(86, len(jni_from_javap.called_by_natives))
- self.assertGoldenTextEquals(jni_from_javap.GetContent())
-
- def testREForNatives(self):
- # We should not match "native SyncSetupFlow" inside the comment.
- test_data = """
- /**
- * Invoked when the setup process is complete so we can disconnect from the
- * native-side SyncSetupFlowHandler.
- */
- public void destroy() {
- Log.v(TAG, "Destroying native SyncSetupFlow");
- if (mNativeSyncSetupFlow != 0) {
- nativeSyncSetupEnded(mNativeSyncSetupFlow);
- mNativeSyncSetupFlow = 0;
- }
- }
- private native void nativeSyncSetupEnded(
- int nativeAndroidSyncSetupFlowHandler);
- """
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, 'foo/bar', TestOptions())
-
- def testRaisesOnNonJNIMethod(self):
- test_data = """
- class MyInnerClass {
- private int Foo(int p0) {
- }
- }
- """
- self.assertRaises(SyntaxError,
- jni_generator.JNIFromJavaSource,
- test_data, 'foo/bar', TestOptions())
-
- def testJniSelfDocumentingExample(self):
- script_dir = os.path.dirname(sys.argv[0])
- content = file(os.path.join(script_dir,
- 'java/src/org/chromium/example/jni_generator/SampleForTests.java')
- ).read()
- golden_file = os.path.join(script_dir, 'golden_sample_for_tests_jni.h')
- golden_content = file(golden_file).read()
- jni_from_java = jni_generator.JNIFromJavaSource(
- content, 'org/chromium/example/jni_generator/SampleForTests',
- TestOptions())
- generated_text = jni_from_java.GetContent()
- if not self.compareText(golden_content, generated_text):
- if os.environ.get(REBASELINE_ENV):
- with file(golden_file, 'w') as f:
- f.write(generated_text)
- return
- self.fail('testJniSelfDocumentingExample')
-
- def testNoWrappingPreprocessorLines(self):
- test_data = """
- package com.google.lookhowextremelylongiam.snarf.icankeepthisupallday;
-
- class ReallyLongClassNamesAreAllTheRage {
- private static native int nativeTest();
- }
- """
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, ('com/google/lookhowextremelylongiam/snarf/'
- 'icankeepthisupallday/ReallyLongClassNamesAreAllTheRage'),
- TestOptions())
- jni_lines = jni_from_java.GetContent().split('\n')
- line = filter(lambda line: line.lstrip().startswith('#ifndef'),
- jni_lines)[0]
- self.assertTrue(len(line) > 80,
- ('Expected #ifndef line to be > 80 chars: ', line))
-
- def testJarJarRemapping(self):
- test_data = """
- package org.chromium.example.jni_generator;
-
- import org.chromium.example2.Test;
-
- import org.chromium.example3.PrefixFoo;
- import org.chromium.example3.Prefix;
- import org.chromium.example3.Bar$Inner;
-
- class Example {
- private static native void nativeTest(Test t);
- private static native void nativeTest2(PrefixFoo t);
- private static native void nativeTest3(Prefix t);
- private static native void nativeTest4(Bar$Inner t);
- }
- """
- jni_generator.JniParams.SetJarJarMappings(
- """rule org.chromium.example.** com.test.@1
- rule org.chromium.example2.** org.test2.@1
- rule org.chromium.example3.Prefix org.test3.Test
- rule org.chromium.example3.Bar$** org.test3.TestBar$@1""")
- 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())
-
- def testImports(self):
- import_header = """
-// 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.
-
-package org.chromium.content.app;
-
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.SurfaceTexture;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.ParcelFileDescriptor;
-import android.os.Process;
-import android.os.RemoteException;
-import android.util.Log;
-import android.view.Surface;
-
-import java.util.ArrayList;
-
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
-import org.chromium.content.app.ContentMain;
-import org.chromium.content.browser.SandboxedProcessConnection;
-import org.chromium.content.common.ISandboxedProcessCallback;
-import org.chromium.content.common.ISandboxedProcessService;
-import org.chromium.content.common.WillNotRaise.AnException;
-import org.chromium.content.common.WillRaise.AnException;
-
-import static org.chromium.Bar.Zoo;
-
-class Foo {
- public static class BookmarkNode implements Parcelable {
- }
- public interface PasswordListObserver {
- }
-}
- """
- jni_generator.JniParams.SetFullyQualifiedClass(
- 'org/chromium/content/app/Foo')
- jni_generator.JniParams.ExtractImportsAndInnerClasses(import_header)
- self.assertTrue('Lorg/chromium/content/common/ISandboxedProcessService' in
- jni_generator.JniParams._imports)
- self.assertTrue('Lorg/chromium/Bar/Zoo' in
- jni_generator.JniParams._imports)
- self.assertTrue('Lorg/chromium/content/app/Foo$BookmarkNode' in
- jni_generator.JniParams._inner_classes)
- self.assertTrue('Lorg/chromium/content/app/Foo$PasswordListObserver' in
- jni_generator.JniParams._inner_classes)
- self.assertEquals('Lorg/chromium/content/app/ContentMain$Inner;',
- jni_generator.JniParams.JavaToJni('ContentMain.Inner'))
- self.assertRaises(SyntaxError,
- jni_generator.JniParams.JavaToJni,
- 'AnException')
-
- def testJniParamsJavaToJni(self):
- self.assertTextEquals('I', JniParams.JavaToJni('int'))
- self.assertTextEquals('[B', JniParams.JavaToJni('byte[]'))
- self.assertTextEquals(
- '[Ljava/nio/ByteBuffer;', JniParams.JavaToJni('java/nio/ByteBuffer[]'))
-
- def testNativesLong(self):
- test_options = TestOptions()
- test_options.ptr_type = 'long'
- test_data = """"
- private native void nativeDestroy(long nativeChromeBrowserProvider);
- """
- jni_generator.JniParams.ExtractImportsAndInnerClasses(test_data)
- natives = jni_generator.ExtractNatives(test_data, test_options.ptr_type)
- golden_natives = [
- NativeMethod(return_type='void', static=False, name='Destroy',
- params=[Param(datatype='long',
- name='nativeChromeBrowserProvider')],
- java_class_name=None,
- type='method',
- p0_type='ChromeBrowserProvider',
- ptr_type=test_options.ptr_type),
- ]
- self.assertListEquals(golden_natives, natives)
- h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- natives, [], [], test_options)
- self.assertGoldenTextEquals(h.GetContent())
-
- def testPureNativeMethodsOption(self):
- test_data = """
- package org.chromium.example.jni_generator;
-
- /** The pointer to the native Test. */
- long nativeTest;
-
- class Test {
- private static native long nativeMethod(long nativeTest, int arg1);
- }
- """
- options = TestOptions()
- options.pure_native_methods = True
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, 'org/chromium/example/jni_generator/Test', options)
- self.assertGoldenTextEquals(jni_from_java.GetContent())
-
- def testJNIInitNativeNameOption(self):
- test_data = """
- package org.chromium.example.jni_generator;
-
- /** The pointer to the native Test. */
- long nativeTest;
-
- class Test {
- private static native boolean nativeInitNativeClass();
- private static native int nativeMethod(long nativeTest, int arg1);
- }
- """
- options = TestOptions()
- options.jni_init_native_name = 'nativeInitNativeClass'
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, 'org/chromium/example/jni_generator/Test', options)
- self.assertGoldenTextEquals(jni_from_java.GetContent())
-
- def testEagerCalledByNativesOption(self):
- test_data = """
- package org.chromium.example.jni_generator;
-
- /** The pointer to the native Test. */
- long nativeTest;
-
- class Test {
- private static native boolean nativeInitNativeClass();
- private static native int nativeMethod(long nativeTest, int arg1);
- @CalledByNative
- private void testMethodWithParam(int iParam);
- @CalledByNative
- private static int testStaticMethodWithParam(int iParam);
- @CalledByNative
- private static double testMethodWithNoParam();
- @CalledByNative
- private static String testStaticMethodWithNoParam();
- }
- """
- options = TestOptions()
- options.jni_init_native_name = 'nativeInitNativeClass'
- options.eager_called_by_natives = True
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, 'org/chromium/example/jni_generator/Test', options)
- self.assertGoldenTextEquals(jni_from_java.GetContent())
-
- def runNativeExportsOption(self, optional):
- test_data = """
- package org.chromium.example.jni_generator;
-
- /** The pointer to the native Test. */
- long nativeTest;
-
- class Test {
- private static native boolean nativeInitNativeClass();
- private static native int nativeStaticMethod(long nativeTest, int arg1);
- private native int nativeMethod(long nativeTest, int arg1);
- @CalledByNative
- private void testMethodWithParam(int iParam);
- @CalledByNative
- private String testMethodWithParamAndReturn(int iParam);
- @CalledByNative
- private static int testStaticMethodWithParam(int iParam);
- @CalledByNative
- private static double testMethodWithNoParam();
- @CalledByNative
- private static String testStaticMethodWithNoParam();
-
- class MyInnerClass {
- @NativeCall("MyInnerClass")
- private native int nativeInit();
- }
- class MyOtherInnerClass {
- @NativeCall("MyOtherInnerClass")
- private native int nativeInit();
- }
- }
- """
- options = TestOptions()
- options.jni_init_native_name = 'nativeInitNativeClass'
- options.native_exports = True
- options.native_exports_optional = optional
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, 'org/chromium/example/jni_generator/SampleForTests', options)
- return jni_from_java.GetContent()
-
- def testNativeExportsOption(self):
- content = self.runNativeExportsOption(False)
- self.assertGoldenTextEquals(content)
-
- def testNativeExportsOptionalOption(self):
- content = self.runNativeExportsOption(True)
- self.assertGoldenTextEquals(content)
-
- def testOuterInnerRaises(self):
- test_data = """
- package org.chromium.media;
-
- @CalledByNative
- static int getCaptureFormatWidth(VideoCapture.CaptureFormat format) {
- return format.getWidth();
- }
- """
- def willRaise():
- jni_generator.JNIFromJavaSource(
- test_data,
- 'org/chromium/media/VideoCaptureFactory',
- TestOptions())
- self.assertRaises(SyntaxError, willRaise)
-
- def testSingleJNIAdditionalImport(self):
- test_data = """
- package org.chromium.foo;
-
- @JNIAdditionalImport(Bar.class)
- class Foo {
-
- @CalledByNative
- private static void calledByNative(Bar.Callback callback) {
- }
-
- private static native void nativeDoSomething(Bar.Callback callback);
- }
- """
- jni_from_java = jni_generator.JNIFromJavaSource(test_data,
- 'org/chromium/foo/Foo',
- TestOptions())
- self.assertGoldenTextEquals(jni_from_java.GetContent())
-
- def testMultipleJNIAdditionalImport(self):
- test_data = """
- package org.chromium.foo;
-
- @JNIAdditionalImport({Bar1.class, Bar2.class})
- class Foo {
-
- @CalledByNative
- private static void calledByNative(Bar1.Callback callback1,
- Bar2.Callback callback2) {
- }
-
- private static native void nativeDoSomething(Bar1.Callback callback1,
- Bar2.Callback callback2);
- }
- """
- jni_from_java = jni_generator.JNIFromJavaSource(test_data,
- 'org/chromium/foo/Foo',
- TestOptions())
- self.assertGoldenTextEquals(jni_from_java.GetContent())
-
-
-def TouchStamp(stamp_path):
- dir_name = os.path.dirname(stamp_path)
- if not os.path.isdir(dir_name):
- os.makedirs()
-
- with open(stamp_path, 'a'):
- os.utime(stamp_path, None)
-
-
-def main(argv):
- parser = optparse.OptionParser()
- parser.add_option('--stamp', help='Path to touch on success.')
- options, _ = parser.parse_args(argv[1:])
-
- test_result = unittest.main(argv=argv[0:1], exit=False)
-
- if test_result.result.wasSuccessful() and options.stamp:
- TouchStamp(options.stamp)
-
- return not test_result.result.wasSuccessful()
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv))
« no previous file with comments | « base/android/jni_generator/jni_generator_helper.h ('k') | base/android/jni_generator/sample_for_tests.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698