/** * 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.client.wavepanel.impl.toolbar.gadget; import junit.framework.TestCase; import static org.mockito.Mockito.*; import org.waveprotocol.wave.client.wavepanel.impl.toolbar.gadget.GadgetInfoProviderImpl; import org.waveprotocol.wave.client.wavepanel.impl.toolbar.gadget.GadgetInfoProvider.GadgetCategoryType; import org.waveprotocol.wave.client.wavepanel.impl.toolbar.gadget.GadgetInfoProvider.GadgetInfo; import java.util.ArrayList; import java.util.List; /** * Tests for the {@link GadgetInfoProvider} class. * * @author wavegrove@gmail.com */ public class GadgetInfoProviderTest extends TestCase { GadgetInfoProviderImpl gadgetInfoProvider; ArrayList<GadgetInfo> gadgetInfoList; private static final GadgetInfo gadget1 = new GadgetInfo( "firstTestName", "A description", GadgetCategoryType.VOTING, GadgetCategoryType.OTHER, "gadgetUrl1", "gadgetAuthor1", "gadgetSubmittor1", "gadgetImage1"); private static final GadgetInfo gadget2 = new GadgetInfo( "SecondTestname", "This is a test DESCRIPTION", GadgetCategoryType.PRODUCTIVITY, GadgetCategoryType.OTHER, "gadgetUrl2", "gadgetAuthor2", "gadgetSubmittor2", "gadgetImage2"); private static final GadgetInfo gadget3 = new GadgetInfo( "thirdtestNAME", "Description number three", GadgetCategoryType.PRODUCTIVITY, GadgetCategoryType.TEAM, "gadgetUrl3", "gadgetAuthor3", "gadgetSubmittor3", "gadgetImage3"); @Override protected void setUp() throws java.lang.Exception { List<GadgetInfo> gadgetList = new ArrayList<GadgetInfo>(); gadgetList.add(gadget1); gadgetList.add(gadget2); gadgetList.add(gadget3); GadgetInfoParser parser = mock(GadgetInfoParser.class); when(parser.parseGadgetInfoJson(anyString())).thenReturn(gadgetList); gadgetInfoProvider = new GadgetInfoProviderImpl(parser); gadgetInfoProvider.addGadgetJson(""); gadgetInfoList = new ArrayList<GadgetInfo>(); } public void testUnfilteredList() { List<GadgetInfo> infoProviderList = gadgetInfoProvider.getGadgetInfoList("", GadgetCategoryType.ALL.getType()); gadgetInfoList.add(gadget1); gadgetInfoList.add(gadget2); gadgetInfoList.add(gadget3); assertSame("The unfiltered list got the wrong size", 3, infoProviderList.size()); assertSameList(gadgetInfoList, infoProviderList); } public void testFilterFullName() { List<GadgetInfo> infoProviderList = gadgetInfoProvider.getGadgetInfoList("firstTestName", GadgetCategoryType.ALL.getType()); gadgetInfoList.add(gadget1); assertSame("The filter text 'firstTestName' resulted in wrong amount of filtered gadgets", 1, infoProviderList.size()); assertSameList(gadgetInfoList, infoProviderList); } public void testFilterPartialName() { List<GadgetInfo> infoProviderList = gadgetInfoProvider.getGadgetInfoList("firstTest", GadgetCategoryType.ALL.getType()); gadgetInfoList.add(gadget1); assertSame("The filter text 'firstTest' resulted in wrong amount of filtered gadgets", 1, infoProviderList.size()); assertSameList(gadgetInfoList, infoProviderList); } public void testFilterCaseInsensitiveName() { List<GadgetInfo> infoProviderList1 = gadgetInfoProvider.getGadgetInfoList("name", GadgetCategoryType.ALL.getType()); List<GadgetInfo> infoProviderList2 = gadgetInfoProvider.getGadgetInfoList("Name", GadgetCategoryType.ALL.getType()); List<GadgetInfo> infoProviderList3 = gadgetInfoProvider.getGadgetInfoList("NAME", GadgetCategoryType.ALL.getType()); gadgetInfoList.add(gadget1); gadgetInfoList.add(gadget2); gadgetInfoList.add(gadget3); assertSame("The filter text 'name' resulted in wrong amount of filtered gadgets", 3, infoProviderList1.size()); assertSame("The filter text 'Name' resulted in wrong amount of filtered gadgets", 3, infoProviderList2.size()); assertSame("The filter text 'NAME' resulted in wrong amount of filtered gadgets", 3, infoProviderList3.size()); assertSameList(gadgetInfoList, infoProviderList1); assertSameList(gadgetInfoList, infoProviderList2); assertSameList(gadgetInfoList, infoProviderList3); } public void testFilterPartialDescription() { List<GadgetInfo> infoProviderList = gadgetInfoProvider.getGadgetInfoList("This is a", GadgetCategoryType.ALL.getType()); gadgetInfoList.add(gadget2); assertSame("The filter text 'This is a' resulted in wrong amount of filtered gadgets", 1, infoProviderList.size()); assertSameList(gadgetInfoList, infoProviderList); } public void testFilterCaseInsensitiveDescription() { List<GadgetInfo> infoProviderList1 = gadgetInfoProvider.getGadgetInfoList("description", GadgetCategoryType.ALL.getType()); List<GadgetInfo> infoProviderList2 = gadgetInfoProvider.getGadgetInfoList("Description", GadgetCategoryType.ALL.getType()); List<GadgetInfo> infoProviderList3 = gadgetInfoProvider.getGadgetInfoList("DESCRIPTION", GadgetCategoryType.ALL.getType()); gadgetInfoList.add(gadget1); gadgetInfoList.add(gadget2); gadgetInfoList.add(gadget3); assertSame("The filter text 'description' resulted in wrong amount of filtered gadgets", 3, infoProviderList1.size()); assertSame("The filter text 'Description' resulted in wrong amount of filtered gadgets", 3, infoProviderList2.size()); assertSame("The filter text 'DESCRIPTION' resulted in wrong amount of filtered gadgets", 3, infoProviderList3.size()); assertSameList(gadgetInfoList, infoProviderList1); assertSameList(gadgetInfoList, infoProviderList2); assertSameList(gadgetInfoList, infoProviderList3); } public void testFilterNameAndDescription() { List<GadgetInfo> infoProviderList = gadgetInfoProvider.getGadgetInfoList("test", GadgetCategoryType.ALL.getType()); gadgetInfoList.add(gadget1); gadgetInfoList.add(gadget2); gadgetInfoList.add(gadget3); assertSame("The filter text 'test' resulted in wrong amount of filtered gadgets", 3, infoProviderList.size()); assertSameList(gadgetInfoList, infoProviderList); } public void testFilterPrimaryCategory() { List<GadgetInfo> infoProviderList1 = gadgetInfoProvider.getGadgetInfoList("", GadgetCategoryType.PRODUCTIVITY.getType()); List<GadgetInfo> infoProviderList2 = gadgetInfoProvider.getGadgetInfoList("", GadgetCategoryType.VOTING.getType()); assertSame("The filter category 'PRODUCTIVITY' resulted in wrong amount of filtered gadgets", 2, infoProviderList1.size()); assertSame("The filter category 'VOTING' resulted in wrong amount of filtered gadgets", 1, infoProviderList2.size()); assertSameList(gadgetInfoList, infoProviderList1); assertSameList(gadgetInfoList, infoProviderList2); } public void testFilterSecondaryCategory() { List<GadgetInfo> infoProviderList1 = gadgetInfoProvider.getGadgetInfoList("", GadgetCategoryType.OTHER.getType()); List<GadgetInfo> infoProviderList2 = gadgetInfoProvider.getGadgetInfoList("", GadgetCategoryType.TEAM.getType()); assertSame("The filter category 'OTHER' resulted in wrong amount of filtered gadgets", 2, infoProviderList1.size()); assertSame("The filter category 'TEAM' resulted in wrong amount of filtered gadgets", 1, infoProviderList2.size()); assertSameList(gadgetInfoList, infoProviderList1); assertSameList(gadgetInfoList, infoProviderList2); } public void testFilterNone() { List<GadgetInfo> infoProviderList = gadgetInfoProvider.getGadgetInfoList("abcdefghij", GadgetCategoryType.ALL.getType()); assertSame("The filter text 'abcdefghij' resulted in wrong amount of filtered gadgets", 0, infoProviderList.size()); } private void assertSameList(List<GadgetInfo> expected, List<GadgetInfo> actual) { for (int i = 0; i < expected.size(); i++) { GadgetInfo gadget1 = expected.get(i); GadgetInfo gadget2 = actual.get(i); if (!isEqual(gadget1, gadget2)) { fail("The filtered gadgets are not the same: " + gadget1.getName() + ", " + gadget2.getName()); } } } private boolean isEqual(GadgetInfo gadget1, GadgetInfo gadget2) { if (gadget1.getName().equals(gadget2.getName()) || gadget1.getDescription().equals(gadget2.getDescription()) || gadget1.getGadgetUrl().equals(gadget2.getGadgetUrl()) || gadget1.getImageUrl().equals(gadget2.getImageUrl()) || gadget1.getPrimaryCategory().getType().equals(gadget2.getPrimaryCategory().getType()) || gadget1.getSecondaryCategory().getType().equals(gadget2.getSecondaryCategory().getType()) || gadget1.getSubmittedBy().equals(gadget2.getSubmittedBy()) || gadget1.getAuthor().equals(gadget2.getAuthor())) { return true; } return false; } }