/** Build user's info to display on the screen */
  private String buildUserInfoDisplay(GraphUser user) {
    StringBuilder userInfo = new StringBuilder("");

    /** (name) - no special permissions required */
    userInfo.append(String.format("Name: %s\n", user.getName()));

    /** (birthday) - requires user_birthday permission */
    userInfo.append(String.format("Birthday: %s\n", user.getBirthday()));

    /** (location) - requires user_location permission */
    GraphPlace location = user.getLocation();
    if (location != null) {
      userInfo.append(String.format("Location: %s\n", location.getProperty("name")));
    }

    /** (locale) - no special permissions required */
    userInfo.append(String.format("Locale: %s\n", user.getProperty("locale")));

    /** (languages) - requires user_likes permission. */
    JSONArray languages = (JSONArray) user.getProperty("languages");
    if (languages != null && languages.length() > 0) {
      ArrayList<String> languageNames = new ArrayList<String>();
      for (int i = 0; i < languages.length(); i++) {
        JSONObject language = languages.optJSONObject(i);
        languageNames.add(language.optString("name"));
      }
      userInfo.append(String.format("Languages: %s\n", languageNames.toString()));
    }
    return userInfo.toString();
  }
 @SmallTest
 @MediumTest
 @LargeTest
 public void testMapGetReturnsNullForMissingProperty() throws JSONException {
   GraphUser graphUser = GraphObject.Factory.create(GraphUser.class);
   assertNull(graphUser.getBirthday());
 }
  @SmallTest
  @MediumTest
  @LargeTest
  public void testCanCastBetweenGraphObjectTypes() {
    GraphObject graphObject = GraphObject.Factory.create();

    graphObject.setProperty("first_name", "Mickey");

    GraphUser graphUser = graphObject.cast(GraphUser.class);
    assertTrue(graphUser != null);
    // Should see the name we set earlier as a GraphObject.
    assertEquals("Mickey", graphUser.getFirstName());

    // Changes to GraphUser should be reflected in GraphObject version.
    graphUser.setLastName("Mouse");
    assertEquals("Mouse", graphObject.getProperty("last_name"));
  }
 /** Update user's profile info */
 private void updateUI() {
   if (mUser != null) {
     mUserInfo.setText(buildUserInfoDisplay(mUser));
     mProfilePictureView.setProfileId(mUser.getId());
   } else {
     mUserInfo.setText(null);
     mProfilePictureView.setProfileId(null);
   }
 }
  @SmallTest
  @MediumTest
  @LargeTest
  public void testCanTreatAsGraphUser() {
    GraphUser graphUser = GraphObject.Factory.create(GraphUser.class);

    graphUser.setFirstName("Michael");
    assertEquals("Michael", graphUser.getFirstName());
    assertEquals("Michael", graphUser.getProperty("first_name"));
    assertEquals("Michael", graphUser.asMap().get("first_name"));

    graphUser.setProperty("last_name", "Scott");
    assertEquals("Scott", graphUser.getProperty("last_name"));
    assertEquals("Scott", graphUser.getLastName());
    assertEquals("Scott", graphUser.asMap().get("last_name"));
  }
  @SmallTest
  @MediumTest
  @LargeTest
  public void testObjectWrapsIterable() throws JSONException {
    GraphUser user = GraphObject.Factory.create(GraphUser.class);
    user.setFirstName("Foo");
    user.setLastName("Bar");

    List<GraphUser> users = new ArrayList<GraphUser>();
    users.add(user);

    OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class);
    action.setTags(users);

    String json = action.getInnerJSONObject().toString();

    assertTrue("JSON string should contain last_name", json.contains("last_name"));

    Object tags = action.getInnerJSONObject().get("tags");
    assertNotNull("tags should not be null", tags);
    assertTrue("tags should be JSONArray", tags instanceof JSONArray);

    List<GraphObject> retrievedUsers = action.getTags();
    assertEquals("Size should be 1", 1, retrievedUsers.size());
    GraphUser retrievedUser = retrievedUsers.get(0).cast(GraphUser.class);
    assertEquals("First name should be Foo", "Foo", retrievedUser.getFirstName());
    assertEquals("Last name should be Bar", "Bar", retrievedUser.getLastName());
  }