diff --git a/MANIFEST.in b/MANIFEST.in
index 6fb0a57e..e534b0da 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -545,6 +545,22 @@ include tests/check-fdroid-apk
include tests/checkupdates.TestCase
include tests/common.TestCase
include tests/config.py
+include tests/config/antiFeatures.yml
+include tests/config/de/antiFeatures.yml
+include tests/config/fa/antiFeatures.yml
+include tests/config/ic_antifeature_ads.xml
+include tests/config/ic_antifeature_disabledalgorithm.xml
+include tests/config/ic_antifeature_knownvuln.xml
+include tests/config/ic_antifeature_nonfreeadd.xml
+include tests/config/ic_antifeature_nonfreeassets.xml
+include tests/config/ic_antifeature_nonfreedep.xml
+include tests/config/ic_antifeature_nonfreenet.xml
+include tests/config/ic_antifeature_nosourcesince.xml
+include tests/config/ic_antifeature_nsfw.xml
+include tests/config/ic_antifeature_tracking.xml
+include tests/config/ic_antifeature_upstreamnonfree.xml
+include tests/config/ro/antiFeatures.yml
+include tests/config/zh-rCN/antiFeatures.yml
include tests/corrupt-featureGraphic.png
include tests/deploy.TestCase
include tests/dummy-keystore.jks
diff --git a/tests/common.TestCase b/tests/common.TestCase
index 758b4881..8820004d 100755
--- a/tests/common.TestCase
+++ b/tests/common.TestCase
@@ -2667,6 +2667,38 @@ class CommonTest(unittest.TestCase):
config['smartcardoptions'],
)
+ def test_load_localized_config(self):
+ """It should load"""
+ antiFeatures = fdroidserver.common.load_localized_config('antiFeatures', 'repo')
+ self.assertEqual(
+ [
+ 'Ads',
+ 'DisabledAlgorithm',
+ 'KnownVuln',
+ 'NSFW',
+ 'NoSourceSince',
+ 'NonFreeAdd',
+ 'NonFreeAssets',
+ 'NonFreeDep',
+ 'NonFreeNet',
+ 'Tracking',
+ 'UpstreamNonFree',
+ ],
+ list(antiFeatures.keys()),
+ )
+ self.assertEqual(
+ ['de', 'en-US', 'fa', 'ro', 'zh-rCN'],
+ list(antiFeatures['Ads']['description'].keys()),
+ )
+ self.assertEqual(
+ ['en-US'],
+ list(antiFeatures['NoSourceSince']['description'].keys()),
+ )
+ # it should have copied the icon files into place
+ for v in antiFeatures.values():
+ p = Path(os.path.dirname(__file__) + '/repo' + v['icon']['en-US']['name'])
+ self.assertTrue(p.exists())
+
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
diff --git a/tests/config/antiFeatures.yml b/tests/config/antiFeatures.yml
new file mode 100644
index 00000000..e4c1a107
--- /dev/null
+++ b/tests/config/antiFeatures.yml
@@ -0,0 +1,45 @@
+Ads:
+ description: This app contains advertising
+ icon: ic_antifeature_ads.xml
+ name: Ads
+DisabledAlgorithm:
+ description: This app has a weak security signature
+ icon: ic_antifeature_disabledalgorithm.xml
+ name: Signed Using An Unsafe Algorithm
+KnownVuln:
+ description: This app contains a known security vulnerability
+ icon: ic_antifeature_knownvuln.xml
+ name: Known Vulnerability
+NSFW:
+ description: This app contains content that should not be publicized or visible
+ everywhere
+ icon: ic_antifeature_nsfw.xml
+ name: NSFW
+NoSourceSince:
+ description: The source code is no longer available, no updates possible.
+ icon: ic_antifeature_nosourcesince.xml
+ name: Newer Source Not Available
+NonFreeAdd:
+ description: This app promotes non-free add-ons
+ icon: ic_antifeature_nonfreeadd.xml
+ name: Non-Free Addons
+NonFreeAssets:
+ description: This app contains non-free assets
+ icon: ic_antifeature_nonfreeassets.xml
+ name: Non-Free Assets
+NonFreeDep:
+ description: This app depends on other non-free apps
+ icon: ic_antifeature_nonfreedep.xml
+ name: Non-Free Dependencies
+NonFreeNet:
+ description: This app promotes or depends entirely on a non-free network service
+ icon: ic_antifeature_nonfreenet.xml
+ name: Non-Free Network Services
+Tracking:
+ description: This app tracks and reports your activity
+ icon: ic_antifeature_tracking.xml
+ name: Tracking
+UpstreamNonFree:
+ description: The upstream source code is not entirely Free
+ icon: ic_antifeature_upstreamnonfree.xml
+ name: Upstream Non-Free
diff --git a/tests/config/de/antiFeatures.yml b/tests/config/de/antiFeatures.yml
new file mode 100644
index 00000000..3053e41a
--- /dev/null
+++ b/tests/config/de/antiFeatures.yml
@@ -0,0 +1,44 @@
+Ads:
+ description: Diese App enthält Werbung
+ icon: ic_antifeature_ads.xml
+ name: Werbung
+DisabledAlgorithm:
+ description: Diese App hat eine schwache Sicherheitssignatur
+ icon: ic_antifeature_disabledalgorithm.xml
+ name: Mit einem unsicheren Algorithmus signiert
+KnownVuln:
+ description: Diese App enthält eine bekannte Sicherheitslücke
+ icon: ic_antifeature_knownvuln.xml
+ name: Bekannte Sicherheitslücke
+NSFW:
+ description: Diese App enthält Inhalte, die nicht überall veröffentlicht oder sichtbar
+ sein sollten
+ icon: ic_antifeature_nsfw.xml
+ name: NSFW
+NoSourceSince:
+ icon: ic_antifeature_nosourcesince.xml
+ name: Der Quellcode ist nicht mehr erhältlich, keine Aktualisierungen möglich.
+NonFreeAdd:
+ description: Diese App bewirbt nicht-quelloffene Erweiterungen
+ icon: ic_antifeature_nonfreeadd.xml
+ name: Nicht-quelloffene Erweiterungen
+NonFreeAssets:
+ description: Diese App enthält nicht-quelloffene Bestandteile
+ icon: ic_antifeature_nonfreeassets.xml
+ name: Nicht-quelloffene Bestandteile
+NonFreeDep:
+ description: Diese App ist abhängig von anderen nicht-quelloffenen Apps
+ icon: ic_antifeature_nonfreedep.xml
+ name: Nicht-quelloffene Abhängigkeiten
+NonFreeNet:
+ description: Diese App bewirbt nicht-quelloffene Netzwerkdienste
+ icon: ic_antifeature_nonfreenet.xml
+ name: Nicht-quelloffene Netzwerkdienste
+Tracking:
+ description: Diese App verfolgt und versendet Ihre Aktivitäten
+ icon: ic_antifeature_tracking.xml
+ name: Tracking
+UpstreamNonFree:
+ description: Der Originalcode ist nicht völlig quelloffen
+ icon: ic_antifeature_upstreamnonfree.xml
+ name: Originalcode nicht-quelloffen
diff --git a/tests/config/fa/antiFeatures.yml b/tests/config/fa/antiFeatures.yml
new file mode 100644
index 00000000..554dcee9
--- /dev/null
+++ b/tests/config/fa/antiFeatures.yml
@@ -0,0 +1,43 @@
+Ads:
+ description: این کاره دارای تبلیغات است
+ icon: ic_antifeature_ads.xml
+ name: تبلیغات
+DisabledAlgorithm:
+ description: این کاره، امضای امنیتی ضعیفی دارد
+ icon: ic_antifeature_disabledalgorithm.xml
+ name: امضا شده با الگوریتمی ناامن
+KnownVuln:
+ description: این کاره، آسیبپذیری امنیتی شناختهشدهای دارد
+ icon: ic_antifeature_knownvuln.xml
+ name: آسیبپذیری شناخته
+NSFW:
+ description: این کاره محتوایی دارد که نباید عمومی شده یا همهحا نمایان باشد
+ icon: ic_antifeature_nsfw.xml
+ name: NSFW
+NoSourceSince:
+ icon: ic_antifeature_nosourcesince.xml
+ name: کد مبدأ دیگر در دسترس نیست. بهروز رسانی ناممکن است.
+NonFreeAdd:
+ description: این کاره، افزونههای ناآزاد را تبلیغ میکند
+ icon: ic_antifeature_nonfreeadd.xml
+ name: افزونههای ناآزاد
+NonFreeAssets:
+ description: این کاره دارای بخشهای ناآزاد است
+ icon: ic_antifeature_nonfreeassets.xml
+ name: بخشهای ناآزاد
+NonFreeDep:
+ description: این کاره به دیگر کارههای ناآزاد وابسته است
+ icon: ic_antifeature_nonfreedep.xml
+ name: وابستگیهای ناآزاد
+NonFreeNet:
+ description: این کاره، خدمات شبکههای ناآزاد را ترویج میکند
+ icon: ic_antifeature_nonfreenet.xml
+ name: خدمات شبکهای ناآزاد
+Tracking:
+ description: این کاره، فعّالیتتان را ردیابی و گزارش میکند
+ icon: ic_antifeature_tracking.xml
+ name: ردیابی
+UpstreamNonFree:
+ description: کد مبدأ بالادستی کاملاً آزاد نیست
+ icon: ic_antifeature_upstreamnonfree.xml
+ name: بالادست ناآزاد
diff --git a/tests/config/ic_antifeature_ads.xml b/tests/config/ic_antifeature_ads.xml
new file mode 100644
index 00000000..99eb6f5e
--- /dev/null
+++ b/tests/config/ic_antifeature_ads.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/tests/config/ic_antifeature_disabledalgorithm.xml b/tests/config/ic_antifeature_disabledalgorithm.xml
new file mode 100644
index 00000000..0b231666
--- /dev/null
+++ b/tests/config/ic_antifeature_disabledalgorithm.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
diff --git a/tests/config/ic_antifeature_knownvuln.xml b/tests/config/ic_antifeature_knownvuln.xml
new file mode 100644
index 00000000..cfa81345
--- /dev/null
+++ b/tests/config/ic_antifeature_knownvuln.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/tests/config/ic_antifeature_nonfreeadd.xml b/tests/config/ic_antifeature_nonfreeadd.xml
new file mode 100644
index 00000000..adca82ca
--- /dev/null
+++ b/tests/config/ic_antifeature_nonfreeadd.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/tests/config/ic_antifeature_nonfreeassets.xml b/tests/config/ic_antifeature_nonfreeassets.xml
new file mode 100644
index 00000000..20619b4e
--- /dev/null
+++ b/tests/config/ic_antifeature_nonfreeassets.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/tests/config/ic_antifeature_nonfreedep.xml b/tests/config/ic_antifeature_nonfreedep.xml
new file mode 100644
index 00000000..2b37b8d8
--- /dev/null
+++ b/tests/config/ic_antifeature_nonfreedep.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/tests/config/ic_antifeature_nonfreenet.xml b/tests/config/ic_antifeature_nonfreenet.xml
new file mode 100644
index 00000000..4d726f09
--- /dev/null
+++ b/tests/config/ic_antifeature_nonfreenet.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/config/ic_antifeature_nosourcesince.xml b/tests/config/ic_antifeature_nosourcesince.xml
new file mode 100644
index 00000000..b524fc42
--- /dev/null
+++ b/tests/config/ic_antifeature_nosourcesince.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/tests/config/ic_antifeature_nsfw.xml b/tests/config/ic_antifeature_nsfw.xml
new file mode 100644
index 00000000..a1bf3b84
--- /dev/null
+++ b/tests/config/ic_antifeature_nsfw.xml
@@ -0,0 +1,4 @@
+
+
+
diff --git a/tests/config/ic_antifeature_tracking.xml b/tests/config/ic_antifeature_tracking.xml
new file mode 100644
index 00000000..984fe20c
--- /dev/null
+++ b/tests/config/ic_antifeature_tracking.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/tests/config/ic_antifeature_upstreamnonfree.xml b/tests/config/ic_antifeature_upstreamnonfree.xml
new file mode 100644
index 00000000..f3598e67
--- /dev/null
+++ b/tests/config/ic_antifeature_upstreamnonfree.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/tests/config/ro/antiFeatures.yml b/tests/config/ro/antiFeatures.yml
new file mode 100644
index 00000000..97d61172
--- /dev/null
+++ b/tests/config/ro/antiFeatures.yml
@@ -0,0 +1,44 @@
+Ads:
+ description: Aplicația conține reclamă
+ icon: ic_antifeature_ads.xml
+ name: Reclame
+DisabledAlgorithm:
+ description: Aplicația are o semnătură slab securizată
+ icon: ic_antifeature_disabledalgorithm.xml
+ name: Algoritm nesigur semnătură
+KnownVuln:
+ description: Aplicația conține o vulnerabilitate de securitate cunoscută
+ icon: ic_antifeature_knownvuln.xml
+ name: Vulnerabilitate cunoscută
+NSFW:
+ description: Această aplicație conține conținut care nu ar trebui să fie făcut public
+ sau vizibil peste tot
+ icon: ic_antifeature_nsfw.xml
+ name: NSFW
+NoSourceSince:
+ icon: ic_antifeature_nosourcesince.xml
+ name: Codul sursă nu mai este disponibil, nu mai există posibilitatea de a actualiza.
+NonFreeAdd:
+ description: Aplicația promovează anexe ce nu sunt software liber
+ icon: ic_antifeature_nonfreeadd.xml
+ name: Anexe ne-libere
+NonFreeAssets:
+ description: Aceasta aplicație conține resurse ce nu sunt la disponibile la liber
+ icon: ic_antifeature_nonfreeassets.xml
+ name: Resurse ne-libere
+NonFreeDep:
+ description: Aplicația depinde de alte aplicații ce nu sunt software liber
+ icon: ic_antifeature_nonfreedep.xml
+ name: Dependențe ne-libere
+NonFreeNet:
+ description: Aplicația promovează servicii de rețea ce nu sunt accesibile la liber
+ icon: ic_antifeature_nonfreenet.xml
+ name: Servicii de rețea ne-libere
+Tracking:
+ description: Aplicația îți înregistrează și raportează activitatea undeva
+ icon: ic_antifeature_tracking.xml
+ name: Urmărire
+UpstreamNonFree:
+ description: Codul sursa originar nu este în totalitatea lui software liber
+ icon: ic_antifeature_upstreamnonfree.xml
+ name: Surse ne-libere
diff --git a/tests/config/zh-rCN/antiFeatures.yml b/tests/config/zh-rCN/antiFeatures.yml
new file mode 100644
index 00000000..a1b287b9
--- /dev/null
+++ b/tests/config/zh-rCN/antiFeatures.yml
@@ -0,0 +1,43 @@
+Ads:
+ description: 此应用包含广告
+ icon: ic_antifeature_ads.xml
+ name: 广告
+DisabledAlgorithm:
+ description: 此应用的安全签名较弱
+ icon: ic_antifeature_disabledalgorithm.xml
+ name: 使用不安全算法签名
+KnownVuln:
+ description: 此应用包含已知的安全漏洞
+ icon: ic_antifeature_knownvuln.xml
+ name: 含有已知漏洞
+NSFW:
+ description: 此应用包含不应宣扬或随处可见的内容
+ icon: ic_antifeature_nsfw.xml
+ name: NSFW
+NoSourceSince:
+ icon: ic_antifeature_nosourcesince.xml
+ name: 源代码不再可用,无法更新。
+NonFreeAdd:
+ description: 此应用推广非自由的附加组件
+ icon: ic_antifeature_nonfreeadd.xml
+ name: 非自由附加组件
+NonFreeAssets:
+ description: 此应用包含非自由资源
+ icon: ic_antifeature_nonfreeassets.xml
+ name: 非自由资产
+NonFreeDep:
+ description: 此应用依赖于其它非自由应用
+ icon: ic_antifeature_nonfreedep.xml
+ name: 非自由依赖项
+NonFreeNet:
+ description: 此应用推广非自由的网络服务
+ icon: ic_antifeature_nonfreenet.xml
+ name: 非自由网络服务
+Tracking:
+ description: 此应用会记录并报告你的活动
+ icon: ic_antifeature_tracking.xml
+ name: 跟踪用户
+UpstreamNonFree:
+ description: 上游源代码不是完全自由的
+ icon: ic_antifeature_upstreamnonfree.xml
+ name: 上游代码非自由
diff --git a/tests/repo/entry.json b/tests/repo/entry.json
index 2fb77d2a..f13e622b 100644
--- a/tests/repo/entry.json
+++ b/tests/repo/entry.json
@@ -3,8 +3,8 @@
"version": 20002,
"index": {
"name": "/index-v2.json",
- "sha256": "07fa4500736ae77fcc6434e4d70ab315b8e018aef52c2afca9f2834ddc73747d",
- "size": 32946,
+ "sha256": "a3c7e88a522a7228937e5c3d760fc239e3578e292035d88478d32fec9ff5eb54",
+ "size": 52314,
"numPackages": 10
},
"diffs": {}
diff --git a/tests/repo/index-v2.json b/tests/repo/index-v2.json
index 7addd167..b59f17bf 100644
--- a/tests/repo/index-v2.json
+++ b/tests/repo/index-v2.json
@@ -27,6 +27,477 @@
}
],
"timestamp": 1676634233000,
+ "antiFeatures": {
+ "Ads": {
+ "description": {
+ "de": "Diese App enthält Werbung",
+ "en-US": "This app contains advertising",
+ "fa": "این کاره دارای تبلیغات است",
+ "ro": "Aplicația conține reclamă",
+ "zh-rCN": "此应用包含广告"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_ads.xml",
+ "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e",
+ "size": 1564
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_ads.xml",
+ "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e",
+ "size": 1564
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_ads.xml",
+ "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e",
+ "size": 1564
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_ads.xml",
+ "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e",
+ "size": 1564
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_ads.xml",
+ "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e",
+ "size": 1564
+ }
+ },
+ "name": {
+ "de": "Werbung",
+ "en-US": "Ads",
+ "fa": "تبلیغات",
+ "ro": "Reclame",
+ "zh-rCN": "广告"
+ }
+ },
+ "DisabledAlgorithm": {
+ "description": {
+ "de": "Diese App hat eine schwache Sicherheitssignatur",
+ "en-US": "This app has a weak security signature",
+ "fa": "این کاره، امضای امنیتی ضعیفی دارد",
+ "ro": "Aplicația are o semnătură slab securizată",
+ "zh-rCN": "此应用的安全签名较弱"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_disabledalgorithm.xml",
+ "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb",
+ "size": 2313
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_disabledalgorithm.xml",
+ "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb",
+ "size": 2313
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_disabledalgorithm.xml",
+ "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb",
+ "size": 2313
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_disabledalgorithm.xml",
+ "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb",
+ "size": 2313
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_disabledalgorithm.xml",
+ "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb",
+ "size": 2313
+ }
+ },
+ "name": {
+ "de": "Mit einem unsicheren Algorithmus signiert",
+ "en-US": "Signed Using An Unsafe Algorithm",
+ "fa": "امضا شده با الگوریتمی ناامن",
+ "ro": "Algoritm nesigur semnătură",
+ "zh-rCN": "使用不安全算法签名"
+ }
+ },
+ "KnownVuln": {
+ "description": {
+ "de": "Diese App enthält eine bekannte Sicherheitslücke",
+ "en-US": "This app contains a known security vulnerability",
+ "fa": "این کاره، آسیبپذیری امنیتی شناختهشدهای دارد",
+ "ro": "Aplicația conține o vulnerabilitate de securitate cunoscută",
+ "zh-rCN": "此应用包含已知的安全漏洞"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_knownvuln.xml",
+ "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d",
+ "size": 1415
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_knownvuln.xml",
+ "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d",
+ "size": 1415
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_knownvuln.xml",
+ "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d",
+ "size": 1415
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_knownvuln.xml",
+ "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d",
+ "size": 1415
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_knownvuln.xml",
+ "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d",
+ "size": 1415
+ }
+ },
+ "name": {
+ "de": "Bekannte Sicherheitslücke",
+ "en-US": "Known Vulnerability",
+ "fa": "آسیبپذیری شناخته",
+ "ro": "Vulnerabilitate cunoscută",
+ "zh-rCN": "含有已知漏洞"
+ }
+ },
+ "NSFW": {
+ "description": {
+ "de": "Diese App enthält Inhalte, die nicht überall veröffentlicht oder sichtbar sein sollten",
+ "en-US": "This app contains content that should not be publicized or visible everywhere",
+ "fa": "این کاره محتوایی دارد که نباید عمومی شده یا همهحا نمایان باشد",
+ "ro": "Această aplicație conține conținut care nu ar trebui să fie făcut public sau vizibil peste tot",
+ "zh-rCN": "此应用包含不应宣扬或随处可见的内容"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_nsfw.xml",
+ "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465",
+ "size": 871
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_nsfw.xml",
+ "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465",
+ "size": 871
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_nsfw.xml",
+ "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465",
+ "size": 871
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_nsfw.xml",
+ "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465",
+ "size": 871
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_nsfw.xml",
+ "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465",
+ "size": 871
+ }
+ },
+ "name": {
+ "de": "NSFW",
+ "en-US": "NSFW",
+ "fa": "NSFW",
+ "ro": "NSFW",
+ "zh-rCN": "NSFW"
+ }
+ },
+ "NoSourceSince": {
+ "description": {
+ "en-US": "The source code is no longer available, no updates possible."
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_nosourcesince.xml",
+ "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f",
+ "size": 1102
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_nosourcesince.xml",
+ "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f",
+ "size": 1102
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_nosourcesince.xml",
+ "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f",
+ "size": 1102
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_nosourcesince.xml",
+ "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f",
+ "size": 1102
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_nosourcesince.xml",
+ "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f",
+ "size": 1102
+ }
+ },
+ "name": {
+ "de": "Der Quellcode ist nicht mehr erhältlich, keine Aktualisierungen möglich.",
+ "en-US": "Newer Source Not Available",
+ "fa": "کد مبدأ دیگر در دسترس نیست. بهروز رسانی ناممکن است.",
+ "ro": "Codul sursă nu mai este disponibil, nu mai există posibilitatea de a actualiza.",
+ "zh-rCN": "源代码不再可用,无法更新。"
+ }
+ },
+ "NonFreeAdd": {
+ "description": {
+ "de": "Diese App bewirbt nicht-quelloffene Erweiterungen",
+ "en-US": "This app promotes non-free add-ons",
+ "fa": "این کاره، افزونههای ناآزاد را تبلیغ میکند",
+ "ro": "Aplicația promovează anexe ce nu sunt software liber",
+ "zh-rCN": "此应用推广非自由的附加组件"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_nonfreeadd.xml",
+ "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2",
+ "size": 1846
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_nonfreeadd.xml",
+ "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2",
+ "size": 1846
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_nonfreeadd.xml",
+ "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2",
+ "size": 1846
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_nonfreeadd.xml",
+ "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2",
+ "size": 1846
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_nonfreeadd.xml",
+ "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2",
+ "size": 1846
+ }
+ },
+ "name": {
+ "de": "Nicht-quelloffene Erweiterungen",
+ "en-US": "Non-Free Addons",
+ "fa": "افزونههای ناآزاد",
+ "ro": "Anexe ne-libere",
+ "zh-rCN": "非自由附加组件"
+ }
+ },
+ "NonFreeAssets": {
+ "description": {
+ "de": "Diese App enthält nicht-quelloffene Bestandteile",
+ "en-US": "This app contains non-free assets",
+ "fa": "این کاره دارای بخشهای ناآزاد است",
+ "ro": "Aceasta aplicație conține resurse ce nu sunt la disponibile la liber",
+ "zh-rCN": "此应用包含非自由资源"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_nonfreeassets.xml",
+ "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008",
+ "size": 1784
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_nonfreeassets.xml",
+ "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008",
+ "size": 1784
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_nonfreeassets.xml",
+ "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008",
+ "size": 1784
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_nonfreeassets.xml",
+ "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008",
+ "size": 1784
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_nonfreeassets.xml",
+ "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008",
+ "size": 1784
+ }
+ },
+ "name": {
+ "de": "Nicht-quelloffene Bestandteile",
+ "en-US": "Non-Free Assets",
+ "fa": "بخشهای ناآزاد",
+ "ro": "Resurse ne-libere",
+ "zh-rCN": "非自由资产"
+ }
+ },
+ "NonFreeDep": {
+ "description": {
+ "de": "Diese App ist abhängig von anderen nicht-quelloffenen Apps",
+ "en-US": "This app depends on other non-free apps",
+ "fa": "این کاره به دیگر کارههای ناآزاد وابسته است",
+ "ro": "Aplicația depinde de alte aplicații ce nu sunt software liber",
+ "zh-rCN": "此应用依赖于其它非自由应用"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_nonfreedep.xml",
+ "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a",
+ "size": 1396
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_nonfreedep.xml",
+ "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a",
+ "size": 1396
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_nonfreedep.xml",
+ "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a",
+ "size": 1396
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_nonfreedep.xml",
+ "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a",
+ "size": 1396
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_nonfreedep.xml",
+ "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a",
+ "size": 1396
+ }
+ },
+ "name": {
+ "de": "Nicht-quelloffene Abhängigkeiten",
+ "en-US": "Non-Free Dependencies",
+ "fa": "وابستگیهای ناآزاد",
+ "ro": "Dependențe ne-libere",
+ "zh-rCN": "非自由依赖项"
+ }
+ },
+ "NonFreeNet": {
+ "description": {
+ "de": "Diese App bewirbt nicht-quelloffene Netzwerkdienste",
+ "en-US": "This app promotes or depends entirely on a non-free network service",
+ "fa": "این کاره، خدمات شبکههای ناآزاد را ترویج میکند",
+ "ro": "Aplicația promovează servicii de rețea ce nu sunt accesibile la liber",
+ "zh-rCN": "此应用推广非自由的网络服务"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_nonfreenet.xml",
+ "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6",
+ "size": 3038
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_nonfreenet.xml",
+ "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6",
+ "size": 3038
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_nonfreenet.xml",
+ "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6",
+ "size": 3038
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_nonfreenet.xml",
+ "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6",
+ "size": 3038
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_nonfreenet.xml",
+ "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6",
+ "size": 3038
+ }
+ },
+ "name": {
+ "de": "Nicht-quelloffene Netzwerkdienste",
+ "en-US": "Non-Free Network Services",
+ "fa": "خدمات شبکهای ناآزاد",
+ "ro": "Servicii de rețea ne-libere",
+ "zh-rCN": "非自由网络服务"
+ }
+ },
+ "Tracking": {
+ "description": {
+ "de": "Diese App verfolgt und versendet Ihre Aktivitäten",
+ "en-US": "This app tracks and reports your activity",
+ "fa": "این کاره، فعّالیتتان را ردیابی و گزارش میکند",
+ "ro": "Aplicația îți înregistrează și raportează activitatea undeva",
+ "zh-rCN": "此应用会记录并报告你的活动"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_tracking.xml",
+ "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961",
+ "size": 2493
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_tracking.xml",
+ "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961",
+ "size": 2493
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_tracking.xml",
+ "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961",
+ "size": 2493
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_tracking.xml",
+ "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961",
+ "size": 2493
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_tracking.xml",
+ "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961",
+ "size": 2493
+ }
+ },
+ "name": {
+ "de": "Tracking",
+ "en-US": "Tracking",
+ "fa": "ردیابی",
+ "ro": "Urmărire",
+ "zh-rCN": "跟踪用户"
+ }
+ },
+ "UpstreamNonFree": {
+ "description": {
+ "de": "Der Originalcode ist nicht völlig quelloffen",
+ "en-US": "The upstream source code is not entirely Free",
+ "fa": "کد مبدأ بالادستی کاملاً آزاد نیست",
+ "ro": "Codul sursa originar nu este în totalitatea lui software liber",
+ "zh-rCN": "上游源代码不是完全自由的"
+ },
+ "icon": {
+ "de": {
+ "name": "/icons/ic_antifeature_upstreamnonfree.xml",
+ "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
+ "size": 1442
+ },
+ "en-US": {
+ "name": "/icons/ic_antifeature_upstreamnonfree.xml",
+ "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
+ "size": 1442
+ },
+ "fa": {
+ "name": "/icons/ic_antifeature_upstreamnonfree.xml",
+ "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
+ "size": 1442
+ },
+ "ro": {
+ "name": "/icons/ic_antifeature_upstreamnonfree.xml",
+ "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
+ "size": 1442
+ },
+ "zh-rCN": {
+ "name": "/icons/ic_antifeature_upstreamnonfree.xml",
+ "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
+ "size": 1442
+ }
+ },
+ "name": {
+ "de": "Originalcode nicht-quelloffen",
+ "en-US": "Upstream Non-Free",
+ "fa": "بالادست ناآزاد",
+ "ro": "Surse ne-libere",
+ "zh-rCN": "上游代码非自由"
+ }
+ }
+ },
"requests": {
"install": [
"org.adaway"
diff --git a/tests/run-tests b/tests/run-tests
index e076359a..49acb5aa 100755
--- a/tests/run-tests
+++ b/tests/run-tests
@@ -261,7 +261,12 @@ REPOROOT=`create_test_dir`
GNUPGHOME=$REPOROOT/gnupghome
cd $REPOROOT
fdroid_init_with_prebuilt_keystore
-cp -a $WORKSPACE/tests/metadata $WORKSPACE/tests/repo $WORKSPACE/tests/stats $REPOROOT/
+cp -a \
+ $WORKSPACE/tests/config \
+ $WORKSPACE/tests/metadata \
+ $WORKSPACE/tests/repo \
+ $WORKSPACE/tests/stats \
+ $REPOROOT/
cp -a $WORKSPACE/tests/gnupghome $GNUPGHOME
chmod 0700 $GNUPGHOME
echo "install_list: org.adaway" >> config.yml