always open Android source files as UTF-8

Android Studio recommends "you use UTF-8 encoding whenever possible",
so this code assumes the files use UTF-8.  UTF-8 is also the default
encoding on GNU/Linux and macOS.
https://sites.google.com/a/android.com/tools/knownissues/encoding

Windows will probably default to UTF16, since that's the native
encoding for files.  So forcing things to use UTF-8 should help
compatibility.
This commit is contained in:
Hans-Christoph Steiner 2021-06-14 15:38:37 +02:00
parent 0c31c4a5ab
commit 48c4354629
No known key found for this signature in database
GPG key ID: 3E177817BA1B9BFA
5 changed files with 26 additions and 20 deletions

View file

@ -339,12 +339,12 @@ class BuildTest(unittest.TestCase):
os.mkdir('build')
os.mkdir('build/reports')
with open('build.gradle', 'w') as fp:
with open('build.gradle', 'w', encoding='utf-8') as fp:
fp.write('// placeholder')
os.mkdir('bin')
os.mkdir('gen')
with open('build.xml', 'w') as fp:
with open('build.xml', 'w', encoding='utf-8') as fp:
fp.write(
textwrap.dedent(
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>

View file

@ -315,14 +315,15 @@ class CommonTest(unittest.TestCase):
fdroidserver.common.prepare_source(FakeVcs(), app, build,
fdroidclient_testdir, fdroidclient_testdir, fdroidclient_testdir)
with open(os.path.join(fdroidclient_testdir, 'build.gradle'), 'r') as f:
filedata = f.read()
fdroidclient_testdir = Path(fdroidclient_testdir)
build_gradle = fdroidclient_testdir / 'build.gradle'
filedata = build_gradle.read_text(encoding='utf-8')
self.assertIsNotNone(
re.search(r"\s+compileSdkVersion %s\s+" % testint, filedata)
)
with open(os.path.join(fdroidclient_testdir, 'AndroidManifest.xml')) as f:
filedata = f.read()
androidmanifest_xml = fdroidclient_testdir / 'AndroidManifest.xml'
filedata = androidmanifest_xml.read_text(encoding='utf-8')
self.assertIsNone(re.search('android:debuggable', filedata))
self.assertIsNotNone(
re.search('android:versionName="%s"' % build.versionName, filedata)
@ -342,10 +343,10 @@ class CommonTest(unittest.TestCase):
)
subdir = 'baz/bar'
subdir_path = os.path.join(app_build_dir, subdir)
os.makedirs(subdir_path)
with open(os.path.join(subdir_path, 'build.gradle'), 'w') as fp:
fp.write('// just a test placeholder')
subdir_path = Path(app_build_dir) / subdir
subdir_path.mkdir(parents=True, exist_ok=True)
build_gradle = subdir_path / 'build.gradle'
build_gradle.write_text('// just a test placeholder', encoding='utf-8')
config = dict()
fdroidserver.common.fill_config_defaults(config)
@ -921,7 +922,7 @@ class CommonTest(unittest.TestCase):
self.assertNotEqual(0, len(files))
for f in files:
appid, versionCode = os.path.splitext(os.path.basename(f))[0][12:].split('_')
with open(f) as fp:
with open(f, encoding='utf-8') as fp:
m = fdroidserver.common.APK_ID_TRIPLET_REGEX.match(fp.read())
if m:
self.assertEqual(appid, m.group(1))
@ -962,6 +963,7 @@ class CommonTest(unittest.TestCase):
def test_get_sdkversions_androguard(self):
"""This is a sanity test that androguard isn't broken"""
def get_minSdkVersion(apkfile):
apk = fdroidserver.common._get_androguard_APK(apkfile)
return fdroidserver.common.get_min_sdk_version(apk)
@ -1852,9 +1854,9 @@ class CommonTest(unittest.TestCase):
self.assertEqual([],
data['fdroiddata']['untrackedFiles'])
dirtyfile = 'dirtyfile'
with open(dirtyfile, 'w') as fp:
with open(dirtyfile, 'w', encoding='utf-8') as fp:
fp.write('this is just a test')
with open(file_in_git, 'a') as fp:
with open(file_in_git, 'a', encoding='utf-8') as fp:
fp.write('\nappend some stuff')
self.assertEqual([],
data['fdroiddata']['modifiedFiles'])

View file

@ -76,7 +76,7 @@ class ScannerTest(unittest.TestCase):
build = fdroidserver.metadata.Build()
build.gradle = [flavor]
regexs = fdroidserver.scanner.get_gradle_compile_commands(build)
with open(f) as fp:
with open(f, encoding='utf-8') as fp:
for line in fp.readlines():
for regex in regexs:
m = regex.match(line)
@ -93,7 +93,7 @@ class ScannerTest(unittest.TestCase):
fdroidserver.scanner.config = None
fdroidserver.scanner.options = mock.Mock()
fdroidserver.scanner.options.json = True
with open('build.gradle', 'w') as fp:
with open('build.gradle', 'w', encoding='utf-8') as fp:
fp.write(
textwrap.dedent(
"""
@ -233,7 +233,7 @@ class ScannerTest(unittest.TestCase):
fp.write('placeholder')
self.assertTrue(os.path.exists(f))
with open('build.xml', 'w') as fp:
with open('build.xml', 'w', encoding='utf-8') as fp:
fp.write(
textwrap.dedent(
"""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
@ -288,7 +288,7 @@ class ScannerTest(unittest.TestCase):
fdroidserver.scanner.options = mock.Mock()
build = fdroidserver.metadata.Build()
build.scandelete = ['build.gradle']
with open('build.gradle', 'w') as fp:
with open('build.gradle', 'w', encoding='utf-8') as fp:
fp.write(
textwrap.dedent(
"""