/** * Copyright 2010 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.data.impl; import junit.framework.TestCase; import org.waveprotocol.wave.model.id.WaveId; import org.waveprotocol.wave.model.id.WaveletId; import org.waveprotocol.wave.model.version.HashedVersion; import org.waveprotocol.wave.model.wave.ParticipantId; import org.waveprotocol.wave.model.wave.data.ObservableWaveletData; import org.waveprotocol.wave.model.wave.data.ReadableWaveletData; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; /** */ public class WaveViewDataImplTest extends TestCase { private static final WaveId WAVE_ID = WaveId.of("example.com", "wave"); private static final WaveletId WAVELET_IDS[] = new WaveletId[] { WaveletId.of("example.com", "wavelet"), WaveletId.of("example.com", "wavelet1"), WaveletId.of("example.com", "wavelet2"), }; private static final long CREATE_TIMESTAMP = 123456789; private static final ParticipantId CREATOR = new ParticipantId("nobody@example.com"); private static final WaveletDataImpl.Factory EMPTY_DATA_FACTORY = WaveletDataImpl.Factory.create(StubDocumentFactory.INSTANCE); public void testEmptyViewHasNoWavelet() throws Exception { WaveViewDataImpl impl = WaveViewDataImpl.create(WAVE_ID); for (WaveletId id : WAVELET_IDS) { assertNull(impl.getWavelet(id)); } assertEquals(0, getWavelets(impl).size()); } public void testGetWaveletReturnsAllWavelets() throws Exception { List<ObservableWaveletData> list = new ArrayList<ObservableWaveletData>(); for (WaveletId id : WAVELET_IDS) { ObservableWaveletData n = EMPTY_DATA_FACTORY.create(new EmptyWaveletSnapshot(WAVE_ID, id, CREATOR, HashedVersion.unsigned(0), CREATE_TIMESTAMP)); list.add(n); } WaveViewDataImpl impl = WaveViewDataImpl.create(WAVE_ID, list); for (ObservableWaveletData data : impl.getWavelets()) { if (!list.remove(data)) { fail("Seeded data not available"); } } assertEquals(0, list.size()); } public void testAddedWaveletsAreAccessible() throws Exception { final Map<WaveletId, ObservableWaveletData> createdWavelet = new HashMap<WaveletId, ObservableWaveletData>(); WaveViewDataImpl impl = WaveViewDataImpl.create(WAVE_ID); ObservableWaveletData.Factory<ObservableWaveletData> dataFactory = new ObservableWaveletData.Factory<ObservableWaveletData>() { @Override public ObservableWaveletData create(ReadableWaveletData data) { ObservableWaveletData n = EMPTY_DATA_FACTORY.create(data); createdWavelet.put(data.getWaveletId(), n); return n; } }; for (WaveletId id : WAVELET_IDS) { impl.addWavelet(dataFactory.create( new EmptyWaveletSnapshot(WAVE_ID, id, CREATOR, HashedVersion.unsigned(0), CREATE_TIMESTAMP))); } // check to see if added wavelet can get get backed. for (WaveletId id : WAVELET_IDS) { assertEquals(createdWavelet.get(id), impl.getWavelet(id)); } // test to make sure remove works correctly. int numItemsLeft = WAVELET_IDS.length; for (WaveletId id : WAVELET_IDS) { assertEquals(numItemsLeft, getWavelets(impl).size()); impl.removeWavelet(id); assertEquals(--numItemsLeft, getWavelets(impl).size()); } } public void testCannotCreateDuplicatedWavelet() throws Exception { WaveViewDataImpl impl = WaveViewDataImpl.create(WAVE_ID); ObservableWaveletData.Factory<ObservableWaveletData> dataFactory = new ObservableWaveletData.Factory<ObservableWaveletData>() { @Override public ObservableWaveletData create(ReadableWaveletData data) { ObservableWaveletData n = EMPTY_DATA_FACTORY.create(data); return n; } }; impl.addWavelet(dataFactory.create( new EmptyWaveletSnapshot(WAVE_ID, WAVELET_IDS[0], CREATOR, HashedVersion.unsigned(0), CREATE_TIMESTAMP))); try { impl.addWavelet(dataFactory.create( new EmptyWaveletSnapshot(WAVE_ID, WAVELET_IDS[0], CREATOR, HashedVersion.unsigned(0), CREATE_TIMESTAMP))); fail("Exception expected"); } catch (IllegalArgumentException e) { // expected an exception } } public void testCannotRemoveNonExistentWavelet() throws Exception { WaveViewDataImpl impl = WaveViewDataImpl.create(WAVE_ID); try { impl.removeWavelet(WAVELET_IDS[0]); fail("Exception expected"); } catch (IllegalArgumentException e) { // expected an exception } } private Collection<ObservableWaveletData> getWavelets(WaveViewDataImpl view) { List<ObservableWaveletData> list = new ArrayList<ObservableWaveletData>(); for (ObservableWaveletData w : view.getWavelets()) { list.add(w); } return list; } }