| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.supplement; |
| |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.never; |
| import static org.mockito.Mockito.verify; |
| |
| import junit.framework.TestCase; |
| |
| import org.waveprotocol.wave.model.document.Doc; |
| import org.waveprotocol.wave.model.document.operation.automaton.DocumentSchema; |
| import org.waveprotocol.wave.model.document.util.DefaultDocumentEventRouter; |
| import org.waveprotocol.wave.model.document.util.DocProviders; |
| import org.waveprotocol.wave.model.operation.SilentOperationSink; |
| import org.waveprotocol.wave.model.supplement.ObservablePrimitiveSupplement.Listener; |
| import org.waveprotocol.wave.model.wave.data.impl.ObservablePluggableMutableDocument; |
| |
| /** |
| * Test case for {@link GadgetStateCollection}. |
| * |
| */ |
| |
| public class GadgetStateCollectionTest extends TestCase { |
| |
| private static final String GADGET1 = "1"; |
| private static final String GADGET2 = "2"; |
| |
| private Listener listener; |
| private GadgetStateCollection<Doc.E> states; |
| |
| public void testSetGadgetState() { |
| setupDoc(); |
| assertEquals(0, states.getGadgetState(GADGET1).countEntries()); |
| assertEquals(0, states.getGadgetState(GADGET2).countEntries()); |
| states.setGadgetState(GADGET1, "key1", "value1 in 1"); |
| assertEquals(1, states.getGadgetState(GADGET1).countEntries()); |
| assertEquals(0, states.getGadgetState(GADGET2).countEntries()); |
| assertEquals("value1 in 1", states.getGadgetState(GADGET1).get("key1")); |
| states.setGadgetState(GADGET2, "key1", "value1 in 2"); |
| assertEquals(1, states.getGadgetState(GADGET1).countEntries()); |
| assertEquals(1, states.getGadgetState(GADGET2).countEntries()); |
| assertEquals("value1 in 1", states.getGadgetState(GADGET1).get("key1")); |
| assertEquals("value1 in 2", states.getGadgetState(GADGET2).get("key1")); |
| states.setGadgetState(GADGET1, "key1", null); |
| states.setGadgetState(GADGET2, "key2", "value2 in 2"); |
| assertEquals(0, states.getGadgetState(GADGET1).countEntries()); |
| assertEquals(2, states.getGadgetState(GADGET2).countEntries()); |
| assertEquals("value1 in 2", states.getGadgetState(GADGET2).get("key1")); |
| assertEquals("value2 in 2", states.getGadgetState(GADGET2).get("key2")); |
| } |
| |
| public void testGadgetStateEvents() { |
| setupDoc(); |
| never(); |
| states.setGadgetState(GADGET1, "key1", "value1 in 1"); |
| verify(listener).onGadgetStateChanged(GADGET1, "key1", null, "value1 in 1"); |
| states.setGadgetState(GADGET2, "key1", "value1 in 2"); |
| verify(listener).onGadgetStateChanged(GADGET2, "key1", null, "value1 in 2"); |
| states.setGadgetState(GADGET1, "key1", "value2 in 1"); |
| verify(listener).onGadgetStateChanged(GADGET1, "key1", "value1 in 1", "value2 in 1"); |
| states.setGadgetState(GADGET2, "key1", null); |
| verify(listener).onGadgetStateChanged(GADGET2, "key1", "value1 in 2", null); |
| } |
| |
| private void setupDoc() { |
| ObservablePluggableMutableDocument doc = |
| new ObservablePluggableMutableDocument( |
| DocumentSchema.NO_SCHEMA_CONSTRAINTS, DocProviders.POJO.parse("").asOperation()); |
| doc.init(SilentOperationSink.VOID); |
| listener = mock(Listener.class); |
| states = GadgetStateCollection.create(DefaultDocumentEventRouter.create(doc), |
| doc.getDocumentElement(), listener); |
| } |
| } |