mod consts;
fn test_manifest_contents(axml: &rusty_axml::parser::Axml) {
let mut activities = rusty_axml::get_activities_names(axml);
activities.sort();
assert_eq!(consts::ACTIVITIES, *activities);
let mut services = rusty_axml::get_services_names(axml);
services.sort();
assert_eq!(consts::SERVICES, *services);
let mut providers = rusty_axml::get_providers_names(axml);
providers.sort();
assert_eq!(consts::PROVIDERS, *providers);
let mut receivers = rusty_axml::get_receivers_names(axml);
receivers.sort();
assert_eq!(consts::RECEIVERS, *receivers);
let mut requested_permissions = rusty_axml::get_requested_permissions(axml);
requested_permissions.sort();
assert_eq!(consts::REQUESTED_PERMISSIONS, *requested_permissions);
let mut declared_permissions = rusty_axml::get_declared_permissions(axml);
declared_permissions.sort();
assert_eq!(consts::DECLARED_PERMISSIONS, *declared_permissions);
}
#[test]
fn test_from_apk() {
let cursor = rusty_axml::create_cursor_from_apk("tests/assets/app.apk").unwrap();
let axml = rusty_axml::parse_from_cursor(cursor).unwrap();
test_manifest_contents(&axml);
}
#[test]
fn test_from_axml() {
let cursor = rusty_axml::create_cursor_from_axml("tests/assets/AndroidManifest.xml").unwrap();
let axml = rusty_axml::parse_from_cursor(cursor).unwrap();
test_manifest_contents(&axml);
}
#[test]
fn test_component() {
let cursor = rusty_axml::create_cursor_from_axml("tests/assets/AndroidManifest.xml").unwrap();
let axml = rusty_axml::parse_from_cursor(cursor).unwrap();
let service = rusty_axml::find_node_by_name(&axml, "androidx.profileinstaller.ProfileInstallReceiver").unwrap();
let service = service.borrow();
assert_eq!(service.get_attr("android:permission"), Some("android.permission.DUMP"));
assert_eq!(service.children().len(), 4);
let filter = service.children().first().unwrap().clone();
let filter = filter.borrow();
assert_eq!(filter.element_type(), "intent-filter");
assert_eq!(filter.children().len(), 1);
let action = filter.children().first().unwrap().clone();
let action = action.borrow();
assert_eq!(action.get_name(), Some("androidx.profileinstaller.action.INSTALL_PROFILE"));
}
#[test]
fn test_manifest_attributes() {
let cursor = rusty_axml::create_cursor_from_axml("tests/assets/AndroidManifest.xml").unwrap();
let axml = rusty_axml::parse_from_cursor(cursor).unwrap();
let node = rusty_axml::find_nodes_by_type(&axml, "manifest").into_iter().next().unwrap();
let node = node.borrow();
println!("{node:#?}");
assert_eq!(node.get_attr("package"), Some("eu.jgamba.myapplication"));
assert_eq!(node.get_attr("android:versionName"), Some("1.0"));
assert_eq!(node.get_attr("android:compileSdkVersion"), Some("(type 0x10) 0x23"));
assert_eq!(node.get_attr("platformBuildVersionName"), Some("(type 0x10) 0xf"));
assert_eq!(node.get_attr("android:versionCode"), Some("(type 0x10) 0x1"));
assert_eq!(node.get_attr("platformBuildVersionCode"), Some("(type 0x10) 0x23"));
assert_eq!(node.get_attr("android:compileSdkVersionCodename"), Some("15"));
}