/*
* Copyright (c) 2015-present, Parse, LLC.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.parse;
import org.json.JSONObject;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = TestHelper.ROBOLECTRIC_SDK_VERSION)
public class LocalIdManagerTest {
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void testLocalIdManager() throws Exception {
LocalIdManager manager = new LocalIdManager(temporaryFolder.newFolder("test"));
manager.clear();
String localId1 = manager.createLocalId();
assertNotNull(localId1);
manager.retainLocalIdOnDisk(localId1); // refcount = 1
assertNull(manager.getObjectId(localId1));
String localId2 = manager.createLocalId();
assertNotNull(localId2);
manager.retainLocalIdOnDisk(localId2); // refcount = 1
assertNull(manager.getObjectId(localId2));
manager.retainLocalIdOnDisk(localId1); // refcount = 2
assertNull(manager.getObjectId(localId1));
assertNull(manager.getObjectId(localId2));
manager.releaseLocalIdOnDisk(localId1); // refcount = 1
assertNull(manager.getObjectId(localId1));
assertNull(manager.getObjectId(localId2));
String objectId1 = "objectId1";
manager.setObjectId(localId1, objectId1);
assertEquals(objectId1, manager.getObjectId(localId1));
assertNull(manager.getObjectId(localId2));
manager.retainLocalIdOnDisk(localId1); // refcount = 2
assertEquals(objectId1, manager.getObjectId(localId1));
assertNull(manager.getObjectId(localId2));
String objectId2 = "objectId2";
manager.setObjectId(localId2, objectId2);
assertEquals(objectId1, manager.getObjectId(localId1));
assertEquals(objectId2, manager.getObjectId(localId2));
manager.releaseLocalIdOnDisk(localId1); // refcount = 1
assertEquals(objectId1, manager.getObjectId(localId1));
assertEquals(objectId2, manager.getObjectId(localId2));
manager.releaseLocalIdOnDisk(localId1); // refcount = 0
assertNull(manager.getObjectId(localId1));
assertEquals(objectId2, manager.getObjectId(localId2));
manager.releaseLocalIdOnDisk(localId2); // refcount = 0
assertNull(manager.getObjectId(localId1));
assertNull(manager.getObjectId(localId2));
assertFalse(manager.clear());
}
@Test
public void testLongSerialization() throws Exception {
long expected = 0x8000000000000000L;
JSONObject object = new JSONObject();
object.put("hugeNumber", expected);
String json = object.toString();
object = new JSONObject(json);
long actual = object.getLong("hugeNumber");
assertEquals(expected, actual);
}
}