/*
* Copyright (c) 2006-2009 by Dirk Riehle, http://dirkriehle.com
*
* This file is part of the Wahlzeit photo rating application.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
package org.wahlzeit.model;
import junit.framework.TestCase;
import java.util.Set;
/**
* Test cases for the Tags class.
*/
public class TagsTest extends TestCase {
/**
* @param args
*/
public static void main(final String[] args) {
junit.textui.TestRunner.run(TagsTest.class);
}
/**
* @param name
*/
public TagsTest(final String name) {
super(name);
}
/**
*
*/
public void testEquals() {
Tags tags1 = new Tags("a, b, c");
Tags tags2 = new Tags("a, b, c");
Tags tags3 = new Tags("a, c, b");
Tags tags4 = new Tags("a, b");
Tags tags5 = new Tags("a, a, b, c");
assertTrue(tags1.equals(tags1));
assertTrue(tags1.equals(tags2));
assertTrue(tags1.equals(tags3));
assertFalse(tags1.equals(tags4));
assertTrue(tags1.equals(tags5));
assertFalse(tags1.equals(null));
assertFalse(tags1.equals(new Object()));
}
/**
*
*/
public void testAsTag() {
assertEquals(Tags.asTag("flo wer"), "flower");
assertEquals(Tags.asTag(" 35j lNM#&In>B << f2"), "35jlnminbf2");
assertEquals(Tags.asTag(",,,,,,"), "");
}
/**
*
*/
public void testAsString() {
Tags tags1 = new Tags("tag1, tag2");
assertSame(tags1.getSize(), 2);
assertEquals(tags1.asString(), "tag1, tag2");
assertEquals(tags1.asString(true, '+'), "tag1 + tag2");
}
/**
*
*/
public void testAsArray1() {
Tags tags1 = new Tags("blume, zeug");
String[] array1 = tags1.asArray();
assertEquals(array1.length, 2);
assertEquals(array1[0], "blume");
assertEquals(array1[1], "zeug");
Tags tags2 = new Tags();
String[] array2 = tags2.asArray();
assertEquals(array2.length, 0);
}
/**
*
*/
public void testAsArray2() {
Tags tags1 = new Tags("a, b, c, d, e");
assertEquals(tags1.asArray().length, 5);
assertEquals(tags1.asArray()[0], "a");
Tags tags2 = new Tags("a a, &/B, , c");
assertSame(tags2.getSize(), tags2.asArray().length);
assertEquals(tags2.asArray().length, 3);
assertEquals(tags2.asArray()[1], "b");
assertEquals(tags2.asArray()[2], "c");
}
/**
*
*/
public void testGetSize() {
Tags tags1 = new Tags("tag1, tag2, tag3");
assertEquals(3, tags1.getSize());
Tags tags2 = new Tags("");
assertSame(tags2.getSize(), 0);
Tags t1 = new Tags("x,y,y,,");
assertEquals(2, t1.getSize());
Tags t2 = new Tags();
assertEquals(0, t2.getSize());
Tags empty = Tags.EMPTY_TAGS;
assertTrue(empty.getSize() == 0);
}
/**
* Make sure not only ',' can be used a separator
*/
public void testUsesCustomSeparator() {
Tags tags1 = new Tags("a-b", '-');
assertTrue(tags1.hasTag("a"));
assertTrue(tags1.hasTag("b"));
// Causes failure because separator is not stored
assertEquals("a- b", tags1.asString());
Tags tags2 = new Tags("a,b", '-');
assertTrue(tags2.hasTag("ab"));
Tags tags3 = new Tags("aab", 'a');
assertTrue(tags3.hasTag("b"));
assertFalse(tags3.hasTag("a"));
}
/**
*
*/
public void testHasTag1() {
assertFalse(new Tags(null).hasTag(null));
assertFalse(new Tags("").hasTag(null));
assertFalse(new Tags("").hasTag(""));
assertTrue(new Tags("tag").hasTag("tag"));
assertTrue(new Tags("tag,tag").hasTag("tag"));
assertTrue(new Tags("tag1,tag2").hasTag("tag1"));
assertTrue(new Tags("tag1,tag2").hasTag("tag2"));
assertFalse("Only complete Tags should match",
new Tags("tag1,tag2").hasTag("t"));
assertFalse("No filtering on hasTag",
new Tags("tag1,tag 2").hasTag("tag 2"));
}
/**
*
*/
public void testHasTag2() {
Tags tags1 = new Tags(" flo wer , Kinokuniya, bingo, bongo");
assertTrue(tags1.hasTag("flower"));
assertTrue(tags1.hasTag("kinokuniya"));
assertFalse(tags1.hasTag("Kinokuniya"));
assertTrue(tags1.hasTag("bingo"));
assertFalse(tags1.hasTag("bingo, bongo"));
assertFalse(tags1.hasTag("notexisting"));
assertFalse(tags1.hasTag(""));
Tags tags2 = new Tags(" ");
assertFalse(tags2.hasTag("testemptytags"));
assertFalse(tags2.hasTag(""));
}
/**
*
*/
public void testHasTag3() {
Tags tags1 = new Tags("\"/&%$(&a,\"\\'");
assertTrue(tags1.hasTag("a"));
assertFalse(tags1.hasTag("\"\\'"));
assertFalse(tags1.hasTag(""));
}
/**
*
*/
public void testHasTag4() {
Tags t = new Tags("tag, long tag, even@longer;tag");
assertTrue(t.hasTag("tag"));
assertTrue(t.hasTag("longtag"));
assertTrue(t.hasTag("evenlongertag"));
assertFalse(t.hasTag(null));
assertFalse(t.hasTag(""));
}
/**
*
*/
public void testHasSetSemantics() {
Tags tags1 = new Tags("tag1, tag1");
assertEquals(1, tags1.getSize());
Tags tags2 = new Tags("bla, blub, bla, Bla, b$%&l a");
assertEquals("bla, blub", tags2.asString());
Tags tags3 = new Tags("bingo, bingo");
String[] tags3array = tags3.asArray();
assertTrue(tags3array.length == 1);
}
/**
*
*/
public void testTagList() {
Tags tags1 = new Tags(" flo wer , Kinokuniya, bingo, bongo");
String[] tags1array = tags1.asArray();
assertTrue(tags1array.length == 4);
assertEquals(tags1array[0], "bingo");
assertEquals(tags1array[1], "bongo");
assertEquals(tags1array[2], "flower");
assertEquals(tags1array[3], "kinokuniya");
assertEquals(tags1.asString(), "bingo, bongo, flower, kinokuniya");
Tags tags2 = new Tags(" @ 2a hum5ug ; yah!, ohmpf ,,,");
String[] tags2array = tags2.asArray();
assertTrue(tags2array.length == 2);
assertEquals(tags2array[0], "2ahum5ugyah");
assertEquals(tags2array[1], "ohmpf");
// Testing special chars
Tags tags3 = new Tags(" $%&/(, $%&/()");
String[] tags3array = tags3.asArray();
assertEquals(tags3array.length, 0);
}
/**
*
*/
public void testGetTagListFromString() {
Set<String> set = Tags.asTagSetFromString("x-y--z@!;,b---ni hao", '-');
assertTrue(set != null);
assertTrue(set.size() == 4);
assertTrue(set.contains("x"));
assertTrue(set.contains("y"));
assertTrue(set.contains("zb"));
assertTrue(set.contains("nihao"));
}
}