package com.ch_linghu.fanfoudroid.test;
import java.util.Date;
import android.content.Context;
import android.test.ActivityInstrumentationTestCase2;
import com.ch_linghu.fanfoudroid.UserTimelineActivity;
import com.ch_linghu.fanfoudroid.fanfou.Weibo;
public class APITest extends ActivityInstrumentationTestCase2<UserTimelineActivity> {
private static final String TAG = "WeiboTest";
private Context context;
private UserTimelineActivity activity;
private String msg;
/**
* Weibo客户端(帐号密码)
*/
private Weibo fanfou;
/**
* 好友帐号ID, 必须是好友关系(与已登录帐号互相关注)
*/
private static final String TO_USER_ID = "lds2012";
private String AT_TO;
public APITest() {
super("tk.sandin.android.fanfandroid.test", UserTimelineActivity.class);
fanfou = new Weibo("172339248@qq.com", "12345678");
}
@Override
protected void setUp() throws Exception {
super.setUp();
msg = "test status " + new Date();
// AT_TO = "@" + fanfou.showUser(TO_USER_ID).getName() + " ";
}
protected void tearDown() throws Exception {
super.tearDown();
}
/*
// 显示随便看看的消息
public void testGetPublicTimeLine() throws Exception{
List<Status> status = fanfou.getPublicTimeline();
for (Status s : status) {
assertNotNull(s.getText());
}
}
// 显示用户和好友的消息
public void testGetFrientsTimeline() throws Exception {
// page 1, count 10
List<Status> status_10 = fanfou.getFriendsTimeline(1, 10);
assertEquals(10, status_10.size());
// page 2, count 5
List<Status> status_5 = fanfou.getFriendsTimeline(2, 5);
assertEquals(5, status_5.size());
// 取page 1, count 10的第6条 等同于 取page 2, count5的第1条
assert(status_10.get(5).equals(status_5.get(0)));
}
private void updateStatuses() throws Exception {
for (int i = 0; i < 150; i++) {
fanfou.updateStatus(msg);
System.out.println(i + " " + msg);
Thread.currentThread().sleep(300);
}
}
public void testGetFrientsTimelineBySinceId() throws Exception {
// 此测试需要大量信息存在.
// update a lot of statuses for this test.
// updateStatuses();
// 读取回来的所有结果
HashMap<String, Status> map = new HashMap<String, Status>();
// 读取一个很古老的status id(60条/页 * 3页 = 第180条)作为since_id参数
String sinceId = fanfou.getFriendsTimeline(3, 60).get(59).getId();
for (int i = 1; ; i++) {
// 以 sinceId不变, 循环进行分页读取(每页20条数据), 直到读取结果为空(即表示没有比sinceId更旧的信息了).
List<Status> status = fanfou.getFriendsTimeline( new Paging(i,20, sinceId) ); // page = i ; count = 20; since_id = sinceId
if (0 == status.size()) break;
for (Status s: status) {
// 确保没有读取到重复项
assertTrue(! map.containsKey(s.getId()) );
// 将结果保存
map.put(s.getId(), s);
System.out.println(map.size() + " " + s.getId() + "--> " + s.getText());
}
}
// print result
Set<String> keys = map.keySet();
for (String key : keys ) {
Status s = map.get(key);
//System.out.println(s.getId() + "--> " + s.getText());
}
System.out.println(map.size());
// 需要加上since_id这条消息才等于总消息数
Assert.assertEquals(180 , map.size() + 1);
}
// 显示用户的消息
public void testGetUserTimeline() throws Exception {
// update status list
List<Status> update = new ArrayList<Status>();
// update 3 test status
for (int i = 3; i > 0; i--) {
update.add(fanfou.updateStatus(msg));
}
assertEquals(3, update.size());
// get user time line by user(myself) id
String userid = fanfou.getUserId();
List<Status> status_20 = fanfou.getUserTimeline(userid);
assertFalse(status_20.isEmpty());
assertTrue(status_20.size() > 3);
assertEquals(msg, status_20.get(0).getText());
// test getUserTimeline(page, count)
List<Status> status_2 = fanfou.getUserTimeline(1, 3);
assertEquals(3, status_2.size());
// clear up
for (Status s : update) {
fanfou.destroyStatus(s.getId());
}
}
// 显示指定消息
public void testShowStatus() throws Exception {
// get one status by status id
Status status = fanfou.updateStatus(msg);
Status status_show = fanfou.showStatus(status.getId());
assertTrue(status.equals(status_show));
// clean up
fanfou.destroyStatus(status.getId());
}
// 显示发给当前用户的消息
public void testGetMentions() throws Exception {
User myself = fanfou.showUser(fanfou.getUserId());
// repay to user(myself)
String message = "@" + myself.getScreenName() + " "+ msg;
for (int i = 0; i<10; i++) {
Status new_mention = fanfou.updateStatus(message);
}
// 延时以等待服务器更新数据
Thread.currentThread().sleep(5000);
// 确保当前帐号内至少有count条mentions用于此测试
int count = 10;
// get mention status of user
List<Status> status = fanfou.getMentions(new Paging(1, count));
for (Status s : status) {
System.out.println(s.getText());
Log.i("LDS", s.getText());
}
String since_id = status.get(status.size()-1).getId();
assertEquals(count, status.size());
// get mentions list by since_id
List<Status> new_mentions = fanfou.getMentions(since_id);
assertEquals(count-1, new_mentions.size());
// cleanup
}
// 发布消息
public void testUpdateStatus() throws Exception {
Status status = fanfou.updateStatus(msg);
String text = status.getText();
String id = status.getId();
assertTrue(msg.equals(text));
User user = fanfou.showUser(TO_USER_ID);
// System.out.println(user.getStatusText());
// reply to someone
Status repay = fanfou.updateStatus("@" + user.getName() + " " + msg, user.getStatusId());
assertEquals(
user.getStatusId(),
repay.getInReplyToStatusId()
);
assertEquals(user.getId(), repay.getInReplyToUserId());
// clean up
fanfou.destroyStatus(id);
fanfou.destroyStatus(repay.getId());
}
// 转发消息
public void testRepost() throws Exception {
User user = fanfou.showUser(fanfou.getUserId());
String repost_status_id = user.getStatusId();
String repost_status_text = user.getStatusText();
String message = msg + "repost to " + TO_USER_ID;
Status repost = fanfou.repost(repost_status_id, message);
String text = repost.getText();
// System.out.println(text);
// System.out.println(repost);
// System.out.println(repost_status_text);
// System.out.println("123".contains("123"));
// new status contains the origin status text
assertTrue(text.contains(repost_status_text));
assertTrue(text.contains("@" + user.getName()));
// clean up
fanfou.destroyStatus(repost.getId());
}
// 删除消息
public void testDestroyStatus() throws Exception {
// update some status in case have no status
fanfou.updateStatus(msg);
fanfou.updateStatus(msg);
User myself = fanfou.showUser(fanfou.getUserId());
List<Status> status = fanfou.getUserTimeline();
int all_status_count = myself.getStatusesCount();
int page = (int) Math.ceil( all_status_count / 20.0 );
int delete_count = 0;
// delete status as much as API can
// for (int i = 1; i <= page; i++) {
for (int i = 1; i <= 1; i++) {
List<Status> status_per = fanfou.getUserTimeline(i, 20);
for (Status s : status_per) {
// System.out.println(s.getText());
fanfou.destroyStatus(s.getId());
delete_count++;
}
}
List<Status> status_left = fanfou.getUserTimeline();
// System.out.println(status.size() - status_left.size() == delete_count );
// System.out.println(status.size());
// System.out.println(status_left.size());
// System.out.println(delete_count);
assertTrue(delete_count > 0);
// update one status in case
fanfou.updateStatus("clean up on " + new Date());
}
// 照片上传
public void testUploadPhoto() throws Exception {
// Resources resources = getInstrumentation().getContext().getResources();
// AssetManager am = resources.getAssets();
// InputStream fin = am.open("fanfou.jpg");
// NOTE: 确保SD根目录下有"fanfou.jpg"的文件,用于此测试
File SDCard = Environment.getExternalStorageDirectory();
String filename = SDCard.getParent() + SDCard.getName() + "/fanfou.jpg";
File image = new File(filename);
assertTrue(image.exists());
// 上传照片
Status status = fanfou.uploadPhoto(msg, image);
assertNotNull(status);
Log.i(TAG, status.toString());
String original_pic = status.getOriginal_pic();
String bmiddle_pic = status.getBmiddle_pic();
String thumbail_pic = status.getThumbnail_pic();
assertTrue( original_pic.length() > 0 );
assertTrue( bmiddle_pic.length() > 0 );
assertTrue( thumbail_pic.length() > 0 );
// clean up
fanfou.destroyStatus(status.getId());
}
// 公开搜索
public void testSearch() throws Exception {
QueryResult result = fanfou.search(new Query("哈"));
// search result is not null
List<Status> status = result.getStatus();
assertTrue(!status.isEmpty());
assertTrue(status.size() > 0);
for (Status s : status) {
assertTrue( s.getId().length() > 0);
// System.out.println(s.getText());
}
}
// 热词
public void testGetTrends() throws Exception {
Trends trends = fanfou.getTrends();
assertTrue(trends.getAsOf() instanceof Date);
Trend[] trend_array = trends.getTrends();
assertTrue( trend_array.length > 0 );
for (Trend t : trend_array) {
String name = t.getName();
String url = t.getUrl();
String query = t.getQuery();
assertTrue( url.length() > 0 );
assertTrue( query.length() > 0 );
assertTrue( name.length() > 0 );
}
}
// 显示好友列表
public void testGetFirendStatus() throws Exception {
List<User> users = fanfou.getFriendsStatuses();
// The user has more then one friend
assertTrue( users.size() > 1 );
assertTrue( users.get(0).getId().length() > 0 );
// all users' name
// for (User u : users) {
// System.out.println(u.getName());
// }
// Get the other user's friends
User san = fanfou.showUser(TO_USER_ID);
// Test by user id
List<User> users_by_id = fanfou.getFriendsStatuses(san.getId());
assertTrue(users_by_id.size() > 1);
for (User u : users_by_id) {
// System.out.println(u.getName());
assertTrue( u.getName().length() > 0 );
}
// Test by user id and paging
User fan = fanfou.showUser("wangxing");
assertTrue( fan.getName().length() > 0 );
int friend_count = fan.getFriendsCount();
List<User> users_by_page_1 = fanfou.getFriendsStatuses(fan.getId(),
new Paging(1));
// All friends' name
// for (User u : users_by_page_1 ) {
// System.out.println(u.getName());
// }
// The user(王兴) has 50 friends at least
// System.out.println(users_by_page_1.size());
assertTrue( users_by_page_1.size() > 50 );
}
// 显示关注者列表
public void testGetFollowersStatuses() throws Exception {
// default user
List<User> followers = fanfou.getFollowersStatuses();
// I only have few followers(more then one)
// assertTrue(followers.size() > 1);
// User(fanfou)
User fan = fanfou.showUser("fanfou");
List<User> followers_of_fanfou = fanfou.getFollowersStatuses(fan.getId());
List<User> followers_of_fanfou_page_2 = fanfou.getFollowersStatuses(fan.getId(), new Paging(2));
// He has a lot of followers
assertTrue(followers_of_fanfou.size() > 50);
assertTrue( followers_of_fanfou.get(5).getName().length() > 0 );
// He definitely has two page of followers
assertTrue(followers_of_fanfou_page_2.size() > 50);
}
// 显示用户详细信息
public void testShowUser() throws Exception {
// update a status for test user's last status
Status status = fanfou.updateStatus(msg);
// need to test(not all)
Map<String, Object> expect = new HashMap<String, Object>();
expect.put("id", "aFanfou");
expect.put("name", "aFanfou");
expect.put("screen_name", "aFanfou");
expect.put("location", "湖北 武汉");
expect.put("gender", "男");
expect.put("birthday", "2011-01-01");
expect.put("description", "fanfou android app");
expect.put("url", new URL("http://www.sandin.tk"));
expect.put("created_at", new Date("Fri Dec 10 06:41:43 +0000 2010"));
expect.put("utc_offset", 28800);
expect.put("following", false);
expect.put("status_text", msg);
expect.put("is_protected", false);
expect.put("notifications", false);
// not for sure
expect.put("profile_image_url", new URL("http://avatar1.fanfou.com/s0/00/00/00.jpg")); //default photo
expect.put("source", "API");
// expect.put("friends_count", 3);
// expect.put("followers_count", 0);
// expect.put("favourites_count", 0);
// expect.put("statuses_count", 16);
// get user info
User myself = fanfou.showUser(fanfou.getUserId());
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", myself.getId());
map.put("screen_name", myself.getScreenName());
map.put("location", myself.getLocation());
map.put("gender", myself.getGender());
map.put("birthday", myself.getBirthday());
map.put("description", myself.getDescription());
map.put("profile_image_url", myself.getProfileImageURL());
map.put("url", myself.getURL());
map.put("followers_count", myself.getFollowersCount());
map.put("favourites_count", myself.getFavouritesCount());
map.put("statuses_count", myself.getStatusesCount());
map.put("is_protected", myself.isProtected());
map.put("created_at", myself.getCreatedAt());
map.put("following", myself.isFollowing());
map.put("notifications", myself.isNotificationEnabled());
map.put("utc_offset", myself.getUtcOffset());
//The last status
map.put("status_created_at", myself.getStatusCreatedAt());
map.put("status_id", myself.getStatusId());
map.put("status_text", myself.getStatusText());
map.put("status_source", myself.getStatusSource());
map.put("status_trencated", myself.isStatusTruncated());
map.put("status_in_reply_to_status_id", myself.getStatusInReplyToStatusId());
map.put("status_in_reply_to_user_id", myself.getStatusInReplyToUserId());
map.put("status_in_reply_to_screen_name", myself.getStatusInReplyToScreenName());
map.put("status_favorited", myself.isStatusFavorited());
// TEST ALL
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
Object value = map.get(key);
Object expect_value = expect.get(key);
if (value != null && expect_value != null ) {
assertTrue(expect.get(key).equals(value));
// System.out.println(expect.get(key).equals(value));
// System.out.println(expect_value);
// System.out.println(value);
// System.out.println("--------------------------------");
} else if ( value == null ) {
// System.out.println(key + " is NULL...............");
// System.out.println("--------------------------------");
} else if (expect_value == null) {
// System.out.println(key + " is not been tested.");
// System.out.println("--------------------------------");
} else {
// System.out.println(key + " [skip].");
// System.out.println("--------------------------------");
fail(key + " is skip.");
}
}
// clean up
fanfou.destroyStatus(status.getId());
}
// 发送私信
public void testSendDirectMessage() throws Exception {
User sender = fanfou.showUser(fanfou.getUserId());
DirectMessage message = fanfou.sendDirectMessage(TO_USER_ID, msg);
String msg_id = message.getId();
String msg_text = message.getText();
assertTrue( msg_id.length() > 0);
assertTrue( msg_text.length() > 0);
assertTrue( message.getSender().getId().equals(sender.getId()) );
assertTrue( message.getRecipient().getId().equals(TO_USER_ID) );
// clean up
fanfou.destroyDirectMessage(message.getId());
}
// 显示用户收到的私信
public void testGetDirectMessage() throws Exception {
List<DirectMessage> messages = fanfou.getDirectMessages();
// for (DirectMessage m : messages) {
// System.out.println(messages);
// }
// more then one message
assertTrue( messages.size() > 0);
assertTrue( messages.get(0).getText().length() > 0 );
}
// 显示用户发送的私信
public void testGetSendDirectMessage() throws Exception {
User to = fanfou.showUser(TO_USER_ID);
// send a message for test
DirectMessage message = fanfou.sendDirectMessage(TO_USER_ID, msg);
// get all sent message
List<DirectMessage> messages = fanfou.getSentDirectMessages();
// more then one message
assertTrue( messages.size() > 1);
// the last message's target is TO_USER_ID
User getTo = messages.get(0).getRecipient();
assertTrue( getTo.equals(to) );
assertTrue( messages.get(0).equals(message));
// clean up
fanfou.destroyDirectMessage(message.getId());
}
// 删除私信
public void testDestoryDirectMessages() throws Exception {
// for (int i =0 ; i < 10; i++) {
// fanfou.sendDirectMessage(TO_USER_ID, msg);
// Thread.sleep(1000);
// }
DirectMessage last_message = fanfou.getSentDirectMessages().get(0);
DirectMessage send = fanfou.sendDirectMessage(TO_USER_ID, msg);
assertTrue( msg.equals(fanfou.getSentDirectMessages().get(0).getText()) );
DirectMessage message = fanfou.destroyDirectMessage(send.getId());
assertTrue( last_message.equals(fanfou.getSentDirectMessages().get(0)) );
}
// 显示用户的收藏列表
public void testGetFavorites() throws Exception {
// my favorites status list
List<Status> favorites = fanfou.getFavorites();
assertTrue(favorites.size() > 0);
assertTrue( favorites.get(0).getId().length() > 0);
// get favorites status list by user id
List<Status> f_by_id = fanfou.getFavorites(fanfou.getUserId());
assertEquals(f_by_id.size(), favorites.size());
// get by paging
List<Status> favorites_1 = fanfou.getFavorites(new Paging(1,1));
assertEquals(1, favorites_1.size());
}
// 收藏某条消息/删除收藏
public void testCreateFavorite() throws Exception {
// save the last favorite for test destroy favorite
Status the_last_favorite = fanfou.getFavorites().get(0);
// create a favorite
String to_favorites = fanfou.showUser(TO_USER_ID).getStatusId();
Status status = fanfou.createFavorite(to_favorites);
// test
List<Status> favorites = fanfou.getFavorites();
assertEquals(status.getId(), favorites.get(0).getId());
// destroy a favorite and test
fanfou.destroyFavorite(to_favorites);
assertEquals(the_last_favorite, fanfou.getFavorites().get(0));
}
// 好友关系方法
public void testFriendship() throws Exception {
// 判断好友关系是否存在
User fan = fanfou.showUser("fanfou");
User myself = fanfou.showUser(fanfou.getUserId());
if ( fanfou.existsFriendship(myself.getId(), fan.getId()) ) {
// "fanfou" is a friend of mine
// 删除好友
fanfou.destroyFriendship(fan.getId());
assertTrue(! fanfou.existsFriendship(myself.getId(), fan.getId()));
} else {
// "fanfou" is not a friend of mine
// 添加好友
fanfou.createFriendship(fan.getId());
assertTrue( fanfou.existsFriendship(myself.getId(), fan.getId()));
}
}
// 好友和关注者方法
public void testGetFriendsIDs() throws Exception {
User myself = fanfou.showUser(fanfou.getUserId());
User my_friend = fanfou.showUser(TO_USER_ID);
// my_friend must be a friend of mine.
assertTrue(fanfou.existsFriendship(myself.getId(), my_friend.getId()) );
String[] id_arr = fanfou.getFriendsIDs().getIDs();
List id_list = Arrays.asList(id_arr);
for (String i: id_arr) {
Log.i("LDS", i);
}
assertTrue(id_list.size() > 0);
assertTrue(id_list.contains(my_friend.getId()));
}
public void testGetFollowersIDs() throws Exception {
IDs ids = fanfou.getFollowersIDs();
assertNotNull(ids);
}
// 黑名单
public void testBlock() throws Exception {
// 两用户为好友
User user = fanfou.showUser("fanfou");
User myself = fanfou.showUser(fanfou.getUserId());
if (! fanfou.existsFriendship(myself.getId(), user.getId()) ) {
fanfou.createFriendship(user.getId());
}
// 加入黑名单, 好友关系自动取消
fanfou.createBlock(user.getId());
assertTrue(! fanfou.existsFriendship(myself.getId(), user.getId()) );
// 移除黑名单
fanfou.destroyBlock(user.getId());
// 手动恢复关注
fanfou.createFriendship(user.getId());
assertTrue( fanfou.existsFriendship(myself.getId(), user.getId()) );
}
// 验证用户
// 错误用户名/密码情况的测试单独在UserTest中
public void testVerifyCredentials() {
try {
User user = fanfou.verifyCredentials();
assertTrue( user.getId().length() > 0 );
} catch (WeiboException e) {
// 成功返回code 200
assertEquals(200, e.getStatusCode());
fail("用户名/密码错误,登录失败。lds");
}
}
// 测试API是否正常
public void testTest() throws Exception {
assertTrue(fanfou.test());
}
// 保存搜索相关的方法
public void testSavedSearch() throws Exception {
// query word
String word = String.valueOf(msg.hashCode());
// create/show saved search
SavedSearch save = fanfou.createSavedSearch(word);
SavedSearch save_search = fanfou.showSavedSearch(save.getId());
assertEquals(save, save_search);
// get saved search
List<SavedSearch> search = fanfou.getSavedSearches();
assertTrue(search.size() > 0);
// Log.i("LDS", word);
// Log.i("LDS", search.get(search.size()-1).getQuery());
assertEquals(word, search.get(search.size()-1).getQuery());
// destroy saved search
for (SavedSearch s : search) {
// System.out.println(s.getName() + s.getId());
fanfou.destroySavedSearch(s.getId());
}
}
*/
}