/** * Copyright 2008 Google 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 org.waveprotocol.wave.model.wave; import junit.framework.TestCase; import org.waveprotocol.wave.model.document.util.EmptyDocument; import org.waveprotocol.wave.model.testing.FakeWaveletDataListener; import org.waveprotocol.wave.model.version.HashedVersion; import org.waveprotocol.wave.model.wave.data.BlipData; import org.waveprotocol.wave.model.wave.data.ObservableWaveletData; import java.util.Collections; import java.util.List; /** * Black-box test of the {@link ObservableWaveletData} interface. This only * tests the parts specific to {@code ObservableWaveData} * * To create a concrete test case, subclass this with an appropriate factory * for creating an {@code ObservableWaveData}. * */ public abstract class ObservableWaveletDataTestBase extends TestCase { /** Stub listener to receive events from wavelet being tested. */ private FakeWaveletDataListener listener; private static final ParticipantId fred = new ParticipantId("fred@gwave.com"); private static final ParticipantId jane = new ParticipantId("jane@gwave.com"); private static final List<ParticipantId> noContributors = Collections.emptyList(); private ObservableWaveletData target; /** * Creates an observable wavelet data for testing. */ protected abstract ObservableWaveletData createWaveletData(); @Override public void setUp() throws Exception { super.setUp(); target = createWaveletData(); listener = new FakeWaveletDataListener(); target.addListener(listener); } public void testAddedListenersGetEvents() { target.addParticipant(fred); assertNotNull(listener.getParticipantAdded()); } public void testRemovedListenersStopGettingEvents() { target.removeListener(listener); target.addParticipant(fred); assertNull(listener.getParticipantRemoved()); } public void testVersionChangeEventReceived() { long oldVersion = target.getVersion(); target.setVersion(1234L); assertEquals(oldVersion, listener.getOldVersion()); assertEquals(1234L, listener.getNewVersion()); } public void testHashedVersionChangeEventReceived() { HashedVersion oldVersion = target.getHashedVersion(); HashedVersion newVersion = HashedVersion.of(1234L, new byte[] {4, 4, 4, 4}); target.setHashedVersion(newVersion); assertEquals(oldVersion, listener.getOldHashedVersion()); assertEquals(newVersion, listener.getNewHashedVersion()); } public void testAddParticipantEventReceived() { target.addParticipant(fred); assertEquals(fred, listener.getParticipantAdded()); } public void testRemoveParticipantEventReceived() { target.addParticipant(fred); target.removeParticipant(fred); assertEquals(fred, listener.getParticipantRemoved()); } public void testLastModifiedTimeChangedEventReceived() { long oldLastModifiedTime = target.getLastModifiedTime(); target.setLastModifiedTime(45L); assertEquals(oldLastModifiedTime, listener.getOldLastModifiedTime()); assertEquals(45L, listener.getNewLastModifiedTime()); } public void testBlipDataAddedEventReceived() { BlipData blip1 = createBlip("b+one"); assertEquals(blip1, listener.getBlipDataAdded()); BlipData blip2 = createBlip("b+two"); assertEquals(blip2, listener.getBlipDataAdded()); } public void testBlipContributorAddedEventReceived() { BlipData root = createBlip(); root.addContributor(jane); assertEquals(root, listener.getBlipModified()); assertEquals(jane, listener.getBlipContributorAdded()); } public void testBlipContributorRemovedEventReceived() { BlipData root = createBlip(); root.addContributor(jane); root.removeContributor(jane); assertEquals(root, listener.getBlipModified()); assertEquals(jane, listener.getBlipContributorRemoved()); } public void testBlipTimestampChangedEventReceived() { BlipData root = createBlip(); long oldTimestamp = root.getLastModifiedTime(); root.setLastModifiedTime(47L); assertEquals(root, listener.getBlipModified()); assertEquals(oldTimestamp, listener.getBlipOldTimestamp()); assertEquals(47L, listener.getBlipNewTimestamp()); } public void testBlipSubmitEventReceived() { BlipData root = createBlip(); root.submit(); assertEquals(root, listener.getBlipModified()); } private BlipData createBlip() { return createBlip("b+default"); } private BlipData createBlip(String blipId) { return target.createDocument(blipId, fred, noContributors, EmptyDocument.EMPTY_DOCUMENT, 0L, 0L); } }