package com.ensoftcorp.open; import static org.junit.Assert.assertTrue; import java.util.Collection; import java.util.LinkedList; import org.junit.Test; import com.ensoftcorp.open.android.essentials.permissions.Permission; import com.ensoftcorp.open.android.essentials.permissions.PermissionGroup; import com.ensoftcorp.open.android.essentials.permissions.ProtectionLevel; public class SanityChecks { @Test public void testPermissionsAreNotDocumentedAndUndocumented() { Collection<Permission> intersection = Permission.getAllDocumentedPermissions(); intersection.retainAll(Permission.getAllUndocumentedPermissions()); if(!intersection.isEmpty()){ System.err.println("The following permissions are classified as both documented and undocumented!\n" + intersection); } assertTrue(intersection.isEmpty()); } @Test public void testUnassignedProtectionLevelPermissionsAreNotAssigned() { Collection<ProtectionLevel> protectionLevels = new LinkedList<ProtectionLevel>(); protectionLevels.addAll(ProtectionLevel.getAllProtectionLevels()); protectionLevels.remove(ProtectionLevel.UNASSIGNED); for(ProtectionLevel pl : protectionLevels){ for(Permission permission : pl.getPermissions()){ if(ProtectionLevel.UNASSIGNED.getPermissions().contains(permission)){ System.err.println(permission.getQualifiedName() + " is assigned to " + pl.getName() + " but is also in the unassigned protection level!"); } assertTrue(!ProtectionLevel.UNASSIGNED.getPermissions().contains(permission)); } } } @Test public void testAllPermissionsAreAccountedForInProtectionLevels() { for(Permission p : Permission.getAllPermissions()){ boolean permissionAccountedFor = false; for(ProtectionLevel pl : ProtectionLevel.getAllProtectionLevels()){ if(pl.getPermissions().contains(p)){ permissionAccountedFor = true; break; } } if(!permissionAccountedFor){ System.err.println("Permission " + p.getQualifiedName() + " is unaccounted for in any protection levels."); } assertTrue(permissionAccountedFor); } } @Test public void testUnassignedPermissionGroupPermissionsAreNotAssigned() { Collection<PermissionGroup> permissionGroups = new LinkedList<PermissionGroup>(); permissionGroups.addAll(PermissionGroup.getAllPermissionGroups()); permissionGroups.remove(PermissionGroup.UNASSIGNED); for(PermissionGroup pg : permissionGroups){ for(Permission permission : pg.getPermissions()){ if(PermissionGroup.UNASSIGNED.getPermissions().contains(permission)){ System.err.println(permission.getQualifiedName() + " is assigned to " + pg.getQualifiedName() + " but is also in the unassigned permission group!"); } assertTrue(!PermissionGroup.UNASSIGNED.getPermissions().contains(permission)); } } } @Test public void testAllPermissionsAreAccountedForInPermissionGroups() { for(Permission p : Permission.getAllPermissions()){ boolean permissionAccountedFor = false; for(PermissionGroup pg : PermissionGroup.getAllPermissionGroups()){ if(pg.getPermissions().contains(p)){ permissionAccountedFor = true; break; } } if(!permissionAccountedFor){ System.err.println("Permission " + p.getQualifiedName() + " is unaccounted for in any permission groups."); } assertTrue(permissionAccountedFor); } } }