arch_list.append('arm')
return arch_list
- def checkApks(self, apk_name, app_version):
- # Check whether some files are contained in the given APK.
+ def checkApks(self, apk_name, app_version, keystore_path=None):
+ apks = []
if self._mode.find('shared') != -1:
apk_path = '%s_%s.apk' % (apk_name, app_version)
- self.checkApk(apk_path, '')
+ apks.append((apk_path, ''))
elif self._mode.find('embedded') != -1:
x86_apk_path = '%s_%s_x86.apk' % (apk_name, app_version)
if os.path.exists(x86_apk_path):
- self.checkApk(x86_apk_path, 'x86')
+ apks.append((x86_apk_path, 'x86'))
arm_apk_path = '%s_%s_arm.apk' % (apk_name, app_version)
if os.path.exists(arm_apk_path):
- self.checkApk(arm_apk_path, 'arm')
+ apks.append((arm_apk_path, 'arm'))
- def checkApk(self, apk_path, arch):
- # Check whether some files are contained in the given apk
- # for specified arch.
+ for apk, apk_arch in apks:
+ self.checkApk(apk, apk_arch, keystore_path)
+
+ def checkApk(self, apk_path, arch, keystore_path=None):
+ """Checks whether some files are contained in the given APK,
+ and optionally verifies its signature."""
cmd = ['jar', 'tvf', apk_path]
out = RunCommand(cmd)
common_files = ['AndroidManifest.xml', 'classes.dex']
elif arch == 'arm':
self.assertTrue(out.find('armeabi-v7a/libxwalkcore.so') != -1)
+ if keystore_path:
+ cmd = ['jarsigner', '-verify', '-keystore', keystore_path,
+ '-verbose', apk_path]
+ out = RunCommand(cmd)
+ self.assertIn('smk', out)
+
def testName(self):
cmd = ['python', 'make_apk.py', '--app-version=1.0.0',
'--app-url=http://www.intel.com',
self.assertTrue(content.find('setRemoteDebugging') != -1)
self.checkApks('Example', '1.0.0')
+ def testUseAnimatableView(self):
+ cmd = ['python', 'make_apk.py', '--name=Example', '--app-version=1.0.0',
+ '--package=org.xwalk.example', '--app-url=http://www.intel.com',
+ '--use-animatable-view', self._mode]
+ RunCommand(cmd)
+ self.addCleanup(Clean, 'Example', '1.0.0')
+ activity = 'Example/src/org/xwalk/example/ExampleActivity.java'
+ with open(activity, 'r') as content_file:
+ content = content_file.read()
+ self.assertTrue(os.path.exists(activity))
+ self.assertTrue(content.find('setUseAnimatableView') != -1)
+ self.checkApks('Example', '1.0.0')
+ Clean('Example', '1.0.0')
+ manifest_path = os.path.join('test_data', 'manifest', 'manifest.json')
+ cmd = ['python', 'make_apk.py', '--use-animatable-view',
+ '--package=org.xwalk.example',
+ '--manifest=%s' % manifest_path, self._mode]
+ RunCommand(cmd)
+ activity = 'Example/src/org/xwalk/example/ExampleActivity.java'
+ with open(activity, 'r') as content_file:
+ content = content_file.read()
+ self.assertTrue(os.path.exists(activity))
+ self.assertTrue(content.find('setUseAnimatableView') != -1)
+ self.checkApks('Example', '1.0.0')
+
def testKeystore(self):
keystore_path = os.path.join('test_data', 'keystore',
'xwalk-test.keystore')
'--keystore-passcode=xwalk-test',
'--keystore-alias-passcode=xwalk-test', self._mode]
RunCommand(cmd)
- self.addCleanup(Clean, 'Example', '1.0.0')
- self.assertTrue(os.path.exists('Example'))
- apk_list = ['Example.apk', 'Example_x86.apk', 'Example_arm.apk']
- for apk in apk_list:
- if os.path.isfile(apk):
- cmd = ['jarsigner', '-verify', '-keystore',
- keystore_path, '-verbose', apk]
- out = RunCommand(cmd)
- self.assertTrue(out.find('smk') != -1)
- self.checkApks('Example', '1.0.0')
+ self.assertTrue(os.path.isdir('Example'))
+ self.checkApks('Example', '1.0.0', keystore_path)
+ Clean('Example', '1.0.0')
+
+ keystore_path_with_space = os.path.join(
+ 'test_data', 'keystore', 'test keystore')
+ shutil.copy2(keystore_path, keystore_path_with_space)
+ keystore_path = os.path.join('test_data', 'keystore',
+ 'xwalk-test.keystore')
+ cmd = ['python', 'make_apk.py', '--name=Example', '--app-version=1.0.0',
+ '--package=org.xwalk.example', '--app-url=http://www.intel.com',
+ '--keystore-path=%s' % keystore_path_with_space,
+ '--keystore-alias=xwalk test',
+ '--keystore-passcode=xwalk-test',
+ '--keystore-alias-passcode=xwalk test', self._mode]
+ RunCommand(cmd)
+ self.assertTrue(os.path.isdir('Example'))
+ self.checkApks('Example', '1.0.0', keystore_path_with_space)
+ Clean('Example', '1.0.0')
def testManifest(self):
manifest_path = os.path.join('test_data', 'manifest', 'manifest.json')
Clean(name, '1.0.0')
- def VerifyResultForAppName(self, app_name):
- android_manifest = 'Example/AndroidManifest.xml'
- self.assertTrue(os.path.exists(android_manifest))
- with open(android_manifest, 'r') as content_file:
+ def VerifyResultInXMLFile(self, xml_path, piece_content):
+ self.assertTrue(os.path.exists(xml_path))
+ with open(xml_path, 'r') as content_file:
content = content_file.read()
- label_name = 'android:label="%s"' % app_name
- self.assertIn(label_name, content)
+
+ self.assertIn(piece_content, content)
Clean('Example', '1.0.0')
- def testAppNameWithNonASCII (self):
+ def testAppNameWithNonASCII(self):
+ xml_path = 'Example/AndroidManifest.xml'
+ piece_content = 'android:label="%s"' % '你好'
cmd = ['python', 'make_apk.py', '--name=你好', '--app-version=1.0.0',
'--package=org.xwalk.example', '--app-url=http://www.intel.com']
RunCommand(cmd)
- self.VerifyResultForAppName('你好')
+ self.VerifyResultInXMLFile(xml_path, piece_content)
manifest_path = os.path.join('test_data', 'manifest', 'invalidchars',
'manifest_with_chinese_name.json')
cmd = ['python', 'make_apk.py', '--package=org.xwalk.example',
'--manifest=%s' % manifest_path]
RunCommand(cmd)
- self.VerifyResultForAppName('你好')
+ self.VerifyResultInXMLFile(xml_path, piece_content)
+
+
+ def testDescriptionWithDBCS(self):
+ xml_path = 'Example/res/values/strings.xml'
+ piece_content = '<string name="description">%s</string>' % '你好'
+ cmd = ['python', 'make_apk.py', '--name=hello', '--app-version=1.0.0',
+ '--package=org.xwalk.example', '--app-url=http://www.intel.com',
+ '--description=你好']
+ RunCommand(cmd)
+ self.VerifyResultInXMLFile(xml_path, piece_content)
+
+ manifest_path = os.path.join('test_data', 'manifest',
+ 'manifest_description_dbcs.json')
+ cmd = ['python', 'make_apk.py', '--package=org.xwalk.example',
+ '--manifest=%s' % manifest_path]
+ RunCommand(cmd)
+ piece_content = '"description">%s</string>' % '你好 a sample description'
+ self.VerifyResultInXMLFile(xml_path, piece_content)
def SuiteWithModeOption():
test_suite.addTest(TestMakeApk('testAppNameWithNonASCII'))
test_suite.addTest(TestMakeApk('testCompressor'))
test_suite.addTest(TestMakeApk('testCustomizeFile'))
+ test_suite.addTest(TestMakeApk('testDescriptionWithDBCS'))
test_suite.addTest(TestMakeApk('testEmptyMode'))
test_suite.addTest(TestMakeApk('testToolVersion'))
test_suite.addTest(TestMakeApk('testVerbose'))