/* ********************************************************************** **
** Copyright notice **
** **
** (c) 2005-2009 RSSOwl Development Team **
** http://www.rssowl.org/ **
** **
** All rights reserved **
** **
** This program and the accompanying materials are made available under **
** the terms of the Eclipse Public License v1.0 which accompanies this **
** distribution, and is available at: **
** http://www.rssowl.org/legal/epl-v10.html **
** **
** A copy is found in the file epl-v10.html and important notices to the **
** license from the team is found in the textfile LICENSE.txt distributed **
** in this package. **
** **
** This copyright notice MUST APPEAR in all copies of the file! **
** **
** Contributors: **
** RSSOwl Development Team - initial API and implementation **
** **
** ********************************************************************** */
package org.rssowl.core.tests.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.junit.Test;
import org.rssowl.core.internal.persist.News;
import org.rssowl.core.internal.persist.search.ModelSearchQueries;
import org.rssowl.core.persist.IAttachment;
import org.rssowl.core.persist.IBookMark;
import org.rssowl.core.persist.ICategory;
import org.rssowl.core.persist.IEntity;
import org.rssowl.core.persist.IFeed;
import org.rssowl.core.persist.IFolder;
import org.rssowl.core.persist.IFolderChild;
import org.rssowl.core.persist.ILabel;
import org.rssowl.core.persist.INews;
import org.rssowl.core.persist.INews.State;
import org.rssowl.core.persist.IPerson;
import org.rssowl.core.persist.ISearchCondition;
import org.rssowl.core.persist.ISearchField;
import org.rssowl.core.persist.SearchSpecifier;
import org.rssowl.core.persist.dao.DynamicDAO;
import org.rssowl.core.persist.reference.FeedLinkReference;
import org.rssowl.core.persist.reference.NewsReference;
import org.rssowl.core.persist.service.PersistenceException;
import org.rssowl.core.tests.TestUtils;
import org.rssowl.core.util.SearchHit;
import org.rssowl.ui.internal.util.ModelUtils;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.EnumSet;
import java.util.List;
/**
* Test searching types from the persistence layer.
*
* @author bpasero
*/
public class ModelSearchTest4 extends AbstractModelSearchTest {
private static final boolean TEST_FAILING_WILDCARD = false;
/**
* @throws Exception
*/
@Test
public void testPhraseSearch_CONTAINS() throws Exception {
try {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
/* Title */
INews news1 = createNews(feed, "Johnny lives hungry Depp", "http://www.news.com/news1.html", State.NEW);
/* Description */
INews news2 = createNews(feed, "News2", "http://www.news.com/news2.html", State.NEW);
news2.setDescription("This is a longer name like Michael Jackson.");
/* Author */
INews news3 = createNews(feed, "News3", "http://www.news.com/news3.html", State.NEW);
IPerson author = fFactory.createPerson(null, news3);
author.setName("Arnold Schwarzenegger");
/* Category */
INews news4 = createNews(feed, "lives", "http://www.news.com/news4.html", State.NEW);
ICategory category = fFactory.createCategory(null, news4);
category.setName("Roberts");
/* Attachment Content */
INews news5 = createNews(feed, "hungry", "http://www.news.com/news5.html", State.NEW);
IAttachment attachment = fFactory.createAttachment(null, news5);
attachment.setLink(new URI("http://www.attachment.com/att1news2.file"));
attachment.setType("Hasselhoff");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"lives hungry\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"longer name like\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"lives hungry\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"longer name like\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"longer name like\"");
ISearchCondition condition2 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1, condition2), false);
assertSame(result, news1, news2);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"longer name like\"");
ISearchCondition condition2 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1, condition2), true);
assertTrue(result.isEmpty());
}
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"lives hungry\" lives hungry");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news4, news5);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"lives hungry\" lives hungry");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news4, news5);
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
/**
* @throws Exception
*/
@Test
public void testPhraseSearch_CONTAINS_ALL() throws Exception {
try {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
/* Title */
INews news1 = createNews(feed, "Johnny lives hungry Depp", "http://www.news.com/news1.html", State.NEW);
/* Description */
INews news2 = createNews(feed, "News2", "http://www.news.com/news2.html", State.NEW);
news2.setDescription("This is a longer name like Michael Jackson.");
/* Author */
INews news3 = createNews(feed, "News3", "http://www.news.com/news3.html", State.NEW);
IPerson author = fFactory.createPerson(null, news3);
author.setName("Arnold Schwarzenegger");
/* Category */
INews news4 = createNews(feed, "lives", "http://www.news.com/news4.html", State.NEW);
ICategory category = fFactory.createCategory(null, news4);
category.setName("Roberts");
/* Attachment Content */
INews news5 = createNews(feed, "hungry", "http://www.news.com/news5.html", State.NEW);
IAttachment attachment = fFactory.createAttachment(null, news5);
attachment.setLink(new URI("http://www.attachment.com/att1news2.file"));
attachment.setType("Hasselhoff");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"lives hungry\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"longer name like\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"lives hungry\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"longer name like\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"longer name like\"");
ISearchCondition condition2 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1, condition2), false);
assertSame(result, news1, news2);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"longer name like\"");
ISearchCondition condition2 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1, condition2), true);
assertTrue(result.isEmpty());
}
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"lives hungry\" lives hungry");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"lives hungry\" lives hung");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertTrue(result.isEmpty());
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
/**
* @throws Exception
*/
@Test
public void testPhraseSearch_CONTAINS_NOT() throws Exception {
try {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
/* Title */
INews news1 = createNews(feed, "Johnny lives hungry Depp", "http://www.news.com/news1.html", State.NEW);
/* Description */
INews news2 = createNews(feed, "News2", "http://www.news.com/news2.html", State.NEW);
news2.setDescription("This is a longer name like Michael Jackson.");
/* Author */
INews news3 = createNews(feed, "News3", "http://www.news.com/news3.html", State.NEW);
IPerson author = fFactory.createPerson(null, news3);
author.setName("Arnold Schwarzenegger");
/* Category */
INews news4 = createNews(feed, "lives", "http://www.news.com/news4.html", State.NEW);
ICategory category = fFactory.createCategory(null, news4);
category.setName("Roberts");
/* Attachment Content */
INews news5 = createNews(feed, "hungry", "http://www.news.com/news5.html", State.NEW);
IAttachment attachment = fFactory.createAttachment(null, news5);
attachment.setLink(new URI("http://www.attachment.com/att1news2.file"));
attachment.setType("Hasselhoff");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"lives hungry\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
}
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
}
{
ISearchField field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"longer name like\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4, news5);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"lives hungry\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"longer name like\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4, news5);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"longer name like\"");
ISearchCondition condition2 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1, condition2), false);
assertSame(result, news1, news2, news3, news4, news5);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"longer name like\"");
ISearchCondition condition2 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"Johnny lives hungry Depp\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1, condition2), true);
assertSame(result, news3, news4, news5);
}
{
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"lives hungry\" lives hungry");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
}
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "\"lives hungry\" lives hungry");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
/**
* @throws Exception
*/
@Test
public void testLocationSearch_BINs() throws Exception {
IFolderChild root = fFactory.createFolder(null, null, "Root");
DynamicDAO.save(root);
IFolderChild child = fFactory.createFolder(null, (IFolder) root, "Child");
DynamicDAO.save(child);
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Title", "http://www.news.com/news1.html", State.NEW);
DynamicDAO.save(feed);
IFolderChild mark = fFactory.createBookMark(null, (IFolder) child, new FeedLinkReference(feed.getLink()), "Mark");
DynamicDAO.save(mark);
IFolderChild bin = fFactory.createNewsBin(null, (IFolder) root, "Bin");
DynamicDAO.save(bin);
News copiedNews = new News((News) news1, bin.getId().longValue());
DynamicDAO.save(copiedNews);
DynamicDAO.save(bin);
/* Wait for Indexer */
waitForIndexer();
{
ISearchField field = fFactory.createSearchField(INews.LOCATION, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, ModelUtils.toPrimitive(Collections.singletonList(mark)));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(INews.LOCATION, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, ModelUtils.toPrimitive(Collections.singletonList(bin)));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertSame(result, copiedNews);
}
{
ISearchField field = fFactory.createSearchField(INews.LOCATION, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, ModelUtils.toPrimitive(Collections.singletonList(child)));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertSame(result, news1);
}
{
ISearchField field = fFactory.createSearchField(INews.LOCATION, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, ModelUtils.toPrimitive(Collections.singletonList(root)));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(2, result.size());
assertSame(result, news1, copiedNews);
}
}
/**
* @throws Exception
*/
@Test
public void testHiddenDeletedNewsNotIndexed_1() throws Exception {
/* First add some Types */
IFeed feed1 = fFactory.createFeed(null, new URI("http://www.feed.com/feed1.xml"));
createNews(feed1, "First News of Feed One", "http://www.news.com/news1.html", State.HIDDEN);
createNews(feed1, "Second News of Feed One", "http://www.news.com/news2.html", State.DELETED);
DynamicDAO.save(feed1);
/* Wait for Indexer */
waitForIndexer();
ISearchField field1 = fFactory.createSearchField(INews.FEED, fNewsEntityName);
ISearchCondition cond1 = fFactory.createSearchCondition(field1, SearchSpecifier.IS, "http://www.feed.com/feed1.xml");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertEquals(0, result.size());
}
/**
* @throws Exception
*/
@Test
public void testHiddenDeletedNewsNotIndexed_2() throws Exception {
/* First add some Types */
IFeed feed1 = fFactory.createFeed(null, new URI("http://www.feed.com/feed1.xml"));
INews news1 = createNews(feed1, "First News of Feed One", "http://www.news.com/news1.html", State.NEW);
INews news2 = createNews(feed1, "Second News of Feed One", "http://www.news.com/news2.html", State.READ);
DynamicDAO.save(feed1);
/* Wait for Indexer */
waitForIndexer();
news1.setState(INews.State.HIDDEN);
news2.setState(INews.State.DELETED);
DynamicDAO.save(feed1);
/* Wait for Indexer */
waitForIndexer();
ISearchField field1 = fFactory.createSearchField(INews.FEED, fNewsEntityName);
ISearchCondition cond1 = fFactory.createSearchCondition(field1, SearchSpecifier.IS, "http://www.feed.com/feed1.xml");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertEquals(0, result.size());
}
/**
* @throws Exception
*/
@Test
public void testRestoredNewsSearchable() throws Exception {
/* First add some Types */
IFeed feed1 = fFactory.createFeed(null, new URI("http://www.feed.com/feed1.xml"));
INews news1 = createNews(feed1, "First News of Feed One", "http://www.news.com/news1.html", State.HIDDEN);
INews news2 = createNews(feed1, "Second News of Feed One", "http://www.news.com/news2.html", State.HIDDEN);
DynamicDAO.save(feed1);
/* Wait for Indexer */
waitForIndexer();
news1.setState(INews.State.NEW);
news2.setState(INews.State.READ);
DynamicDAO.save(feed1);
/* Wait for Indexer */
waitForIndexer();
ISearchField field1 = fFactory.createSearchField(INews.FEED, fNewsEntityName);
ISearchCondition cond1 = fFactory.createSearchCondition(field1, SearchSpecifier.IS, "http://www.feed.com/feed1.xml");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertSame(result, news1, news2);
}
/**
* @throws Exception
*/
@Test
public void testScopeSearch() throws Exception {
/* First add some Types */
IFolder rootFolder = fFactory.createFolder(null, null, "Root");
DynamicDAO.save(rootFolder);
IFolder subFolder1 = fFactory.createFolder(null, rootFolder, "Sub Folder 1");
DynamicDAO.save(subFolder1);
IFolder subFolder2 = fFactory.createFolder(null, rootFolder, "Sub Folder 2");
DynamicDAO.save(subFolder2);
IFeed feed1 = fFactory.createFeed(null, new URI("http://www.feed.com/feed1.xml"));
IFeed feed2 = fFactory.createFeed(null, new URI("http://www.feed.com/feed2.xml"));
IFeed feed3 = fFactory.createFeed(null, new URI("http://www.feed.com/feed3.xml"));
INews news1 = createNews(feed1, "First News of Feed One", "http://www.news.com/news1.html", State.NEW);
INews news2 = createNews(feed2, "First News of Feed Two", "http://www.news.com/news2.html", State.UNREAD);
INews news3 = createNews(feed3, "First News of Feed Three", "http://www.news.com/news3.html", State.READ);
news3.setFlagged(true);
DynamicDAO.save(feed1);
DynamicDAO.save(feed2);
DynamicDAO.save(feed3);
IBookMark bm1 = fFactory.createBookMark(null, rootFolder, new FeedLinkReference(feed1.getLink()), "BM1");
IBookMark bm2 = fFactory.createBookMark(null, subFolder1, new FeedLinkReference(feed2.getLink()), "BM2");
IBookMark bm3 = fFactory.createBookMark(null, subFolder2, new FeedLinkReference(feed3.getLink()), "BM3");
DynamicDAO.save(bm1);
DynamicDAO.save(bm2);
DynamicDAO.save(bm3);
/* Wait for Indexer */
waitForIndexer();
ISearchField fieldLoc = fFactory.createSearchField(INews.LOCATION, fNewsEntityName);
ISearchField fieldState = fFactory.createSearchField(INews.STATE, fNewsEntityName);
ISearchField fieldIsFlagged = fFactory.createSearchField(INews.IS_FLAGGED, fNewsEntityName);
ISearchField fieldAllFields = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
/* Search Test: Simple */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { rootFolder })));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertSame(result, news1, news2, news3);
}
/* Search Test: Simple */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { subFolder1 })));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertSame(result, news2);
}
/* Search Test: Simple */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { subFolder2 })));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertSame(result, news3);
}
/* Search Test: Simple */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { subFolder1, subFolder2 })));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertSame(result, news2, news3);
}
/* Search Test: Simple */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertSame(result, news1, news2, news3);
}
/* Search Test: Simple */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1 })));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertSame(result, news1);
}
/* Search Test: Simple */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, subFolder2 })));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertSame(result, news1, news3);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { rootFolder })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2), false);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { rootFolder })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2), true);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { rootFolder, subFolder2 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2), false);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2), false);
assertTrue(result.isEmpty());
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2), false);
assertTrue(result.isEmpty());
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, new Long[][] { { null }, { null }, { null } });
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1), false);
assertTrue(result.isEmpty());
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, new Long[][] { { null }, { null }, { null } });
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW, INews.State.UNREAD));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2), false);
assertTrue(result.isEmpty());
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { rootFolder })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), false);
assertSame(result, news1, news3);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { rootFolder })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertTrue(result.isEmpty());
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { rootFolder })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "One");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), false);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertTrue(result.isEmpty());
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "One");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), false);
assertSame(result, news1, news3);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertTrue(result.isEmpty());
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "One");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS_ALL, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), false);
assertSame(result, news1, news3);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS_ALL, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertTrue(result.isEmpty());
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS_ALL, "One");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS_NOT, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), false);
assertSame(result, news1, news2);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS_NOT, "Three");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1, bm2, bm3 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS_NOT, "One");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3), true);
assertTrue(result.isEmpty());
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { bm1 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "Three");
ISearchCondition cond4 = fFactory.createSearchCondition(fieldIsFlagged, SearchSpecifier.IS, true);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3, cond4), false);
assertSame(result, news1);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { subFolder1, subFolder2, bm1 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.NEW));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "Three");
ISearchCondition cond4 = fFactory.createSearchCondition(fieldIsFlagged, SearchSpecifier.IS, true);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3, cond4), false);
assertSame(result, news1, news3);
}
/* Search Test: Complex */
{
ISearchCondition cond1 = fFactory.createSearchCondition(fieldLoc, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Arrays.asList(new IFolderChild[] { subFolder1, subFolder2, bm1 })));
ISearchCondition cond2 = fFactory.createSearchCondition(fieldState, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
ISearchCondition cond3 = fFactory.createSearchCondition(fieldAllFields, SearchSpecifier.CONTAINS, "Three");
ISearchCondition cond4 = fFactory.createSearchCondition(fieldIsFlagged, SearchSpecifier.IS, true);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(cond1, cond2, cond3, cond4), true);
assertSame(result, news3);
}
}
/**
* See http://dev.rssowl.org/show_bug.cgi?id=1122
*
* @throws Exception
*/
@Test
@SuppressWarnings("nls")
public void testSearchNewsWithPhraseInCategory() throws Exception {
try {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "Friend", "http://www.news.com/news3.html", State.READ);
ICategory category = fFactory.createCategory(null, news);
category.setName("Global");
news.addCategory(category);
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
/* Condition 1 */
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"Giant Global Graph\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1), false);
assertEquals(0, result.size());
}
/* Condition 2 */
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Giant Global Graph\"");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1), false);
assertEquals(0, result.size());
}
/* Condition 1 */
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Giant Global Graph");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1), false);
assertEquals(0, result.size());
}
/* Condition 1 */
{
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Giant Global Graph");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1), false);
assertEquals(1, result.size());
assertSame(result, news);
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithInvalidLocation() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "Friend", "http://www.news.com/news3.html", State.READ);
ICategory category = fFactory.createCategory(null, news);
category.setName("Global");
news.addCategory(category);
DynamicDAO.save(feed);
IFolder root = fFactory.createFolder(null, null, "Root");
fFactory.createBookMark(null, root, new FeedLinkReference(feed.getLink()), "Bookmark");
DynamicDAO.save(root);
/* Wait for Indexer */
waitForIndexer();
ISearchField field = fFactory.createSearchField(INews.LOCATION, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.IS, new Long[][] { { 10l }, { 20l }, { 30l } });
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1), false);
assertEquals(0, result.size());
}
/**
* @throws Exception
*/
@Test
public void testNewsReindexedWhenLabelChanges() throws Exception {
ILabel label = DynamicDAO.save(fFactory.createLabel(null, "Foo"));
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "News with Label", "http://www.news.com/news3.html", State.READ);
news.addLabel(label);
DynamicDAO.save(feed);
waitForIndexer();
ISearchField field = fFactory.createSearchField(INews.LABEL, fNewsEntityName);
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.IS, "foo");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1), false);
assertEquals(1, result.size());
assertEquals("News with Label", result.get(0).getResult().resolve().getTitle());
label.setName("Bar");
DynamicDAO.save(label);
waitForIndexer();
condition1 = fFactory.createSearchCondition(field, SearchSpecifier.IS, "bar");
result = fModelSearch.searchNews(list(condition1), false);
assertEquals(1, result.size());
assertEquals("News with Label", result.get(0).getResult().resolve().getTitle());
}
/**
* @throws Exception
*/
@Test
public void testMaxClauseCount() throws Exception {
int maxClauseCount = BooleanQuery.getMaxClauseCount();
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
createNews(feed, "Foo", "http://www.news.com/news3.html", State.READ);
DynamicDAO.save(feed);
waitForIndexer();
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchCondition> conditions = new ArrayList<ISearchCondition>();
for (int i = 0; i < 1030; i++) {
ISearchCondition condition1 = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "foo" + i);
conditions.add(condition1);
}
conditions.add(fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "foo"));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(conditions, false);
assertEquals(1, result.size());
assertEquals("Foo", result.get(0).getResult().resolve().getTitle());
BooleanQuery.setMaxClauseCount(maxClauseCount);
}
/**
* @throws Exception
*/
@Test
public void testMaxClauseCountForQuery() throws Exception {
int maxClauseCount = BooleanQuery.getMaxClauseCount();
BooleanQuery.setMaxClauseCount(3);
IFolderChild root = fFactory.createFolder(null, null, "Root");
IFeed feed1 = DynamicDAO.save(fFactory.createFeed(null, new URI("http://www.feed.com/feed1.xml")));
IFeed feed2 = DynamicDAO.save(fFactory.createFeed(null, new URI("http://www.feed.com/feed2.xml")));
IFeed feed3 = DynamicDAO.save(fFactory.createFeed(null, new URI("http://www.feed.com/feed3.xml")));
IFeed feed4 = DynamicDAO.save(fFactory.createFeed(null, new URI("http://www.feed.com/feed4.xml")));
DynamicDAO.save(fFactory.createBookMark(null, (IFolder) root, new FeedLinkReference(feed1.getLink()), "BM1"));
DynamicDAO.save(fFactory.createBookMark(null, (IFolder) root, new FeedLinkReference(feed2.getLink()), "BM1"));
DynamicDAO.save(fFactory.createBookMark(null, (IFolder) root, new FeedLinkReference(feed3.getLink()), "BM1"));
DynamicDAO.save(fFactory.createBookMark(null, (IFolder) root, new FeedLinkReference(feed4.getLink()), "BM1"));
ISearchField field = fFactory.createSearchField(INews.LOCATION, fNewsEntityName);
List<ISearchCondition> conditions = new ArrayList<ISearchCondition>();
conditions.add(fFactory.createSearchCondition(field, SearchSpecifier.IS, ModelUtils.toPrimitive(Collections.singletonList(root))));
Query query = ModelSearchQueries.createQuery(conditions, null, false);
assertNotNull(query);
BooleanQuery.setMaxClauseCount(maxClauseCount);
}
/**
* @throws Exception
*/
@Test
public void testReindexAll() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
createNews(feed, "Foo", "http://www.news.com/news.html", State.NEW);
DynamicDAO.save(feed);
waitForIndexer();
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "foo");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertEquals("Foo", result.get(0).getResult().resolve().getTitle());
fModelSearch.reindexAll(new NullProgressMonitor());
fModelSearch.optimize();
waitForIndexer();
fModelSearch.shutdown(false);
fModelSearch.startup();
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertEquals("Foo", result.get(0).getResult().resolve().getTitle());
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsByAge() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news_1_Minute = fFactory.createNews(null, feed, new Date());
news_1_Minute.setPublishDate(new Date(System.currentTimeMillis() - 1 * MINUTE));
INews news_2_Minutes = fFactory.createNews(null, feed, new Date());
news_2_Minutes.setPublishDate(new Date(System.currentTimeMillis() - 2 * MINUTE));
INews news_1_Hour = fFactory.createNews(null, feed, new Date());
news_1_Hour.setPublishDate(new Date(System.currentTimeMillis() - 60 * MINUTE));
INews news_2_Hours = fFactory.createNews(null, feed, new Date());
news_2_Hours.setPublishDate(new Date(System.currentTimeMillis() - 120 * MINUTE));
INews news_1_Day = fFactory.createNews(null, feed, new Date());
news_1_Day.setPublishDate(new Date(System.currentTimeMillis() - 1 * DAY - 1 * MINUTE));
INews news_2_Days = fFactory.createNews(null, feed, new Date());
news_2_Days.setPublishDate(new Date(System.currentTimeMillis() - 2 * DAY));
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField ageField = fFactory.createSearchField(INews.AGE_IN_DAYS, fNewsEntityName);
/* 1 Minute */
ISearchCondition condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS, -1);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertTrue(result.get(0).getResult().references(news_1_Minute));
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_LESS_THAN, -1);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_GREATER_THAN, -1);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(5, result.size());
/* 2 Minutes */
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS, -2);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertTrue(result.get(0).getResult().references(news_2_Minutes));
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_LESS_THAN, -2);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertTrue(result.get(0).getResult().references(news_1_Minute));
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_GREATER_THAN, -2);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(4, result.size());
/* 1 Hour */
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS, -60);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertTrue(result.get(0).getResult().references(news_1_Hour));
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_LESS_THAN, -60);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(2, result.size());
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_GREATER_THAN, -60);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(3, result.size());
/* 2 Hours */
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS, -120);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertTrue(result.get(0).getResult().references(news_2_Hours));
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_LESS_THAN, -120);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(3, result.size());
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_GREATER_THAN, -120);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(2, result.size());
/* 1 Day */
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS, 1);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertTrue(result.get(0).getResult().references(news_1_Day));
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_LESS_THAN, 1);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(4, result.size());
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_GREATER_THAN, 1);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertTrue(result.get(0).getResult().references(news_2_Days));
/* 2 Days */
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS, 2);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
assertTrue(result.get(0).getResult().references(news_2_Days));
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_LESS_THAN, 2);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(5, result.size());
condition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_GREATER_THAN, 2);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithOddDoubleQuotes() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
createNews(feed, "Hello World", "http://www.news.com/news1.html", State.READ);
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Hello");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Hello World");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"Hello World\"");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Hello\" World");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Hello\" \"World");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "\"Hello World\"\"");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Dash() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "IBM-Microsoft", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Foo", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "Bar", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
ICategory category = fFactory.createCategory(null, news);
category.setName("Apple-Google");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField catField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM-Microsoft");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"IBM-Microsoft\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.CONTAINS_ALL, "Apple-Google");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.BEGINS_WITH, "Apple-");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.ENDS_WITH, "-Google");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.CONTAINS_ALL, "\"Apple-Google\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM-Micr*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM-Micr?soft");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "I?M-Microsoft");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Apostroph() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "IBM'Microsoft", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Foo", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "Bar", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
ICategory category = fFactory.createCategory(null, news);
category.setName("Apple'Google");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField catField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM'Microsoft");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"IBM'Microsoft\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM'Micr*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM'Micr?soft");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "I?M'Microsoft");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.CONTAINS_ALL, "Apple'Google");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.BEGINS_WITH, "Apple'");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.ENDS_WITH, "Google");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.CONTAINS_ALL, "\"Apple'Google\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_German() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "IBM\u00f6\u00e4\u00fc\u00dfMicrosoft", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Foo", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "Bar", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
ICategory category = fFactory.createCategory(null, news);
category.setName("Apple\u00f6\u00e4\u00fc\u00dfGoogle");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
int index = 0;
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField catField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM\u00f6\u00e4\u00fc\u00dfMicrosoft");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"IBM\u00f6\u00e4\u00fc\u00dfMicrosoft\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM\u00f6\u00e4\u00fc\u00dfMicr*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM\u00f6\u00e4\u00fc\u00dfMicr?soft");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "I?M\u00f6\u00e4\u00fc\u00dfMicrosoft");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM\u00f6*\u00dfMicrosoft");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.IS, "Apple\u00f6\u00e4\u00fc\u00dfGoogle");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.IS, "Apple\u00f6?\u00fc\u00dfGoogle");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.BEGINS_WITH, "Apple\u00f6");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.BEGINS_WITH, "App*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.BEGINS_WITH, "App?");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.ENDS_WITH, "\u00dfGoogle");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.ENDS_WITH, "?Google");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
condition = fFactory.createSearchCondition(catField, SearchSpecifier.ENDS_WITH, "*\u00dfGoogle");
result = fModelSearch.searchNews(list(condition), false);
assertSame(String.valueOf(index++), result, news);
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Author() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
IPerson author = fFactory.createPerson(null, news);
author.setName("Jacek Jędruch");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Jacek Jędruch");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Jac* Ję?ruch");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "\"Jacek Jędruch\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Jędruch");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Jęd?uch");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "\"Jędruch\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
author = fFactory.createPerson(null, news);
author.setName("Tōkaidōchū Hizakurige");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Tōkaidōchū Hizakurige");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Tōkaidōchū");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "\"Tōkaidōchū Hizakurige\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "\"Tōkaidōchū\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
author = fFactory.createPerson(null, news);
author.setName("Matija Zmajević");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Matija Zmajević");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Zmajević");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
author = fFactory.createPerson(null, news);
author.setName("Peter Mötiß");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Peter Mötiß");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "Mötiß");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Author_Dash() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
IPerson author = fFactory.createPerson(null, news);
author.setName("Benjamin Wilhelm-Tello");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(authorField);
fields.add(allField);
for (ISearchField field : fields) {
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Benjamin Wilhelm-Tello");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Benjamin Wilhelm-Tello\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Benjamin Wilhelm-Tello\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Benjamin");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Wilhelm-Tello");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Benjamin Wilhelm-Tello\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Benjamin Wilhelm-Tello");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Benjamin Wilhelm-Tello\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Benjamin");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Wilhelm-Tello");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Benjamin Wilhelm-Tel*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Benjamin Wilhelm-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Benjamin Wi*-Tello");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Ben* Wilhelm-Tello");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Author_AngleBrackets() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
IPerson author = fFactory.createPerson(null, news);
author.setName("<Benjamin Wilhelm-Tello>");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "<Benjamin Wilhelm-Tello>");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "<Benjamin Wi?helm-Tello>");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "<Benjamin Wi?helm-*>");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
author = fFactory.createPerson(null, news);
author.setName("<Benjamin>");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "<Benjamin>");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(authorField, SearchSpecifier.CONTAINS_ALL, "<Ben*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Category_AngleBrackets() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
ICategory category = fFactory.createCategory(null, news);
category.setName("<Benjamin Wilhelm-Tello>");
category = fFactory.createCategory(null, news);
category.setName("<karakas>");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(categoryField, SearchSpecifier.IS, "<Benjamin Wilhelm-Tello>");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(categoryField, SearchSpecifier.IS, "<Benjamin Wi?helm-Tello>");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(categoryField, SearchSpecifier.IS, "<Benjamin Wi?helm-*>");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(categoryField, SearchSpecifier.IS, "<karakas>");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(categoryField, SearchSpecifier.IS, "<kar?kas>");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(categoryField, SearchSpecifier.IS, "<kara*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Category_Dash() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
ICategory category = fFactory.createCategory(null, news);
category.setName("Benjamin Wilhelm-Tello");
category = fFactory.createCategory(null, news);
category.setName("IBM-Research");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
/*
* TODO Known issue with searches in RSSOwl: Searching in all fields for a
* category that gets tokenized into more than one token will fail.
* Workaround: Search directly for the category.
*/
//ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == categoryField ? SearchSpecifier.IS : SearchSpecifier.CONTAINS_ALL);
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Benjamin Wilhelm-Tello");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, specifier, "Benjamin Wilhelm-Tel*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, specifier, "Benjamin Wilhelm-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, specifier, "Benjamin Wi*-Tello");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, specifier, "Ben* Wilhelm-Tello");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, specifier, "IBM-Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, specifier, "IBM-Resea*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, specifier, "IBM-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, specifier, "IBM*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, specifier, "I?M-Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Mix_1() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "This [leverages] Pasero Adlistr. 27 the \"approach\" (IBM) Corp. 030-800600200 and WIL_Tel all@yes.org if 127.0.0.1 <karakas> sees Malara?", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "[leverages]");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "leverages");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"[leverages]\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "(IBM)");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"(IBM)\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Corp.");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Corp");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Corp.\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "WIL_Tel");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "WIL");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "W*L Tel");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"WIL_Tel\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "all@yes.org");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"all@yes.org\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "030-800600200");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "030-800*0");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"030-800600200\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Adlistr. 27");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Adlistr");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "A*istr. 27");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Adlistr. 27\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "approach");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "appr?ach");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"approach\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "127.0.0.1");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "1?7.0.0.1");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"127.0.0.1\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Malara");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "M*ara");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Malara\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "[lev*ages]");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "(I?M)");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Co?p.");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "a?l@yes.o?g");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "<karakas>");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"<karakas>\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Mix_2() throws Exception {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "This {leverages} /Pasero/ Adlistr. 27 the App=Roach #IBM $Corp 030+800600200 Lora: WIL_Tel all@yes.org if 127.0.0.1 %karakas% sees Malara!", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
ISearchField field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "{leverages}");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "leverages");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"{leverages}\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "/Pasero/");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "App=Roach");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"App=Roach\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Roach");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "#IBM");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "IBM");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"IBM\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"#IBM\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "$Corp");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Corp");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Corp\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"$Corp\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "%karakas%");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"%karakas%\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "karakas");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"karakas\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "030+800600200");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "800600200");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"030+800600200\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Malara");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "M*ara");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Malara\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Lora");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Lora:");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "\"Lora\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "030+800*0");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_Mix_3() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news5.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
Thread.sleep(2000);
for (int i = 0; i < 255; i++) {
char c = (char) i;
if ((c > 32 && c < 48) || // !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /
(c > 57 && c < 65) || // :, ;, <, =, >, ?, @
(c > 90 && c < 97) || // [, \, ], ^, _, `
(c > 122 && c < 127) || // {, |, }, ~
(String.valueOf(c).equals("§")) //Not part of ASCII //$NON-NLS-1$
) {
String s = Character.toString(c);
if (s.equals("<") || s.equals(">") || s.equals("?") || s.equals("*") || s.equals("\""))
continue; //Unsupported
feed.getNews().get(0).setDescription("The " + s + "startstart and endend" + s + " of middle" + s + "middle is " + s + "betbetween" + s + " and Para" + s + "Glyde.");
feed.getNews().get(1).setDescription("This is Para" + s + "Market.");
feed.getNews().get(2).setDescription("And yes the Para" + s + "Baring!");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField descriptionField = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(descriptionField);
for (ISearchField field : fields) {
/* Without Wildcards */
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, s + "startstart");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "endend" + s);
result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "middle" + s + "middle");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, s + "betbetween" + s);
result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1);
/* With Wildcards */
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, s + "sta?tstart");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "end*" + s);
result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "mid?le" + s + "mid*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, s + "*etb?tween" + s);
result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Par*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1, news2, news3);
if (s.equals("."))
System.out.println("jo");//$NON-NLS-1$
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Para" + s + "*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Character used: " + s + ", Field: " + field.getName(), result, news1, news2, news3);
}
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_AttachmentContent() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news5.html", State.READ); //Used to validate count of results == 1
IAttachment attachment1 = fFactory.createAttachment(null, news1);
IAttachment attachment2 = fFactory.createAttachment(null, news2);
IAttachment attachment3 = fFactory.createAttachment(null, news3);
attachment1.setType("hello.mp3");
attachment2.setType("hello.doc");
attachment3.setType("foobar.mp3");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField attachmentField = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(attachmentField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field.getId() == IEntity.ALL_FIELDS) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "hello.mp3");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(1, result.size());
condition = fFactory.createSearchCondition(field, specifier, "hello.doc");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2);
condition = fFactory.createSearchCondition(field, specifier, "foobar.mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
condition = fFactory.createSearchCondition(field, specifier, "hello.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "*.mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithSpecialCharacters_IP() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "127.0.0.1", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "127.0.0.2", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "255.0.0.2", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news5.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField attachmentField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(attachmentField);
for (ISearchField field : fields) {
SearchSpecifier specifier = SearchSpecifier.CONTAINS_ALL;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "127.0.0.1");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
condition = fFactory.createSearchCondition(field, specifier, "127.0.0.2");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2);
condition = fFactory.createSearchCondition(field, specifier, "255.0.0.2");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
condition = fFactory.createSearchCondition(field, specifier, "127.0.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "*.0.0.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "127.?.?.?");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsPhraseSearch_SpecialHandlingCategories() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
createNews(feed, "Hello", "http://www.news.com/news2.html", State.READ); //Used to validate count of results == 1
createNews(feed, "World", "http://www.news.com/news3.html", State.READ); //Used to validate count of results == 1
ICategory category = fFactory.createCategory(null, news);
category.setName("Karakas");
category = fFactory.createCategory(null, news);
category.setName("Paris Hilton");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField categoriesField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(categoriesField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field.getId() == IEntity.ALL_FIELDS) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Karakas");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news);
if (field == categoriesField) {
condition = fFactory.createSearchCondition(field, specifier, "Paris Hilton");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news);
}
if (field == allField) {
condition = fFactory.createSearchCondition(field, specifier, "\"Karakas\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news);
condition = fFactory.createSearchCondition(field, specifier, "\"Paris Hilton\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Dash() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "GNC-2012-12-13 #634 On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This GNC-2010-15-13 #634 On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "GNC-2011-16-13 #634 On the Mend", "http://www.news.com/news3.html", State.READ);
INews news4 = createNews(feed, "The OAL-Research #634 On the Mend", "http://www.news.com/news4.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news5.html", State.READ); //Used to validate count of results
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "GNC-2012-12-13");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "GNC-2010-15-13");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "\"GNC-2010-15-13\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "GNC-2011-16-13");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "GNC-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "GNC*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "GNC-??12-12-13");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "GNC-??12-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "GNC-????-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "G?C-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "*-2010-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "OAL-Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "\"OAL-Research\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "OAL-Res?arch");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "O?L-Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "OAL-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
}
condition = fFactory.createSearchCondition(field, specifier, "OAL*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "*-Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
}
condition = fFactory.createSearchCondition(field, specifier, "*Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_Dash() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "Hello World", "http://www.news.com/news3.html", State.READ);
INews news4 = createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("GNC-2012-12-13");
fFactory.createCategory(null, news2).setName("GNC-2010-15-13");
fFactory.createCategory(null, news3).setName("GNC-2011-16-13");
fFactory.createCategory(null, news4).setName("OAL-Research");
fFactory.createPerson(null, news1).setName("GNC-2012-12-13");
fFactory.createPerson(null, news2).setName("GNC-2010-15-13");
fFactory.createPerson(null, news3).setName("GNC-2011-16-13");
fFactory.createPerson(null, news4).setName("OAL-Research");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "GNC-2012-12-13");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"GNC-2012-12-13\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
condition = fFactory.createSearchCondition(field, specifier, "GNC-2010-15-13");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "GNC-2011-16-13");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "GNC-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "GNC*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "GNC-??12-12-13");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "GNC-??12-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "GNC-????-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "G?C-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "*-2010-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "OAL-Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "OAL-Res?arch");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "O?L-Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "OAL-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "OAL*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "*-Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "*Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Dash_Telephone() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "030-800800-20 On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "The 040-800800-20 This On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "On 040-800700-30 the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "030-800800-20");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "040-800800-20");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "040-800700-30");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "0?0-800800-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "040*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "040-*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2, news3);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Dollar() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "500$ On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "The 1000$ This On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "On $700 the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "500$");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "1000$");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "$700");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "$7??");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "$7*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "$?00");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Dot() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "127.0.0.1 On the 2.50 Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This 255.0.0.1 On the 3.50 Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "127.5.5.4 On the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "127.0.0.1");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "2.50");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "255.0.0.1");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "127.5.5.4");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "127.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
condition = fFactory.createSearchCondition(field, specifier, "127.?.?.1");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "127*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
condition = fFactory.createSearchCondition(field, specifier, "127.*.*.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
condition = fFactory.createSearchCondition(field, specifier, "2.5?");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "2*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "?.50");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_Dot() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "Hello World", "http://www.news.com/news3.html", State.READ);
INews news4 = createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("GNC.2012.12.13");
fFactory.createCategory(null, news2).setName("GNC.2010.15.13");
fFactory.createCategory(null, news3).setName("GNC.2011.16.13");
fFactory.createCategory(null, news4).setName("OAL.Research");
fFactory.createPerson(null, news1).setName("GNC.2012.12.13");
fFactory.createPerson(null, news2).setName("GNC.2010.15.13");
fFactory.createPerson(null, news3).setName("GNC.2011.16.13");
fFactory.createPerson(null, news4).setName("OAL.Research");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "GNC.2012.12.13");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "GNC.2010.15.13");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"GNC.2010.15.13\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
}
condition = fFactory.createSearchCondition(field, specifier, "GNC.2011.16.13");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "GNC.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "GNC*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "GNC.??12.12.13");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "GNC.??12.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "GNC.????.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "G?C.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "*.2010.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "OAL.Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "OAL.Res?arch");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "O?L.Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "OAL.*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "OAL*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "*.Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
condition = fFactory.createSearchCondition(field, specifier, "*Research");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news4);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Paragraph() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "§520 On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This On §525b the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "§6520 On the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "§520");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"§520\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "§*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
condition = fFactory.createSearchCondition(field, specifier, "§*20");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
}
condition = fFactory.createSearchCondition(field, specifier, "§525b");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "§525?");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Hash() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "#germany On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This #germanies On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "#665 On the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "#germany");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"#germany\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "#germ*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
}
condition = fFactory.createSearchCondition(field, specifier, "#665");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "\"#665\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "#66?");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "#*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_Hash() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "Hello World", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("#germany");
fFactory.createCategory(null, news2).setName("#germanies");
fFactory.createCategory(null, news3).setName("#665");
fFactory.createPerson(null, news1).setName("#germany");
fFactory.createPerson(null, news2).setName("#germanies");
fFactory.createPerson(null, news3).setName("#665");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "#germany");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"#germany\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
condition = fFactory.createSearchCondition(field, specifier, "#germ*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "#665");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"#665\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
}
condition = fFactory.createSearchCondition(field, specifier, "#66?");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "#*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Colon() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "See Karakas: On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This foo:bar construct On the Mend", "http://www.news.com/news2.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Karakas");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"Karakas\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "foo:bar");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "\"foo:bar\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "Kara*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
condition = fFactory.createSearchCondition(field, specifier, "*bar");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_AngleBrackets() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("<Foo>");
fFactory.createCategory(null, news2).setName("<FooBar>");
fFactory.createPerson(null, news1).setName("<Foo>");
fFactory.createPerson(null, news2).setName("<FooBar>");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "<Foo>");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"<Foo>\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
condition = fFactory.createSearchCondition(field, specifier, "<Foo*>");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "<Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Pipe() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo|Bar On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Foo|Help On the Mend", "http://www.news.com/news2.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Foo|Bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"Foo|Bar\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "Foo|*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
}
condition = fFactory.createSearchCondition(field, specifier, "Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "*|Bar");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Underline() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo_Bar On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This Foo_Help On the Mend", "http://www.news.com/news2.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Foo_Bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"Foo_Bar\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "Foo_*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
}
condition = fFactory.createSearchCondition(field, specifier, "Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "*_Help");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2);
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_Underline() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "Hello World", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("Foo_Bar");
fFactory.createCategory(null, news2).setName("Foo_Help");
fFactory.createCategory(null, news3).setName("Bar_Help");
fFactory.createPerson(null, news1).setName("Foo_Bar");
fFactory.createPerson(null, news2).setName("Foo_Help");
fFactory.createPerson(null, news3).setName("Bar_Help");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Foo_Bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"Foo_Bar\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
condition = fFactory.createSearchCondition(field, specifier, "Foo_*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "*_Help");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2, news3);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Plus() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo+Bar On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This On Foo+Help the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "On Bar+Help the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Foo+Bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"Foo+Bar\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "Foo+*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
}
condition = fFactory.createSearchCondition(field, specifier, "Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "*Help");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2, news3);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_Plus() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "Hello World", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("Foo+Bar");
fFactory.createCategory(null, news2).setName("Foo+Help");
fFactory.createCategory(null, news3).setName("Bar+Help");
fFactory.createPerson(null, news1).setName("Foo+Bar");
fFactory.createPerson(null, news2).setName("Foo+Help");
fFactory.createPerson(null, news3).setName("Bar+Help");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Foo+Bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"Foo+Bar\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
condition = fFactory.createSearchCondition(field, specifier, "Foo+*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "*+Help");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2, news3);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Slash() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo/Bar On the Mend", "http://www.news.com/news1.html", State.READ);
INews news3 = createNews(feed, "On Foo/Fighter/Yes the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Foo/Fighter/Yes");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "\"Foo/Fighter/Yes\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "Foo/*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
}
condition = fFactory.createSearchCondition(field, specifier, "Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
condition = fFactory.createSearchCondition(field, specifier, "*ighter");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_Sash() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "Hello World", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("Foo/Bar");
fFactory.createCategory(null, news2).setName("Foo/Help");
fFactory.createCategory(null, news3).setName("Bar/Help");
fFactory.createPerson(null, news1).setName("Foo/Bar");
fFactory.createPerson(null, news2).setName("Foo/Help");
fFactory.createPerson(null, news3).setName("Bar/Help");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Foo/Bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"Foo/Bar\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "Foo/*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
}
condition = fFactory.createSearchCondition(field, specifier, "Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "*/Help");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2, news3);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Backslash() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo\\Bar On the Mend", "http://www.news.com/news1.html", State.READ);
INews news3 = createNews(feed, "On Foo\\Fighter\\Yes the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Foo\\Fighter\\Yes");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "\"Foo\\Fighter\\Yes\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "Foo\\*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
}
condition = fFactory.createSearchCondition(field, specifier, "Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
condition = fFactory.createSearchCondition(field, specifier, "*ighter");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_Backslash() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "Hello World", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("Foo\\Bar");
fFactory.createCategory(null, news2).setName("Foo\\Help");
fFactory.createCategory(null, news3).setName("Bar\\Help");
fFactory.createPerson(null, news1).setName("Foo\\Bar");
fFactory.createPerson(null, news2).setName("Foo\\Help");
fFactory.createPerson(null, news3).setName("Bar\\Help");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "Foo\\Bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"Foo\\Bar\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "Foo\\*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
}
condition = fFactory.createSearchCondition(field, specifier, "Foo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "*\\Help");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news2, news3);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_At() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "bpasero@bpasero.de On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This foo@bpasero.de On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "On you@me the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "bpasero@bpasero.de");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"bpasero@bpasero.de\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "bpasero@*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "bpasero*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "*bpasero*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "you@me");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news3);
condition = fFactory.createSearchCondition(field, specifier, "*@bpasero.de");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "*.de");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_At() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "Hello World", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("bpasero@bpasero.de");
fFactory.createCategory(null, news2).setName("foo@bpasero.de");
fFactory.createCategory(null, news3).setName("bpasero@foo.de");
fFactory.createPerson(null, news1).setName("bpasero@bpasero.de");
fFactory.createPerson(null, news2).setName("foo@bpasero.de");
fFactory.createPerson(null, news3).setName("bpasero@foo.de");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "bpasero@bpasero.de");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"bpasero@bpasero.de\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
condition = fFactory.createSearchCondition(field, specifier, "bpasero@*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
condition = fFactory.createSearchCondition(field, specifier, "bpasero*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news3);
condition = fFactory.createSearchCondition(field, specifier, "*@bpasero.de");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "*.de");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Percentage() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "20% On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This 200% On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "8000% On the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "20%");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"20%\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "2*%");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "*%");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Parenthesis() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "(Foobar) On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "(Footest) This On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "On (Startest) the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "(Foobar)");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"(Foobar)\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "(Foo*)");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "(F*)");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "(F*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "(*)");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Brackets() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "[Foobar] On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "[Footest] This On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "On [Startest] the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "[Foobar]");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"[Foobar]\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "[Foo*]");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "[F*]");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "[F*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "[*]");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CategoriesAuthors_Brackets() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "Bar", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "Hello World", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Stuff", "http://www.news.com/news5.html", State.READ);
fFactory.createCategory(null, news1).setName("[Foobar]");
fFactory.createCategory(null, news2).setName("[Footest]");
fFactory.createCategory(null, news3).setName("[Startest]");
fFactory.createPerson(null, news1).setName("[Foobar]");
fFactory.createPerson(null, news2).setName("[Footest]");
fFactory.createPerson(null, news3).setName("[Startest]");
DynamicDAO.save(feed);
waitForIndexer();
ISearchField categoryField = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchField authorField = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(categoryField);
fields.add(authorField);
for (ISearchField field : fields) {
SearchSpecifier specifier = (field == authorField) ? SearchSpecifier.CONTAINS_ALL : SearchSpecifier.IS;
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "[Foobar]");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (specifier != SearchSpecifier.IS) {
condition = fFactory.createSearchCondition(field, specifier, "\"[Foobar]\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
}
condition = fFactory.createSearchCondition(field, specifier, "[Foo*]");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "[F*]");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "[F*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "[*]");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_CurvedBrackets() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "{Foobar} On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "{Footest} This On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "On {Startest} the Mend", "http://www.news.com/news3.html", State.READ);
createNews(feed, "Anything Else", "http://www.news.com/news4.html", State.READ); //Used to validate count of results == 1
DynamicDAO.save(feed);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
List<ISearchField> fields = new ArrayList<ISearchField>();
fields.add(allField);
fields.add(titleField);
List<SearchSpecifier> specifiers = new ArrayList<SearchSpecifier>();
specifiers.add(SearchSpecifier.CONTAINS_ALL);
specifiers.add(SearchSpecifier.CONTAINS);
for (ISearchField field : fields) {
for (SearchSpecifier specifier : specifiers) {
ISearchCondition condition = fFactory.createSearchCondition(field, specifier, "{Foobar}");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
condition = fFactory.createSearchCondition(field, specifier, "\"{Foobar}\"");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1);
if (TEST_FAILING_WILDCARD) {
condition = fFactory.createSearchCondition(field, specifier, "{Foo*}");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "{F*}");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "{F*");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2);
condition = fFactory.createSearchCondition(field, specifier, "{*}");
result = fModelSearch.searchNews(list(condition), false);
assertSame("Field: " + field.getName() + ", Specifier: " + specifier, result, news1, news2, news3);
}
}
}
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsRealWorld_Mix() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "GNC-2012-12-13 #634 On the Mend", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, "This GNC-2010-15-13 #634 On the Mend", "http://www.news.com/news2.html", State.READ);
INews news3 = createNews(feed, "GNC-2011-16-13 #634 On the Mend", "http://www.news.com/news3.html", State.UNREAD);
INews news4 = createNews(feed, "The OAL-Research #634 On the Mend", "http://www.news.com/news4.html", State.READ);
INews news5 = createNews(feed, "Anything Else", "http://www.news.com/news5.html", State.UPDATED); //Used to validate count of results
DynamicDAO.save(feed);
waitForIndexer();
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchField stateField = fFactory.createSearchField(INews.STATE, fNewsEntityName);
/* Cond 1 AND Cond 2 */
ISearchCondition condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
ISearchCondition condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1, condition2), true);
assertSame(result, news1, news2);
/* Cond 1 OR Cond 2 */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), false);
assertSame(result, news1, news2, news3, news4);
/* Cond 1 NOT Cond 2 */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS_NOT, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), true);
assertSame(result, news3);
/* NOT Cond 1 AND Cond 2 */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_NOT, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), true);
assertSame(result, news4);
/* NOT Cond 1 OR Cond 2 */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_NOT, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), false);
assertSame(result, news1, news2, news4, news5);
}
/**
* @throws Exception
*/
@Test
public void testSearchNewsWithScopeCondition() throws Exception {
IFolder root = fFactory.createFolder(null, null, "Root");
IFolder child = fFactory.createFolder(null, root, "Child");
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
IFeed feed2 = fFactory.createFeed(null, new URI("http://www.feed.com/feed2.xml"));
INews news1 = createNews(feed, "GNC-2012-12-13 #634 On the Mend", "http://www.news.com/news1.html", State.READ);
news1.setFlagged(true);
INews news2 = createNews(feed, "This GNC-2010-15-13 #634 On the Mend", "http://www.news.com/news2.html", State.READ);
news2.setReceiveDate(new Date(0));
ILabel label = DynamicDAO.save(fFactory.createLabel(null, "Foo"));
news2.addLabel(label);
INews news3 = createNews(feed, "GNC-2011-16-13 #634 On the Mend", "http://www.news.com/news3.html", State.UNREAD);
news3.setFlagged(true);
INews news4 = createNews(feed, "The OAL-Research #634 On the Mend", "http://www.news.com/news4.html", State.READ);
label = DynamicDAO.save(fFactory.createLabel(null, "Bar"));
news4.addLabel(label);
createNews(feed, "Anything Else", "http://www.news.com/news5.html", State.UPDATED); //Used to validate count of results
IBookMark mark1 = fFactory.createBookMark(null, child, new FeedLinkReference(feed.getLink()), "Bookmark");
IBookMark mark2 = fFactory.createBookMark(null, child, new FeedLinkReference(feed2.getLink()), "Bookmark 2");
DynamicDAO.save(feed);
DynamicDAO.save(feed2);
DynamicDAO.save(root);
waitForIndexer();
ISearchField allField = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
ISearchField locationField = fFactory.createSearchField(INews.LOCATION, fNewsEntityName);
ISearchField titleField = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchField stateField = fFactory.createSearchField(INews.STATE, fNewsEntityName);
ISearchField stickyField = fFactory.createSearchField(INews.IS_FLAGGED, fNewsEntityName);
ISearchCondition stickyCondition = fFactory.createSearchCondition(stickyField, SearchSpecifier.IS, true);
ISearchField labelField = fFactory.createSearchField(INews.LABEL, fNewsEntityName);
ISearchCondition labelCondition = fFactory.createSearchCondition(labelField, SearchSpecifier.IS, "*");
ISearchField ageField = fFactory.createSearchField(INews.AGE_IN_DAYS, fNewsEntityName);
ISearchCondition ageCondition = fFactory.createSearchCondition(ageField, SearchSpecifier.IS_LESS_THAN, 5);
/* Scope Condition: Is Sticky (AND) */
ISearchCondition condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
ISearchCondition condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition1, condition2), true);
assertSame(result, news1, news2);
result = fModelSearch.searchNews(list(condition1, condition2), stickyCondition, true);
assertSame(result, news1);
/* Scope Condition: Is Sticky (AND, All Fields) */
condition1 = fFactory.createSearchCondition(allField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), true);
assertSame(result, news1, news2);
result = fModelSearch.searchNews(list(condition1, condition2), stickyCondition, true);
assertSame(result, news1);
/* Scope Condition: Is Labeled (AND) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), true);
assertSame(result, news1, news2);
result = fModelSearch.searchNews(list(condition1, condition2), labelCondition, true);
assertSame(result, news2);
/* Scope Condition: Recent Age (AND) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), true);
assertSame(result, news1, news2);
result = fModelSearch.searchNews(list(condition1, condition2), ageCondition, true);
assertSame(result, news1);
/* Scope Condition: Is Sticky (OR) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), stickyCondition, false);
assertSame(result, news1, news3);
/* Scope Condition: Is Sticky (OR, All Fields) */
condition1 = fFactory.createSearchCondition(allField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), stickyCondition, false);
assertSame(result, news1, news3);
/* Scope Condition: Is Labeled (OR) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), labelCondition, false);
assertSame(result, news2, news4);
/* Scope Condition: Recent Age (OR) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(condition1, condition2), ageCondition, false);
assertSame(result, news1, news3, news4);
/* Scope Condition: Is Sticky (AND, with Location) */
ISearchCondition conditionMatch = fFactory.createSearchCondition(locationField, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Collections.singleton((IFolderChild) mark1)));
ISearchCondition conditionNoMatch = fFactory.createSearchCondition(locationField, SearchSpecifier.SCOPE, ModelUtils.toPrimitive(Collections.singleton((IFolderChild) mark2)));
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(conditionMatch, condition1, condition2), stickyCondition, true);
assertSame(result, news1);
result = fModelSearch.searchNews(list(conditionNoMatch, condition1, condition2), stickyCondition, true);
assertTrue(result.isEmpty());
/* Scope Condition: Is Sticky (AND, with Location, all fields) */
condition1 = fFactory.createSearchCondition(allField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(conditionMatch, condition1, condition2), stickyCondition, true);
assertSame(result, news1);
result = fModelSearch.searchNews(list(conditionNoMatch, condition1, condition2), stickyCondition, true);
assertTrue(result.isEmpty());
/* Scope Condition: Is Labeled (AND, with Location) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(conditionMatch, condition1, condition2), labelCondition, true);
assertSame(result, news2);
result = fModelSearch.searchNews(list(conditionNoMatch, condition1, condition2), stickyCondition, true);
assertTrue(result.isEmpty());
/* Scope Condition: Recent Age (AND, with Location) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(conditionMatch, condition1, condition2), ageCondition, true);
assertSame(result, news1);
result = fModelSearch.searchNews(list(conditionNoMatch, condition1, condition2), stickyCondition, true);
assertTrue(result.isEmpty());
/* Scope Condition: Is Sticky (OR, with Location) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(conditionMatch, condition1, condition2), stickyCondition, false);
assertSame(result, news1, news3);
result = fModelSearch.searchNews(list(conditionNoMatch, condition1, condition2), stickyCondition, true);
assertTrue(result.isEmpty());
/* Scope Condition: Is Sticky (OR, with Location, all fields) */
condition1 = fFactory.createSearchCondition(allField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(conditionMatch, condition1, condition2), stickyCondition, false);
assertSame(result, news1, news3);
result = fModelSearch.searchNews(list(conditionNoMatch, condition1, condition2), stickyCondition, true);
assertTrue(result.isEmpty());
/* Scope Condition: Is Labeled (OR, with Location) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(conditionMatch, condition1, condition2), labelCondition, false);
assertSame(result, news2, news4);
result = fModelSearch.searchNews(list(conditionNoMatch, condition1, condition2), stickyCondition, true);
assertTrue(result.isEmpty());
/* Scope Condition: Recent Age (OR, with Location) */
condition1 = fFactory.createSearchCondition(titleField, SearchSpecifier.CONTAINS_ALL, "GNC-*");
condition2 = fFactory.createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(INews.State.READ));
result = fModelSearch.searchNews(list(conditionMatch, condition1, condition2), ageCondition, false);
assertSame(result, news1, news3, news4);
result = fModelSearch.searchNews(list(conditionNoMatch, condition1, condition2), stickyCondition, true);
assertTrue(result.isEmpty());
}
}