/**
* Copyright 2013 Twitter, Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
package com.twitter.hbc.twitter4j;
import com.twitter.hbc.twitter4j.message.DisconnectMessage;
import com.twitter.hbc.twitter4j.parser.JSONObjectParser;
import org.junit.Before;
import org.junit.Test;
import twitter4j.StatusDeletionNotice;
import twitter4j.TwitterException;
import twitter4j.JSONException;
import twitter4j.JSONObject;
import java.io.IOException;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.fail;
public class JSONObjectParserTest extends ResourceReader {
private final ResourceReader reader = new ResourceReader();
private String statusDeletionNotice;
private String limit;
private String friendsList;
private String sitestreamFriendsList;
private String controlMessage;
private String disconnectMessage;
@Before
public void setup() throws IOException {
statusDeletionNotice = reader.readFile("status-deletion.json");
limit = reader.readFile("limit.json");
friendsList = reader.readFile("friends-list.json");
sitestreamFriendsList = reader.readFile("sitestream-friends-list.json");
controlMessage = reader.readFile("control-message.json");
disconnectMessage = reader.readFile("disconnect-message.json");
}
@Test
public void testParseStatusDelete() throws JSONException {
JSONObject json = new JSONObject(statusDeletionNotice);
StatusDeletionNotice delete = JSONObjectParser.parseStatusDelete(json);
assertEquals(delete.getStatusId(), 1234);
assertEquals(delete.getUserId(), 3);
}
@Test
public void testTrackLimitNotice() throws JSONException {
JSONObject json = new JSONObject(limit);
assertEquals(JSONObjectParser.parseTrackLimit(json), 1234);
}
@Test
public void testParseTestList() throws JSONException, TwitterException {
long[] list = JSONObjectParser.parseFriendList(new JSONObject(friendsList));
assertEquals(list.length, 4);
assertEquals(list[0], 1497);
assertEquals(list[1], 169686021);
assertEquals(list[2], 790205);
assertEquals(list[3], 15211564);
}
@Test
public void testParseSitestreamUserId() throws JSONException {
JSONObject json = new JSONObject(sitestreamFriendsList);
assertTrue(JSONObjectParser.hasSitestreamUser(json));
assertEquals(JSONObjectParser.getSitestreamUser(json), 1888);
}
@Test
public void testParseSitestreamMessage() throws JSONException {
JSONObject json = new JSONObject(sitestreamFriendsList);
assertTrue(JSONObjectParser.hasSitestreamUser(json));
long[] list = JSONObjectParser.parseFriendList(JSONObjectParser.getSitestreamMessage(json));
assertEquals(list[0], 1);
assertEquals(list[1], 2);
assertEquals(list[2], 3);
assertEquals(list[3], 4);
assertEquals(list.length, 4);
}
@Test
public void testMissingFields() throws JSONException {
try {
JSONObject json = new JSONObject("{\"limit\":{}}");
JSONObjectParser.parseTrackLimit(json);
fail();
} catch (JSONException e) {
// expectation
}
}
@Test
public void testParseControlStreamMessage() throws JSONException {
JSONObject json = new JSONObject(controlMessage);
assertFalse(JSONObjectParser.hasSitestreamUser(json));
assertFalse(JSONObjectParser.hasSitestreamMessage(json));
String streamId = JSONObjectParser.getStreamId(json);
assertEquals(streamId, "01_225167_334389048B872A533002B34D73F8C29FD09EFC50");
}
@Test
public void testParseDisconnectMessage() throws JSONException {
JSONObject json = new JSONObject(disconnectMessage);
assertFalse(JSONObjectParser.hasSitestreamUser(json));
assertFalse(JSONObjectParser.hasSitestreamMessage(json));
DisconnectMessage message = JSONObjectParser.parseDisconnectMessage(json);
assertEquals(message.getDisconnectCode(), 5);
assertEquals(message.getStreamName(), "somestreamname123");
assertEquals(message.getDisconnectReason(), "reason for disconnection");
}
}