/**
* Copyright (c) 2016 Couchbase, Inc. All rights reserved.
*
* 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.couchbase.lite.store;
import com.couchbase.lite.Document;
import com.couchbase.lite.LiteTestCaseWithDB;
import com.couchbase.lite.SavedRevision;
import com.couchbase.lite.UnsavedRevision;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* Created by hideki on 7/18/15.
*/
public class SQLiteStoreTest extends LiteTestCaseWithDB {
@Override
public void runBare() throws Throwable {
// Run Unit Test with SQLiteStore
useForestDB = false;
super.runBare();
}
public void testWinningRevIDOfDoc() throws Exception {
if(!isSQLiteDB())
return;
Method m = database.getClass().getDeclaredMethod("getStore");
m.setAccessible(true);
SQLiteStore store = (SQLiteStore)m.invoke(database);
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("testName", "testCreateRevisions");
properties.put("tag", 1337);
Map<String, Object> properties2a = new HashMap<String, Object>();
properties2a.put("testName", "testCreateRevisions");
properties2a.put("tag", 1338);
Map<String, Object> properties2b = new HashMap<String, Object>();
properties2b.put("testName", "testCreateRevisions");
properties2b.put("tag", 1339);
AtomicBoolean outIsDeleted = new AtomicBoolean(false);
AtomicBoolean outIsConflict = new AtomicBoolean(false);
// Create a conflict on purpose
Document doc = database.createDocument();
UnsavedRevision newRev1 = doc.createRevision();
newRev1.setUserProperties(properties);
SavedRevision rev1 = newRev1.save();
long docNumericId = store.getDocNumericID(doc.getId());
assertTrue(docNumericId != 0);
assertEquals(rev1.getId(), store.winningRevIDOfDocNumericID(docNumericId,
outIsDeleted, outIsConflict));
assertFalse(outIsConflict.get());
outIsDeleted.set(false);
outIsConflict.set(false);
UnsavedRevision newRev2a = rev1.createRevision();
newRev2a.setUserProperties(properties2a);
SavedRevision rev2a = newRev2a.save();
assertEquals(rev2a.getId(), store.winningRevIDOfDocNumericID(docNumericId,
outIsDeleted, outIsConflict));
assertFalse(outIsConflict.get());
outIsDeleted.set(false);
outIsConflict.set(true);
UnsavedRevision newRev2b = rev1.createRevision();
newRev2b.setUserProperties(properties2b);
SavedRevision rev2b = newRev2b.save(true);
store.winningRevIDOfDocNumericID(docNumericId, outIsDeleted, outIsConflict);
assertTrue(outIsConflict.get());
}
}