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

Side by Side Diff: testing/android/generate_native_test.py

Issue 10383263: Add the target ABI option for apk based test runner (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 # On Android we build unit test bundles as shared libraries. To run 6 # On Android we build unit test bundles as shared libraries. To run
7 # tests, we launch a special "test runner" apk which loads the library 7 # tests, we launch a special "test runner" apk which loads the library
8 # then jumps into it. Since java is required for many tests 8 # then jumps into it. Since java is required for many tests
9 # (e.g. PathUtils.java), a "pure native" test bundle is inadequate. 9 # (e.g. PathUtils.java), a "pure native" test bundle is inadequate.
10 # 10 #
(...skipping 28 matching lines...) Expand all
39 ] 39 ]
40 40
41 # Files in the destion directory that have a "replaceme" string 41 # Files in the destion directory that have a "replaceme" string
42 # which should be replaced by the basename of the shared library. 42 # which should be replaced by the basename of the shared library.
43 # Note we also update the filename if 'replaceme' is itself found in 43 # Note we also update the filename if 'replaceme' is itself found in
44 # the filename. 44 # the filename.
45 _REPLACEME_FILES = ['AndroidManifest.xml', 45 _REPLACEME_FILES = ['AndroidManifest.xml',
46 'native_test_apk.xml', 46 'native_test_apk.xml',
47 'res/values/strings.xml'] 47 'res/values/strings.xml']
48 48
49 def __init__(self, native_library, jars, output_directory): 49 def __init__(self, native_library, jars, output_directory, target_abi):
50 self._native_library = native_library 50 self._native_library = native_library
51 self._jars = jars 51 self._jars = jars
52 self._output_directory = output_directory 52 self._output_directory = output_directory
53 self._target_abi = target_abi
53 self._root_name = None 54 self._root_name = None
54 if self._native_library: 55 if self._native_library:
55 self._root_name = self._LibraryRoot() 56 self._root_name = self._LibraryRoot()
56 logging.warn('root name: %s' % self._root_name) 57 logging.warn('root name: %s' % self._root_name)
57 58
58 59
59 def _LibraryRoot(self): 60 def _LibraryRoot(self):
60 """Return a root name for a shared library. 61 """Return a root name for a shared library.
61 62
62 The root name should be suitable for substitution in apk files 63 The root name should be suitable for substitution in apk files
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 for f in self._REPLACEME_FILES: 108 for f in self._REPLACEME_FILES:
108 dest = os.path.join(self._output_directory, f) 109 dest = os.path.join(self._output_directory, f)
109 contents = open(dest).read() 110 contents = open(dest).read()
110 contents = contents.replace('replaceme', self._root_name) 111 contents = contents.replace('replaceme', self._root_name)
111 dest = dest.replace('replaceme', self._root_name) # update the filename! 112 dest = dest.replace('replaceme', self._root_name) # update the filename!
112 open(dest, "w").write(contents) 113 open(dest, "w").write(contents)
113 114
114 def _CopyLibraryAndJars(self): 115 def _CopyLibraryAndJars(self):
115 """Copy the shlib and jars into the apk source tree (if relevant)""" 116 """Copy the shlib and jars into the apk source tree (if relevant)"""
116 if self._native_library: 117 if self._native_library:
117 destdir = os.path.join(self._output_directory, 'libs/armeabi') 118 destdir = os.path.join(self._output_directory, 'libs/' + self._target_abi)
118 if not os.path.exists(destdir): 119 if not os.path.exists(destdir):
119 os.makedirs(destdir) 120 os.makedirs(destdir)
120 dest = os.path.join(destdir, os.path.basename(self._native_library)) 121 dest = os.path.join(destdir, os.path.basename(self._native_library))
121 logging.warn('%s --> %s' % (self._native_library, dest)) 122 logging.warn('%s --> %s' % (self._native_library, dest))
122 shutil.copyfile(self._native_library, dest) 123 shutil.copyfile(self._native_library, dest)
123 if self._jars: 124 if self._jars:
124 destdir = os.path.join(self._output_directory, 'libs') 125 destdir = os.path.join(self._output_directory, 'libs')
125 if not os.path.exists(destdir): 126 if not os.path.exists(destdir):
126 os.makedirs(destdir) 127 os.makedirs(destdir)
127 for jar in self._jars: 128 for jar in self._jars:
(...skipping 30 matching lines...) Expand all
158 def main(argv): 159 def main(argv):
159 parser = optparse.OptionParser() 160 parser = optparse.OptionParser()
160 parser.add_option('--verbose', 161 parser.add_option('--verbose',
161 help='Be verbose') 162 help='Be verbose')
162 parser.add_option('--native_library', 163 parser.add_option('--native_library',
163 help='Full name of native shared library test bundle') 164 help='Full name of native shared library test bundle')
164 parser.add_option('--jar', action='append', 165 parser.add_option('--jar', action='append',
165 help='Include this jar; can be specified multiple times') 166 help='Include this jar; can be specified multiple times')
166 parser.add_option('--output', 167 parser.add_option('--output',
167 help='Output directory for generated files.') 168 help='Output directory for generated files.')
169 parser.add_option('--app_abi',
170 help='ABI for native shared library')
168 parser.add_option('--ant-compile', action='store_true', 171 parser.add_option('--ant-compile', action='store_true',
169 help='If specified, build the generated apk with ant') 172 help='If specified, build the generated apk with ant')
170 parser.add_option('--ant-args', 173 parser.add_option('--ant-args',
171 help='extra args for ant') 174 help='extra args for ant')
172 175
173 options, _ = parser.parse_args(argv) 176 options, _ = parser.parse_args(argv)
174 177
175 # It is not an error to specify no native library; the apk should 178 # It is not an error to specify no native library; the apk should
176 # still be generated and build. It will, however, print 179 # still be generated and build. It will, however, print
177 # NATIVE_LOADER_FAILED when run. 180 # NATIVE_LOADER_FAILED when run.
178 if not options.output: 181 if not options.output:
179 raise Exception('No output directory specified for generated files') 182 raise Exception('No output directory specified for generated files')
180 183
181 if options.verbose: 184 if options.verbose:
182 logging.basicConfig(level=logging.DEBUG, format=' %(message)s') 185 logging.basicConfig(level=logging.DEBUG, format=' %(message)s')
183 186
184 ntag = NativeTestApkGenerator(native_library=options.native_library, 187 ntag = NativeTestApkGenerator(native_library=options.native_library,
185 jars=options.jar, 188 jars=options.jar,
186 output_directory=options.output) 189 output_directory=options.output,
190 target_abi=options.app_abi)
187 ntag.CreateBundle() 191 ntag.CreateBundle()
188 if options.ant_compile: 192 if options.ant_compile:
189 ntag.Compile(options.ant_args) 193 ntag.Compile(options.ant_args)
190 194
191 logging.warn('COMPLETE.') 195 logging.warn('COMPLETE.')
192 196
193 if __name__ == '__main__': 197 if __name__ == '__main__':
194 sys.exit(main(sys.argv)) 198 sys.exit(main(sys.argv))
OLDNEW
« base/base.gyp ('K') | « ipc/ipc.gyp ('k') | ui/ui_unittests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698