// -*- mode: java; c-basic-offset: 2; -*-
// Copyright 2009-2011 Google, All Rights reserved
// Copyright 2011-2016 MIT, All rights reserved
// Released under the Apache License, Version 2.0
// http://www.apache.org/licenses/LICENSE-2.0
package com.google.appinventor.buildserver;
import com.google.common.collect.Sets;
import junit.framework.TestCase;
import java.util.Map;
import java.util.Set;
/**
* Tests Compiler class.
*
*/
public class CompilerTest extends TestCase {
public void testGeneratePermissions() throws Exception {
Set<String> noComponents = Sets.newHashSet();
Compiler compiler = new Compiler(null, noComponents, System.out, System.err, System.err, false,
2048, null);
compiler.generatePermissions();
Map<String,Set<String>> permissions = compiler.getPermissions();
assertEquals(0, permissions.size());
Set<String> componentTypes = Sets.newHashSet("com.google.appinventor.components.runtime.LocationSensor");
compiler = new Compiler(null, componentTypes, System.out, System.err, System.err, false, 2048, null);
compiler.generatePermissions();
permissions = compiler.getPermissions();
Set<String> flatPermissions = Sets.newHashSet();
for (Set<String> compPermissions : permissions.values()) {
flatPermissions.addAll(compPermissions);
}
assertEquals(4, flatPermissions.size());
assertTrue(flatPermissions.contains(
"android.permission.ACCESS_FINE_LOCATION"));
assertTrue(flatPermissions.contains(
"android.permission.ACCESS_COARSE_LOCATION"));
assertTrue(flatPermissions.contains(
"android.permission.ACCESS_MOCK_LOCATION"));
assertTrue(flatPermissions.contains(
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"));
}
public void testGenerateBroadcastReceiver() throws Exception {
String texting = "com.google.appinventor.components.runtime.Texting";
String label = "com.google.appinventor.components.runtime.Label";
Set<String> componentTypes = Sets.newHashSet(texting);
Compiler compiler = new Compiler(null, componentTypes, System.out, System.err, System.err, false, 2048, null);
compiler.generateBroadcastReceivers();
Map<String, Set<String>> componentReceivers = compiler.getBroadcastReceivers();
Set<String> receivers = componentReceivers.get(texting);
assertEquals(1, receivers.size());
String receiverElementString = receivers.iterator().next();
assertTrue(receiverElementString.contains("com.google.appinventor.components.runtime.util.SmsBroadcastReceiver"));
assertTrue(receiverElementString.contains("android.provider.Telephony.SMS_RECEIVED"));
assertTrue(receiverElementString.contains("com.google.android.apps.googlevoice.SMS_RECEIVED"));
componentTypes = Sets.newHashSet(texting, label);
compiler = new Compiler(null, componentTypes, System.out, System.err, System.err, false, 2048, null);
compiler.generateBroadcastReceivers();
componentReceivers = compiler.getBroadcastReceivers();
receivers = componentReceivers.get(texting);
assertEquals(1, receivers.size());
assertTrue(componentReceivers.get(label) == null);
}
public void testGenerateActivities() throws Exception {
String barcodeScanner = "com.google.appinventor.components.runtime.BarcodeScanner";
String listPicker = "com.google.appinventor.components.runtime.ListPicker";
String twitter = "com.google.appinventor.components.runtime.Twitter";
Set<String> componentTypes = Sets.newHashSet(barcodeScanner);
Compiler compiler = new Compiler(null, componentTypes, System.out, System.err, System.err, false, 2048, null);
compiler.generateActivities();
Map<String, Set<String>> componentActivities = compiler.getActivities();
Set<String> activities = componentActivities.get(barcodeScanner);
assertEquals(1, activities.size());
String activityElementString = activities.iterator().next();
assertTrue(activityElementString.contains("name=\"com.google.zxing.client.android.AppInvCaptureActivity\""));
assertTrue(activityElementString.contains("screenOrientation=\"landscape\""));
assertTrue(activityElementString.contains("stateNotNeeded=\"true\""));
assertTrue(activityElementString.contains("configChanges=\"orientation|keyboardHidden\""));
assertTrue(activityElementString.contains("theme=\"@android:style/Theme.NoTitleBar.Fullscreen\""));
assertTrue(activityElementString.contains("windowSoftInputMode=\"stateAlwaysHidden\""));
componentTypes = Sets.newHashSet(listPicker);
compiler = new Compiler(null, componentTypes, System.out, System.err, System.err, false, 2048, null);
compiler.generateActivities();
componentActivities = compiler.getActivities();
activities = componentActivities.get(listPicker);
assertEquals(1, activities.size());
activityElementString = activities.iterator().next();
assertTrue(activityElementString.contains("name=\"com.google.appinventor.components.runtime.ListPickerActivity\""));
assertTrue(activityElementString.contains("configChanges=\"orientation|keyboardHidden\""));
assertTrue(activityElementString.contains("screenOrientation=\"behind\""));
componentTypes = Sets.newHashSet(twitter);
compiler = new Compiler(null, componentTypes, System.out, System.err, System.err, false, 2048, null);
compiler.generateActivities();
componentActivities = compiler.getActivities();
activities = componentActivities.get(twitter);
assertEquals(1, activities.size());
activityElementString = activities.iterator().next();
assertTrue(activityElementString.contains("name=\"com.google.appinventor.components.runtime.WebViewActivity\""));
assertTrue(activityElementString.contains("configChanges=\"orientation|keyboardHidden\""));
assertTrue(activityElementString.contains("screenOrientation=\"behind\""));
// Finally, test for the name attribute of the <intent-filter>'s <action> subelement
assertTrue(activityElementString.contains("name=\"android.intent.action.MAIN\""));
}
}