/**
* 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;
import com.couchbase.lite.internal.Body;
import com.couchbase.lite.internal.RevisionInternal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class ChangesTest extends LiteTestCaseWithDB {
private int changeNotifications = 0;
public void testChangeNotification() throws Exception {
changeNotifications = 0;
Database.ChangeListener changeListener = new Database.ChangeListener() {
@Override
public void changed(Database.ChangeEvent event) {
changeNotifications++;
}
};
// add listener to database
database.addChangeListener(changeListener);
// create a document
Map<String, Object> documentProperties = new HashMap<String, Object>();
documentProperties.put("foo", 1);
documentProperties.put("bar", false);
documentProperties.put("baz", "touch");
Body body = new Body(documentProperties);
RevisionInternal rev1 = new RevisionInternal(body);
Status status = new Status();
rev1 = database.putRevision(rev1, null, false, status);
assertEquals(1, changeNotifications);
}
public void testLocalChangesAreNotExternal() throws Exception {
changeNotifications = 0;
Database.ChangeListener changeListener = new Database.ChangeListener() {
@Override
public void changed(Database.ChangeEvent event) {
changeNotifications++;
assertFalse(event.isExternal());
}
};
database.addChangeListener(changeListener);
// Insert a document locally.
Document document = database.createDocument();
document.createRevision().save();
// Make sure that the assertion in changeListener was called.
assertEquals(1, changeNotifications);
}
public void testPulledChangesAreExternal() throws Exception {
changeNotifications = 0;
Database.ChangeListener changeListener = new Database.ChangeListener() {
@Override
public void changed(Database.ChangeEvent event) {
changeNotifications++;
assertTrue(event.isExternal());
}
};
database.addChangeListener(changeListener);
// Insert a document as if it came from a remote source.
RevisionInternal rev = new RevisionInternal("docId", "1-1111", false);
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("_id", rev.getDocID());
properties.put("_rev", rev.getRevID());
rev.setProperties(properties);
database.forceInsert(rev, Arrays.asList(rev.getRevID()), getReplicationURL());
// Make sure that the assertion in changeListener was called.
assertEquals(1, changeNotifications);
}
}