@Test public void testHandleAckMessage() throws Exception { assertNotNull(helper); // Data will store in memory. helper.handleAckMessage(createDingAckMessage("1", "-1", "user1")); assertEquals(helper.getDataCache().size(), 1); LruCache<String, List<String>> msgCache = helper.getDataCache().get("1"); assertNotNull(msgCache); List<String> userList = msgCache.get("-1"); assertNotNull(userList); assertEquals(userList.size(), 1); assertEquals(userList.get(0), "user1"); // Data will store in SharedPreferences too. assertTrue(helper.getDataPrefs().contains(helper.generateKey("1", "-1"))); }
@Test public void testDelete() throws Exception { testHandleAckMessage(); helper.delete(createDingMessage("1", "-1")); // Data removed from memory. LruCache<String, List<String>> msgCache = helper.getDataCache().get("1"); assertTrue(msgCache.get("-1") == null); // Data removed from SharedPreferences. assertTrue(!helper.getDataPrefs().contains(helper.generateKey("1", "-1"))); }
@Test public void testWeakReference() throws Exception { for (int i = 0; i < 10; i++) { helper.setUserUpdateListener(createDingMessage(String.valueOf(i), String.valueOf(-i)), new EaseDingMessageHelper.IAckUserUpdateListener() { @Override public void onUpdate(List<String> list) { } }); } Runtime.getRuntime().gc(); SystemClock.sleep(1000); WeakReference<EaseDingMessageHelper.IAckUserUpdateListener> listenerRefs = helper.getListenerMap().get("-1"); System.out.println("listenerRefs get() -> " + listenerRefs.get()); assertTrue(true); }
@Test public void testGetAckUsers() throws Exception { // Clear memory cache first. helper.getDataCache().evictAll(); assertEquals(helper.getDataCache().size(), 0); // After this action, the data will store in memory. helper.getAckUsers(createDingMessage("1", "-1")); assertEquals(helper.getDataCache().size(), 1); }
@Test public void testLruCache() throws Exception { /** * {@link EaseDingMessageHelper#dataCache} dataCache can contains {@link EaseDingMessageHelper#CACHE_SIZE_CONVERSATION} * size of conversations at most. */ // Clear memory cache first. helper.getDataCache().evictAll(); // Create size + 1 ding-type ack msg and add to dataCache. for (int i = 0; i <= EaseDingMessageHelper.CACHE_SIZE_CONVERSATION; i++) { helper.handleAckMessage(createDingAckMessage(String.valueOf(i), String.valueOf(-i), String.valueOf("user" + i))); } assertEquals(helper.getDataCache().size(), EaseDingMessageHelper.CACHE_SIZE_CONVERSATION); /** * Every conversation can contains {@link EaseDingMessageHelper#CACHE_SIZE_MESSAGE} size of ding-type msg at most. */ // Clear memory cache first. helper.getDataCache().evictAll(); for (int i = 0; i <= EaseDingMessageHelper.CACHE_SIZE_MESSAGE; i++) { helper.handleAckMessage(createDingAckMessage("1", String.valueOf(-i), String.valueOf("user" + i))); } LruCache<String, List<String>> msgCache = helper.getDataCache().get("1"); assertEquals(msgCache.size(), EaseDingMessageHelper.CACHE_SIZE_MESSAGE); }