jni_generator_tests.py revision cedac228d2dd51db4b79ea1e72c7f249408ee061
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Tests for jni_generator.py. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)This test suite contains various tests for the JNI generator. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)It exercises the low-level parser all the way up to the 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)code generator and ensures the output matches a golden 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)file. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import difflib 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import inspect 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import jni_generator 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from jni_generator import CalledByNative, JniParams, NativeMethod, Param 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)SCRIPT_NAME = 'base/android/jni_generator/jni_generator.py' 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)INCLUDES = ( 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'base/android/jni_generator/jni_generator_helper.h' 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)) 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)# Set this environment variable in order to regenerate the golden text 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)# files. 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)REBASELINE_ENV = 'REBASELINE' 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class TestOptions(object): 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) """The mock options object which is passed to the jni_generator.py script.""" 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) def __init__(self): 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self.namespace = None 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self.script_name = SCRIPT_NAME 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.includes = INCLUDES 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.pure_native_methods = False 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.ptr_type = 'long' 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.jni_init_native_name = None 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.eager_called_by_natives = False 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.cpp = 'cpp' 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.javap = 'javap' 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestGenerator(unittest.TestCase): 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def assertObjEquals(self, first, second): 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict_first = first.__dict__ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict_second = second.__dict__ 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(dict_first.keys(), dict_second.keys()) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for key, value in dict_first.iteritems(): 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type(value) is list and len(value) and 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isinstance(type(value[0]), object)): 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertListEquals(value, second.__getattribute__(key)) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual = second.__getattribute__(key) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(value, actual, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Key ' + key + ': ' + str(value) + '!=' + str(actual)) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def assertListEquals(self, first, second): 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(len(first), len(second)) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for i in xrange(len(first)): 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if isinstance(first[i], object): 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertObjEquals(first[i], second[i]) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(first[i], second[i]) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def assertTextEquals(self, golden_text, generated_text): 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if not self.compareText(golden_text, generated_text): 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.fail('Golden text mismatch.') 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def compareText(self, golden_text, generated_text): 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def FilterText(text): 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return [ 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) l.strip() for l in text.split('\n') 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if not l.startswith('// Copyright') 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ] 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) stripped_golden = FilterText(golden_text) 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) stripped_generated = FilterText(generated_text) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if stripped_golden == stripped_generated: 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return True 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) print self.id() 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for line in difflib.context_diff(stripped_golden, stripped_generated): 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) print line 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) print '\n\nGenerated' 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) print '=' * 80 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) print generated_text 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) print '=' * 80 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) print 'Run with:' 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) print 'REBASELINE=1', sys.argv[0] 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) print 'to regenerate the data files.' 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def _ReadGoldenFile(self, golden_file): 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if not os.path.exists(golden_file): 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return None 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) with file(golden_file, 'r') as f: 98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return f.read() 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def assertGoldenTextEquals(self, generated_text): 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) script_dir = os.path.dirname(sys.argv[0]) 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) # This is the caller test method. 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) caller = inspect.stack()[1][3] 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertTrue(caller.startswith('test'), 105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'assertGoldenTextEquals can only be called from a ' 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'test* method, not %s' % caller) 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) golden_file = os.path.join(script_dir, caller + '.golden') 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) golden_text = self._ReadGoldenFile(golden_file) 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if os.environ.get(REBASELINE_ENV): 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if golden_text != generated_text: 111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) with file(golden_file, 'w') as f: 112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) f.write(generated_text) 113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return 114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertTextEquals(golden_text, generated_text) 115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testInspectCaller(self): 117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def willRaise(): 118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) # This function can only be called from a test* method. 119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals('') 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertRaises(AssertionError, willRaise) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testNatives(self): 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data = """" 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interface OnFrameAvailableListener {} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native int nativeInit(); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native void nativeDestroy(int nativeChromeBrowserProvider); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native long nativeAddBookmark( 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nativeChromeBrowserProvider, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String url, String title, boolean isFolder, long parentId); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static native String nativeGetDomainAndRegistry(String url); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static native void nativeCreateHistoricalTabFromState( 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) byte[] state, int tab_index); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native byte[] nativeGetStateAsByteArray(View view); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static native String[] nativeGetAutofillProfileGUIDs(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native void nativeSetRecognitionResults( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sessionId, String[] results); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native long nativeAddBookmarkFromAPI( 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nativeChromeBrowserProvider, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String url, Long created, Boolean isBookmark, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Long date, byte[] favicon, String title, Integer visits); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native int nativeFindAll(String find); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static native OnFrameAvailableListener nativeGetInnerClass(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native Bitmap nativeQueryBitmap( 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nativeChromeBrowserProvider, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String[] projection, String selection, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String[] selectionArgs, String sortOrder); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native void nativeGotOrientation( 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nativeDataFetcherImplAndroid, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double alpha, double beta, double gamma); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) jni_generator.JniParams.SetFullyQualifiedClass( 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 'org/chromium/example/jni_generator/SampleForTests') 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JniParams.ExtractImportsAndInnerClasses(test_data) 1540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) natives = jni_generator.ExtractNatives(test_data, 'int') 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) golden_natives = [ 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='int', static=False, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='Init', 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[], 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='void', static=False, name='Destroy', 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='int', 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='nativeChromeBrowserProvider')], 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='method', 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p0_type='ChromeBrowserProvider'), 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='long', static=False, name='AddBookmark', 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='int', 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='nativeChromeBrowserProvider'), 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='url'), 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='title'), 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='boolean', 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='isFolder'), 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='long', 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='parentId')], 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='method', 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p0_type='ChromeBrowserProvider'), 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='String', static=True, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='GetDomainAndRegistry', 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='String', 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='url')], 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='void', static=True, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='CreateHistoricalTabFromState', 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='byte[]', 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='state'), 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='int', 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='tab_index')], 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='byte[]', static=False, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='GetStateAsByteArray', 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='View', name='view')], 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='String[]', static=True, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='GetAutofillProfileGUIDs', params=[], 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='void', static=False, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='SetRecognitionResults', 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='int', name='sessionId'), 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String[]', name='results')], 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='long', static=False, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='AddBookmarkFromAPI', 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='int', 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='nativeChromeBrowserProvider'), 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='url'), 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='Long', 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='created'), 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='Boolean', 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='isBookmark'), 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='Long', 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='date'), 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='byte[]', 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='favicon'), 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='title'), 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='Integer', 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='visits')], 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='method', 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p0_type='ChromeBrowserProvider'), 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='int', static=False, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='FindAll', 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='String', 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='find')], 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='OnFrameAvailableListener', static=True, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='GetInnerClass', 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[], 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='Bitmap', 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static=False, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='QueryBitmap', 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='int', 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='nativeChromeBrowserProvider'), 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String[]', 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='projection'), 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='selection'), 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String[]', 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='selectionArgs'), 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='sortOrder'), 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ], 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='method', 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p0_type='ChromeBrowserProvider'), 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='void', static=False, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='GotOrientation', 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='int', 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='nativeDataFetcherImplAndroid'), 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='double', 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='alpha'), 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='double', 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='beta'), 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='double', 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='gamma'), 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ], 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='method', 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p0_type='content::DataFetcherImplAndroid'), 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ] 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertListEquals(golden_natives, natives) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', 276a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) natives, [], [], TestOptions()) 277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals(h.GetContent()) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testInnerClassNatives(self): 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data = """ 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class MyInnerClass { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @NativeCall("MyInnerClass") 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native int nativeInit(); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) natives = jni_generator.ExtractNatives(test_data, 'int') 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) golden_natives = [ 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='int', static=False, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='Init', params=[], 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='MyInnerClass', 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function') 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ] 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertListEquals(golden_natives, natives) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', 295a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) natives, [], [], TestOptions()) 296a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals(h.GetContent()) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testInnerClassNativesMultiple(self): 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data = """ 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class MyInnerClass { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @NativeCall("MyInnerClass") 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native int nativeInit(); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class MyOtherInnerClass { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @NativeCall("MyOtherInnerClass") 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native int nativeInit(); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 3090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) natives = jni_generator.ExtractNatives(test_data, 'int') 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) golden_natives = [ 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='int', static=False, 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='Init', params=[], 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='MyInnerClass', 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='int', static=False, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='Init', params=[], 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='MyOtherInnerClass', 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function') 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ] 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertListEquals(golden_natives, natives) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', 322a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) natives, [], [], TestOptions()) 323a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals(h.GetContent()) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testInnerClassNativesBothInnerAndOuter(self): 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data = """ 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class MyOuterClass { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native int nativeInit(); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class MyOtherInnerClass { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @NativeCall("MyOtherInnerClass") 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native int nativeInit(); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 3350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) natives = jni_generator.ExtractNatives(test_data, 'int') 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) golden_natives = [ 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='int', static=False, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='Init', params=[], 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name=None, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function'), 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeMethod(return_type='int', static=False, 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='Init', params=[], 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='MyOtherInnerClass', 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type='function') 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ] 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertListEquals(golden_natives, natives) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', 348a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) natives, [], [], TestOptions()) 349a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals(h.GetContent()) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testCalledByNatives(self): 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data = """" 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import android.graphics.Bitmap; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import android.view.View; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import java.io.InputStream; 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) import java.util.List; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class InnerClass {} 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNative 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InnerClass showConfirmInfoBar(int nativeInfoBar, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String buttonOk, String buttonCancel, String title, Bitmap icon) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InfoBar infobar = new ConfirmInfoBar(nativeInfoBar, mContext, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buttonOk, buttonCancel, 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title, icon); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return infobar; 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNative 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InnerClass showAutoLoginInfoBar(int nativeInfoBar, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String realm, String account, String args) { 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutoLoginInfoBar infobar = new AutoLoginInfoBar(nativeInfoBar, mContext, 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) realm, account, args); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (infobar.displayedAccountCount() == 0) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) infobar = null; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return infobar; 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNative("InfoBar") 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void dismiss(); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SuppressWarnings("unused") 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNative 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static boolean shouldShowAutoLogin(View view, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String realm, String account, String args) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccountManagerContainer accountManagerContainer = 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AccountManagerContainer((Activity)contentView.getContext(), 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) realm, account, args); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String[] logins = accountManagerContainer.getAccountLogins(null); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return logins.length != 0; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNative 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static InputStream openUrl(String url) { 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return null; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNative 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void activateHardwareAcceleration(final boolean activated, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final int iPid, final int iType, 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final int iPrimaryID, final int iSecondaryID) { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!activated) { 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNativeUnchecked 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void uncheckedCall(int iParam); 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public byte[] returnByteArray(); 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public boolean[] returnBooleanArray(); 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public char[] returnCharArray(); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public short[] returnShortArray(); 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public int[] returnIntArray(); 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public long[] returnLongArray(); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public double[] returnDoubleArray(); 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public Object[] returnObjectArray(); 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public byte[][] returnArrayOfByteArray(); 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public Bitmap.CompressFormat getCompressFormat(); 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @CalledByNative 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public List<Bitmap.CompressFormat> getCompressFormatList(); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JniParams.SetFullyQualifiedClass('org/chromium/Foo') 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JniParams.ExtractImportsAndInnerClasses(test_data) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) called_by_natives = jni_generator.ExtractCalledByNatives(test_data) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) golden_called_by_natives = [ 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalledByNative( 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return_type='InnerClass', 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_class=False, 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static=False, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='showConfirmInfoBar', 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_id_var_name='showConfirmInfoBar', 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='', 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='int', name='nativeInfoBar'), 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', name='buttonOk'), 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', name='buttonCancel'), 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', name='title'), 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='Bitmap', name='icon')], 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env_call=('Object', ''), 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unchecked=False, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ), 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalledByNative( 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return_type='InnerClass', 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_class=False, 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static=False, 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='showAutoLoginInfoBar', 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_id_var_name='showAutoLoginInfoBar', 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='', 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='int', name='nativeInfoBar'), 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', name='realm'), 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', name='account'), 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', name='args')], 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env_call=('Object', ''), 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unchecked=False, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ), 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalledByNative( 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return_type='void', 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_class=False, 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static=False, 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='dismiss', 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_id_var_name='dismiss', 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='InfoBar', 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[], 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env_call=('Void', ''), 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unchecked=False, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ), 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalledByNative( 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return_type='boolean', 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_class=False, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static=True, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='shouldShowAutoLogin', 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_id_var_name='shouldShowAutoLogin', 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='', 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='View', name='view'), 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', name='realm'), 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', name='account'), 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='String', name='args')], 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env_call=('Boolean', ''), 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unchecked=False, 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ), 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalledByNative( 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return_type='InputStream', 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_class=False, 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static=True, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='openUrl', 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_id_var_name='openUrl', 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='', 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='String', name='url')], 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env_call=('Object', ''), 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unchecked=False, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ), 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalledByNative( 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return_type='void', 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_class=False, 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static=False, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='activateHardwareAcceleration', 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_id_var_name='activateHardwareAcceleration', 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='', 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='boolean', name='activated'), 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='int', name='iPid'), 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='int', name='iType'), 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='int', name='iPrimaryID'), 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(datatype='int', name='iSecondaryID'), 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ], 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env_call=('Void', ''), 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unchecked=False, 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ), 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalledByNative( 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return_type='void', 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_class=False, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static=False, 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name='uncheckedCall', 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_id_var_name='uncheckedCall', 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_class_name='', 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params=[Param(datatype='int', name='iParam')], 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env_call=('Void', ''), 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unchecked=True, 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ), 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='byte[]', 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='returnByteArray', 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='returnByteArray', 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='boolean[]', 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='returnBooleanArray', 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='returnBooleanArray', 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='char[]', 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='returnCharArray', 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='returnCharArray', 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='short[]', 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='returnShortArray', 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='returnShortArray', 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='int[]', 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='returnIntArray', 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='returnIntArray', 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='long[]', 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='returnLongArray', 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='returnLongArray', 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='double[]', 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='returnDoubleArray', 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='returnDoubleArray', 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='Object[]', 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='returnObjectArray', 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='returnObjectArray', 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='byte[][]', 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='returnArrayOfByteArray', 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='returnArrayOfByteArray', 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CalledByNative( 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return_type='Bitmap.CompressFormat', 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system_class=False, 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static=False, 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name='getCompressFormat', 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) method_id_var_name='getCompressFormat', 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_class_name='', 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params=[], 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env_call=('Void', ''), 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unchecked=False, 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ), 643c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CalledByNative( 644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return_type='List<Bitmap.CompressFormat>', 645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) system_class=False, 646c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static=False, 647c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) name='getCompressFormatList', 648c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) method_id_var_name='getCompressFormatList', 649c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) java_class_name='', 650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params=[], 651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env_call=('Void', ''), 652c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unchecked=False, 653c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ), 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ] 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertListEquals(golden_called_by_natives, called_by_natives) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', 657a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) [], called_by_natives, [], 6584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestOptions()) 659a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals(h.GetContent()) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testCalledByNativeParseError(self): 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.ExtractCalledByNatives(""" 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@CalledByNative 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public static int foo(); // This one is fine 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@CalledByNative 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scooby doo 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""") 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.fail('Expected a ParseError') 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except jni_generator.ParseError, e: 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(('@CalledByNative', 'scooby doo'), e.context_lines) 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testFullyQualifiedClassName(self): 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents = """ 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2010 The Chromium Authors. All rights reserved. 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.content.browser; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.BuildInfo; 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals('org/chromium/content/browser/Foo', 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.ExtractFullyQualifiedJavaClassName( 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'org/chromium/content/browser/Foo.java', contents)) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals('org/chromium/content/browser/Foo', 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.ExtractFullyQualifiedJavaClassName( 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'frameworks/Foo.java', contents)) 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(SyntaxError, 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.ExtractFullyQualifiedJavaClassName, 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'com/foo/Bar', 'no PACKAGE line') 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMethodNameMangling(self): 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals('closeV', 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.GetMangledMethodName('close', [], 'void')) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals('readI_AB_I_I', 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.GetMangledMethodName('read', 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [Param(name='p1', 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) datatype='byte[]'), 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(name='p2', 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) datatype='int'), 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Param(name='p3', 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) datatype='int'),], 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'int')) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals('openJIIS_JLS', 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.GetMangledMethodName('open', 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [Param(name='p1', 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) datatype='java/lang/String'),], 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'java/io/InputStream')) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) def testFromJavaPGenerics(self): 71358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) contents = """ 71458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)public abstract class java.util.HashSet<T> extends java.util.AbstractSet<E> 71558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) implements java.util.Set<E>, java.lang.Cloneable, java.io.Serializable { 71658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public void dummy(); 7171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Signature: ()V 71858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 71958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)""" 7204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'), 7214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestOptions()) 72258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) self.assertEquals(1, len(jni_from_javap.called_by_natives)) 723a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals(jni_from_javap.GetContent()) 72458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) def testSnippnetJavap6_7(self): 7261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content_javap6 = """ 7271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)public class java.util.HashSet { 7281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)public boolean add(java.lang.Object); 7291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Signature: (Ljava/lang/Object;)Z 7301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 7311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)""" 7321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content_javap7 = """ 7341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)public class java.util.HashSet { 7351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)public boolean add(E); 7361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Signature: (Ljava/lang/Object;)Z 7371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 7381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)""" 7391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) jni_from_javap6 = jni_generator.JNIFromJavaP(content_javap6.split('\n'), 7401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestOptions()) 7411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) jni_from_javap7 = jni_generator.JNIFromJavaP(content_javap7.split('\n'), 7421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestOptions()) 7431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) self.assertTrue(jni_from_javap6.GetContent()) 7441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) self.assertTrue(jni_from_javap7.GetContent()) 7451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) # Ensure the javap7 is correctly parsed and uses the Signature field rather 7461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) # than the "E" parameter. 7471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) self.assertTextEquals(jni_from_javap6.GetContent(), 7481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) jni_from_javap7.GetContent()) 7491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testFromJavaP(self): 751a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) contents = self._ReadGoldenFile(os.path.join(os.path.dirname(sys.argv[0]), 752a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 'testInputStream.javap')) 7534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'), 7544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestOptions()) 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(10, len(jni_from_javap.called_by_natives)) 756a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals(jni_from_javap.GetContent()) 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 758a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def testConstantsFromJavaP(self): 759a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for f in ['testMotionEvent.javap', 'testMotionEvent.javap7']: 760a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) contents = self._ReadGoldenFile(os.path.join(os.path.dirname(sys.argv[0]), 761a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) f)) 762a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'), 763a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TestOptions()) 764a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self.assertEquals(86, len(jni_from_javap.called_by_natives)) 765a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self.assertGoldenTextEquals(jni_from_javap.GetContent()) 766a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testREForNatives(self): 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # We should not match "native SyncSetupFlow" inside the comment. 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data = """ 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Invoked when the setup process is complete so we can disconnect from the 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * native-side SyncSetupFlowHandler. 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void destroy() { 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Log.v(TAG, "Destroying native SyncSetupFlow"); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (mNativeSyncSetupFlow != 0) { 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nativeSyncSetupEnded(mNativeSyncSetupFlow); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mNativeSyncSetupFlow = 0; 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private native void nativeSyncSetupEnded( 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nativeAndroidSyncSetupFlowHandler); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 7844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) jni_from_java = jni_generator.JNIFromJavaSource( 7854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_data, 'foo/bar', TestOptions()) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testRaisesOnNonJNIMethod(self): 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data = """ 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class MyInnerClass { 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private int Foo(int p0) { 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(SyntaxError, 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JNIFromJavaSource, 7964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_data, 'foo/bar', TestOptions()) 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testJniSelfDocumentingExample(self): 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) script_dir = os.path.dirname(sys.argv[0]) 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content = file(os.path.join(script_dir, 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'java/src/org/chromium/example/jni_generator/SampleForTests.java') 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ).read() 8035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) golden_file = os.path.join(script_dir, 'golden_sample_for_tests_jni.h') 8045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) golden_content = file(golden_file).read() 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_from_java = jni_generator.JNIFromJavaSource( 8064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content, 'org/chromium/example/jni_generator/SampleForTests', 8074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestOptions()) 8085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generated_text = jni_from_java.GetContent() 8095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if not self.compareText(golden_content, generated_text): 8105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if os.environ.get(REBASELINE_ENV): 8115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) with file(golden_file, 'w') as f: 8125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) f.write(generated_text) 8135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return 8145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.fail('testJniSelfDocumentingExample') 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testNoWrappingPreprocessorLines(self): 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data = """ 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) package com.google.lookhowextremelylongiam.snarf.icankeepthisupallday; 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class ReallyLongClassNamesAreAllTheRage { 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static native int nativeTest(); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_from_java = jni_generator.JNIFromJavaSource( 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data, ('com/google/lookhowextremelylongiam/snarf/' 8264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'icankeepthisupallday/ReallyLongClassNamesAreAllTheRage'), 8274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestOptions()) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_lines = jni_from_java.GetContent().split('\n') 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line = filter(lambda line: line.lstrip().startswith('#ifndef'), 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_lines)[0] 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(len(line) > 80, 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ('Expected #ifndef line to be > 80 chars: ', line)) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 834868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) def testJarJarRemapping(self): 835868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) test_data = """ 836868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) package org.chromium.example.jni_generator; 837868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 838868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) import org.chromium.example2.Test; 839868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 840868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) class Example { 841868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private static native void nativeTest(Test t); 842868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 843868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) """ 844868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) jni_generator.JniParams.SetJarJarMappings( 845868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) """rule org.chromium.example.** com.test.@1 846868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) rule org.chromium.example2.** org.test2.@0""") 847868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) jni_from_java = jni_generator.JNIFromJavaSource( 8484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_data, 'org/chromium/example/jni_generator/Example', TestOptions()) 849868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) jni_generator.JniParams.SetJarJarMappings('') 850a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals(jni_from_java.GetContent()) 851868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testImports(self): 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import_header = """ 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.content.app; 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.app.Service; 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Context; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Intent; 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.graphics.SurfaceTexture; 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Bundle; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.IBinder; 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.ParcelFileDescriptor; 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Process; 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.RemoteException; 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.util.Log; 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.Surface; 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.ArrayList; 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.CalledByNative; 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.JNINamespace; 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.app.ContentMain; 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.SandboxedProcessConnection; 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.common.ISandboxedProcessCallback; 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.common.ISandboxedProcessService; 8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content.common.WillNotRaise.AnException; 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content.common.WillRaise.AnException; 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import static org.chromium.Bar.Zoo; 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Foo { 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static class BookmarkNode implements Parcelable { 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public interface PasswordListObserver { 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JniParams.SetFullyQualifiedClass( 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'org/chromium/content/app/Foo') 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JniParams.ExtractImportsAndInnerClasses(import_header) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue('Lorg/chromium/content/common/ISandboxedProcessService' in 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JniParams._imports) 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue('Lorg/chromium/Bar/Zoo' in 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JniParams._imports) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue('Lorg/chromium/content/app/Foo$BookmarkNode' in 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JniParams._inner_classes) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue('Lorg/chromium/content/app/Foo$PasswordListObserver' in 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jni_generator.JniParams._inner_classes) 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.assertEquals('Lorg/chromium/content/app/ContentMain$Inner;', 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jni_generator.JniParams.JavaToJni('ContentMain.Inner')) 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.assertRaises(SyntaxError, 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jni_generator.JniParams.JavaToJni, 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'AnException') 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testJniParamsJavaToJni(self): 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.assertTextEquals('I', JniParams.JavaToJni('int')) 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.assertTextEquals('[B', JniParams.JavaToJni('byte[]')) 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.assertTextEquals( 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) '[Ljava/nio/ByteBuffer;', JniParams.JavaToJni('java/nio/ByteBuffer[]')) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) def testNativesLong(self): 9160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) test_options = TestOptions() 9170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) test_options.ptr_type = 'long' 9180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) test_data = """" 9190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private native void nativeDestroy(long nativeChromeBrowserProvider); 9200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) """ 9210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) jni_generator.JniParams.ExtractImportsAndInnerClasses(test_data) 9220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) natives = jni_generator.ExtractNatives(test_data, test_options.ptr_type) 9230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) golden_natives = [ 9240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) NativeMethod(return_type='void', static=False, name='Destroy', 9250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) params=[Param(datatype='long', 9260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) name='nativeChromeBrowserProvider')], 9270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) java_class_name=None, 9280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) type='method', 9290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) p0_type='ChromeBrowserProvider', 9300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ptr_type=test_options.ptr_type), 9310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ] 9320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) self.assertListEquals(golden_natives, natives) 9330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', 934a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) natives, [], [], test_options) 935a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertGoldenTextEquals(h.GetContent()) 9360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 9375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def testPureNativeMethodsOption(self): 9385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_data = """ 9395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) package org.chromium.example.jni_generator; 9405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** The pointer to the native Test. */ 9425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) long nativeTest; 9435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) class Test { 9455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private static native long nativeMethod(long nativeTest, int arg1); 9465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 9475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) """ 9485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options = TestOptions() 9495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.pure_native_methods = True 9505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) jni_from_java = jni_generator.JNIFromJavaSource( 9515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_data, 'org/chromium/example/jni_generator/Test', options) 9525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.assertGoldenTextEquals(jni_from_java.GetContent()) 9535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def testJNIInitNativeNameOption(self): 9555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_data = """ 9565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) package org.chromium.example.jni_generator; 9575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** The pointer to the native Test. */ 9595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) long nativeTest; 9605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) class Test { 9625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private static native boolean nativeInitNativeClass(); 9635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private static native int nativeMethod(long nativeTest, int arg1); 9645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 9655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) """ 9665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options = TestOptions() 9675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.jni_init_native_name = 'nativeInitNativeClass' 9685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) jni_from_java = jni_generator.JNIFromJavaSource( 9695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_data, 'org/chromium/example/jni_generator/Test', options) 9705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.assertGoldenTextEquals(jni_from_java.GetContent()) 9715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def testEagerCalledByNativesOption(self): 9735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_data = """ 9745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) package org.chromium.example.jni_generator; 9755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** The pointer to the native Test. */ 9775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) long nativeTest; 9785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) class Test { 9805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private static native boolean nativeInitNativeClass(); 9815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private static native int nativeMethod(long nativeTest, int arg1); 9825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) @CalledByNative 9835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private void testMethodWithParam(int iParam); 9845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) @CalledByNative 9855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private static int testStaticMethodWithParam(int iParam); 9865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) @CalledByNative 9875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private static double testMethodWithNoParam(); 9885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) @CalledByNative 9895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private static String testStaticMethodWithNoParam(); 9905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 9915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) """ 9925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options = TestOptions() 9935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.jni_init_native_name = 'nativeInitNativeClass' 9945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.eager_called_by_natives = True 9955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) jni_from_java = jni_generator.JNIFromJavaSource( 9965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_data, 'org/chromium/example/jni_generator/Test', options) 9975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.assertGoldenTextEquals(jni_from_java.GetContent()) 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 999effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch def testOuterInnerRaises(self): 1000effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_data = """ 1001effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch package org.chromium.media; 1002effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1003effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch @CalledByNative 1004effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static int getCaptureFormatWidth(VideoCapture.CaptureFormat format) { 1005effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return format.getWidth(); 1006effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1007effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch """ 1008effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch def willRaise(): 1009effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch jni_generator.JNIFromJavaSource( 1010effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_data, 1011effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 'org/chromium/media/VideoCaptureFactory', 1012effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TestOptions()) 1013effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch self.assertRaises(SyntaxError, willRaise) 1014effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1015010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def testImplicitImport(self): 1016010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test_data = """ 1017010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) package org.chromium.android_webview; 1018010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1019010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) %(IMPORT)s 1020010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1021010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) @CalledByNative 1022010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private static void clientCertificatesCleared(Runnable callback) { 1023010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (callbaback == null) return; 1024010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) callback.run(); 1025010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 1026010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) """ 1027010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def generate(import_clause): 1028010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) jni_generator.JNIFromJavaSource( 1029010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test_data % {'IMPORT': import_clause}, 1030010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 'org/chromium/android_webview/AwContentStatics', 1031010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TestOptions()) 1032010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) # Ensure it raises without the import. 1033010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) self.assertRaises(SyntaxError, lambda: generate('')) 1034010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1035010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) # Ensure it's fine with the import. 1036010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) generate('import java.lang.Runnable;') 1037010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1038cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) def testSingleJNIAdditionalImport(self): 1039cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_data = """ 1040cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) package org.chromium.foo; 1041cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1042cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) @JNIAdditionalImport(Bar.class) 1043cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) class Foo { 1044cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1045cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) @CalledByNative 1046cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private static void calledByNative(Bar.Callback callback) { 1047cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1048cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1049cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private static native void nativeDoSomething(Bar.Callback callback); 1050cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1051cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) """ 1052cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) jni_from_java = jni_generator.JNIFromJavaSource(test_data, 1053cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 'org/chromium/foo/Foo', 1054cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestOptions()) 1055cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.assertGoldenTextEquals(jni_from_java.GetContent()) 1056cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1057cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) def testMultipleJNIAdditionalImport(self): 1058cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_data = """ 1059cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) package org.chromium.foo; 1060cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1061cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) @JNIAdditionalImport({Bar1.class, Bar2.class}) 1062cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) class Foo { 1063cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1064cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) @CalledByNative 1065cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private static void calledByNative(Bar1.Callback callback1, 1066cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Bar2.Callback callback2) { 1067cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1068cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1069cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private static native void nativeDoSomething(Bar1.Callback callback1, 1070cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Bar2.Callback callback2); 1071cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1072cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) """ 1073cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) jni_from_java = jni_generator.JNIFromJavaSource(test_data, 1074cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 'org/chromium/foo/Foo', 1075cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestOptions()) 1076cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.assertGoldenTextEquals(jni_from_java.GetContent()) 1077cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1078effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unittest.main() 1081