/* * $HeadURL$ * $Id$ * * Copyright (c) 2006-2010 by Public Library of Science * http://plos.org * http://ambraproject.org * * 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.ambraproject.service.search; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import java.util.SimpleTimeZone; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotSame; /** * TODO: Use different arrays for each of the different array-type fields. * * @author Scott Sterling */ public class SearchParametersTest { private static final String test = "This is a generic test String, with punctuation and some special characters: !@#$%^&*()[]{}"; private static final String empty = ""; private static final String trimTestPrefix = " \r \t \r "; private static final String trimTestSuffix = "\t \r \t"; private static final String[] inputStringArray = {null, trimTestPrefix + "element Two", null, null, null, "element Six with some special characters: !@#$%^&*()[]{}", "", "", null, "", trimTestPrefix + "element Eleven" + trimTestSuffix, "element Twelve" + trimTestSuffix}; private static final String[] inputStringArray2 = { "element Two" }; private static final String[] outputStringArray = {"element Two", "element Six with some special characters: !@#$%^&*()[]{}", "element Eleven", "element Twelve"}; private static final String[] whitespaceAndNullElementsStringArray = {trimTestPrefix, null, null, "", "", null, trimTestSuffix, "", "",}; // Should output empty array @BeforeTest public void setUp() { SimpleTimeZone.setDefault(SimpleTimeZone.getTimeZone("PST")); } @Test public void testQuery() throws Exception { SearchParameters sp = new SearchParameters(); sp.setQuery(test); assertEquals(sp.getQuery(), test); sp.setQuery(null); assertEquals(sp.getQuery(), empty); // Should never return null sp.setQuery(trimTestPrefix + test + trimTestSuffix); assertEquals(sp.getQuery(), test); // test "trim" of field } @Test public void testUnformattedQuery() throws Exception { SearchParameters sp = new SearchParameters(); sp.setUnformattedQuery(test); assertEquals(sp.getUnformattedQuery(), test); sp.setUnformattedQuery(null); assertEquals(sp.getUnformattedQuery(), empty); // Should never return null sp.setUnformattedQuery(trimTestPrefix + test + trimTestSuffix); assertEquals(sp.getUnformattedQuery(), test); // test "trim" of field } @Test public void testVolume() throws Exception { SearchParameters sp = new SearchParameters(); sp.setVolume(test); assertEquals(sp.getVolume(), test); sp.setVolume(null); assertEquals(sp.getVolume(), empty); // Should never return null sp.setVolume(trimTestPrefix + test + trimTestSuffix); assertEquals(sp.getVolume(), test); // test "trim" of field } @Test public void testELocationId() throws Exception { SearchParameters sp = new SearchParameters(); sp.setELocationId(test); assertEquals(sp.getELocationId(), test); sp.setELocationId(null); assertEquals(sp.getELocationId(), empty); // Should never return null sp.setELocationId(trimTestPrefix + test + trimTestSuffix); assertEquals(sp.getELocationId(), test); // test "trim" of field } @Test public void testId() throws Exception { SearchParameters sp = new SearchParameters(); sp.setId(test); assertEquals(sp.getId(), test); sp.setId(null); assertEquals(sp.getId(), empty); // Should never return null sp.setId(trimTestPrefix + test + trimTestSuffix); assertEquals(sp.getId(), test); // test "trim" of field } @Test public void testLimitToCategory() throws Exception { SearchParameters sp = new SearchParameters(); sp.setFilterSubjects(whitespaceAndNullElementsStringArray); assertEquals(sp.getFilterSubjects().length, 0); sp.setFilterSubjects(null); assertEquals(sp.getFilterSubjects().length, 0); // Should never return null sp.setFilterSubjects(inputStringArray); for (int i = 0 ; i < sp.getFilterSubjects().length ; i++) { assertEquals(sp.getFilterSubjects()[i], outputStringArray[i]); } } @Test public void testfilterJournals() throws Exception { SearchParameters sp = new SearchParameters(); sp.setFilterJournals(whitespaceAndNullElementsStringArray); assertEquals(sp.getFilterJournals().length, 0); sp.setFilterJournals(null); assertEquals(sp.getFilterJournals().length, 0); // Should never return null sp.setFilterJournals(inputStringArray); for (int i = 0 ; i < sp.getFilterJournals().length ; i++) { assertEquals(sp.getFilterJournals()[i], outputStringArray[i]); } } @Test public void testSort() throws Exception { SearchParameters sp = new SearchParameters(); sp.setSortKey(test); assertEquals(sp.getSortKey(), test); sp.setSortKey(null); assertEquals(sp.getSortKey(), empty); // Should never return null sp.setSortKey(trimTestPrefix + test + trimTestSuffix); assertEquals(sp.getSortKey(), test); // test "trim" of field } @Test public void testStartPage() throws Exception { SearchParameters sp = new SearchParameters(); sp.setStartPage(473); assertEquals(sp.getStartPage(), 473); } @Test public void testPageSize() throws Exception { SearchParameters sp = new SearchParameters(); sp.setPageSize(216); assertEquals(sp.getPageSize(), 216); } /** * Test that everything is copied and that all copies are deep copies, meaning that there are * no references from the copy back to objects in the original. * @throws Exception */ @Test public void testCopy() throws Exception { SearchParameters sp = new SearchParameters(); sp.setQuery("query: " + test); sp.setVolume("volume: " + test); sp.setELocationId("eLocationId: " + test); sp.setId("id: " + test); sp.setUnformattedQuery("unformattedQuery: " + test); sp.setFilterSubjects(inputStringArray); sp.setFilterJournals(inputStringArray); sp.setFilterArticleTypes(inputStringArray); sp.setSortKey("sort: " + test); sp.setStartPage(473); sp.setPageSize(216); SearchParameters spCopy = sp.copy(); assertEquals(spCopy.getQuery(), sp.getQuery()); sp.setQuery(test); assertNotSame(spCopy.getQuery(), sp.getQuery()); assertEquals(spCopy.getUnformattedQuery(), sp.getUnformattedQuery()); sp.setUnformattedQuery(test); assertNotSame(spCopy.getUnformattedQuery(), sp.getUnformattedQuery()); assertEquals(spCopy.getVolume(), sp.getVolume()); sp.setVolume(test); assertNotSame(spCopy.getVolume(), sp.getVolume()); assertEquals(spCopy.getELocationId(), sp.getELocationId()); sp.setELocationId(test); assertNotSame(spCopy.getELocationId(), sp.getELocationId()); assertEquals(spCopy.getId(), sp.getId()); sp.setId(test); assertNotSame(spCopy.getId(), sp.getId()); for (int i = 0 ; i < sp.getFilterSubjects().length ; i++) { assertEquals(sp.getFilterSubjects()[i], spCopy.getFilterSubjects()[i]); } sp.setFilterSubjects(new String[]{}); assertNotSame(spCopy.getFilterSubjects().length, sp.getFilterSubjects().length); for (int i = 0 ; i < sp.getFilterJournals().length ; i++) { assertEquals(sp.getFilterJournals()[i], spCopy.getFilterJournals()[i]); } sp.setFilterJournals(new String[]{}); assertNotSame(spCopy.getFilterJournals().length, sp.getFilterJournals().length); for (int i = 0 ; i < sp.getFilterArticleTypes().length ; i++) { assertEquals(sp.getFilterArticleTypes()[i], spCopy.getFilterArticleTypes()[i]); } sp.setFilterArticleTypes(new String[]{}); assertNotSame(spCopy.getFilterArticleTypes().length, sp.getFilterArticleTypes().length); assertEquals(spCopy.getSortKey(), sp.getSortKey()); sp.setSortKey(test); assertNotSame(spCopy.getSortKey(), sp.getSortKey()); assertEquals(spCopy.getStartPage(), sp.getStartPage()); sp.setStartPage(932); assertNotSame(spCopy.getStartPage(), sp.getStartPage()); assertEquals(spCopy.getPageSize(), sp.getPageSize()); sp.setPageSize(47); assertNotSame(spCopy.getPageSize(), sp.getPageSize()); spCopy = null; assertFalse(sp.equals(spCopy)); } @Test public void testToString() throws Exception { SearchParameters sp = new SearchParameters(); sp.setQuery("queryString"); sp.setUnformattedQuery("unformattedQueryString"); sp.setVolume("volumeString"); sp.setELocationId("eLocationIdString"); sp.setId("idString"); sp.setFilterSubjects(inputStringArray); sp.setFilterSubjectsDisjunction(inputStringArray2); sp.setFilterJournals(inputStringArray); sp.setFilterAuthors(inputStringArray); sp.setFilterKeyword("keyword"); sp.setFilterArticleTypes(inputStringArray); sp.setSortKey("sortString"); sp.setSortValue("sortValue"); sp.setStartPage(473); sp.setPageSize(216); sp.setResultView("fig"); assertEquals(sp.toString(), "SearchParameters{query='queryString'," + " unformattedQuery='unformattedQueryString'," + " volume='volumeString'," + " eLocationId='eLocationIdString'," + " id='idString'," + " filterSubjects=[element Two, element Six with some special characters: !@#$%^&*()[]{}, element Eleven, element Twelve]," + " filterSubjectsDisjunction=[element Two]," + " filterAuthors=[element Two, element Six with some special characters: !@#$%^&*()[]{}, element Eleven, element Twelve]," + " filterKeyword='keyword'," + " filterArticleType=[element Two, element Six with some special characters: !@#$%^&*()[]{}, element Eleven, element Twelve]," + " filterJournals=[element Two, element Six with some special characters: !@#$%^&*()[]{}, element Eleven, element Twelve]," + " filterStartDate=null," + " filterEndDate=null," + " sortKey='sortString'," + " sortValue='sortValue'," + " startPage=473," + " pageSize=216," + " resultView='fig'}"); } }