/**
* IconEntryTest
* part of YaCy
* Copyright 2016 by luccioman; https://github.com/luccioman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program in the file lgpl21.txt
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.document.parser.html;
import java.awt.Dimension;
import java.net.MalformedURLException;
import java.util.HashSet;
import java.util.Set;
import org.junit.Assert;
import org.junit.Test;
import net.yacy.cora.document.id.DigestURL;
/**
* Unit tests for IconEntry class.
* @author luc
*
*/
public class IconEntryTest {
@Test
public final void testGetDistance() {
/* Normal case : one size has both width and height greater */
Dimension size1 = new Dimension(5, 8);
Dimension size2 = new Dimension(7, 12);
Assert.assertEquals(3.0, IconEntry.getDistance(size1, size2), 0.0);
/* Check inverted parameters should produces same result */
Assert.assertEquals(3.0, IconEntry.getDistance(size2, size1), 0.0);
/* Equal sizes */
size2 = new Dimension(5, 8);
Assert.assertEquals(0.0, IconEntry.getDistance(size1, size2), 0.0);
/* Equal sizes */
size2 = new Dimension(5, 8);
Assert.assertEquals(0.0, IconEntry.getDistance(size1, size2), 0.0);
/* Only one dimension differs */
size2 = new Dimension(5, 12);
Assert.assertEquals(2.0, IconEntry.getDistance(size1, size2), 0.0);
size2 = new Dimension(10, 8);
Assert.assertEquals(2.5, IconEntry.getDistance(size1, size2), 0.0);
/* width lower, height upper */
size2 = new Dimension(3, 12);
Assert.assertEquals(3.0, IconEntry.getDistance(size1, size2), 0.0);
/* negative values */
size1 = new Dimension(-5, -8);
size2 = new Dimension(-7, -12);
Assert.assertEquals(3.0, IconEntry.getDistance(size1, size2), 0.0);
/* one null */
size1 = null;
size2 = new Dimension(-7, -12);
Assert.assertEquals(Double.MAX_VALUE, IconEntry.getDistance(size1, size2), 0.0);
}
@Test
public final void testGetClosestSize() throws MalformedURLException {
/* Preferred size in sizes set */
Set<String> rels = new HashSet<>();
rels.add(IconLinkRelations.ICON.getRelValue());
Set<Dimension> sizes = new HashSet<>();
sizes.add(new Dimension(128,128));
sizes.add(new Dimension(256,512));
sizes.add(new Dimension(16,16));
Dimension preferredSize = new Dimension(16, 16);
IconEntry icon = new IconEntry(new DigestURL("http://yacy.net"), rels, sizes);
Dimension result = icon.getClosestSize(preferredSize);
Assert.assertEquals(preferredSize, result);
/* Preferred size lower than all sizes in set */
preferredSize = new Dimension(12, 12);
result = icon.getClosestSize(preferredSize);
Assert.assertEquals(new Dimension(16,16), result);
/* Preferred size over than all sizes in set */
preferredSize = new Dimension(1992, 1024);
result = icon.getClosestSize(preferredSize);
Assert.assertEquals(new Dimension(256, 512), result);
/* Preferred size between sizes in set */
preferredSize = new Dimension(17, 18);
result = icon.getClosestSize(preferredSize);
Assert.assertEquals(new Dimension(16, 16), result);
/* Sizes set contains only one item */
sizes = new HashSet<>();
sizes.add(new Dimension(128,128));
icon = new IconEntry(new DigestURL("http://yacy.net"), rels, sizes);
preferredSize = new Dimension(1992, 1024);
result = icon.getClosestSize(preferredSize);
Assert.assertEquals(new Dimension(128, 128), result);
/* Empty sizes set */
sizes = new HashSet<>();
icon = new IconEntry(new DigestURL("http://yacy.net"), rels, sizes);
preferredSize = new Dimension(16, 16);
result = icon.getClosestSize(preferredSize);
Assert.assertNull(result);
/* Null preferred size */
sizes = new HashSet<>();
sizes.add(new Dimension(128,128));
sizes.add(new Dimension(256,512));
sizes.add(new Dimension(16,16));
icon = new IconEntry(new DigestURL("http://yacy.net"), rels, sizes);
preferredSize = null;
result = icon.getClosestSize(preferredSize);
Assert.assertNull(result);
}
@Test
public final void testSizesToString() throws MalformedURLException {
/* Multiple values in sizes set */
Set<String> rels = new HashSet<>();
rels.add(IconLinkRelations.ICON.getRelValue());
Set<Dimension> sizes = new HashSet<>();
sizes.add(new Dimension(128,128));
sizes.add(new Dimension(256,512));
sizes.add(new Dimension(16,16));
IconEntry icon = new IconEntry(new DigestURL("http://yacy.net"), rels, sizes);
String sizesStr = icon.sizesToString();
/* The set is not ordered, only check result contains what we expect */
Assert.assertTrue(sizesStr.contains("128x128"));
Assert.assertTrue(sizesStr.contains("256x512"));
Assert.assertTrue(sizesStr.contains("16x16"));
Assert.assertTrue(sizesStr.contains(" "));
/* One value in sizes set */
sizes = new HashSet<>();
sizes.add(new Dimension(128,128));
icon = new IconEntry(new DigestURL("http://yacy.net"), rels, sizes);
sizesStr = icon.sizesToString();
Assert.assertEquals("128x128", sizesStr);
/* Empty sizes set */
sizes = new HashSet<>();
icon = new IconEntry(new DigestURL("http://yacy.net"), rels, sizes);
sizesStr = icon.sizesToString();
Assert.assertTrue(sizesStr.isEmpty());
}
@Test
public final void testRelToString() throws MalformedURLException {
/* Multiple values in rel set */
Set<String> rels = new HashSet<>();
rels.add(IconLinkRelations.ICON.getRelValue());
rels.add(IconLinkRelations.APPLE_TOUCH_ICON.getRelValue());
rels.add(IconLinkRelations.MASK_ICON.getRelValue());
Set<Dimension> sizes = new HashSet<>();
sizes.add(new Dimension(128,128));
IconEntry icon = new IconEntry(new DigestURL("http://yacy.net"), rels, sizes);
String relStr = icon.relToString();
/* The set is not ordered, only check result contains what we expect */
Assert.assertTrue(relStr.contains(IconLinkRelations.ICON.getRelValue()));
Assert.assertTrue(relStr.contains(IconLinkRelations.APPLE_TOUCH_ICON.getRelValue()));
Assert.assertTrue(relStr.contains(IconLinkRelations.MASK_ICON.getRelValue()));
Assert.assertTrue(relStr.contains(" "));
/* One value in rel set */
rels = new HashSet<>();
rels.add(IconLinkRelations.ICON.getRelValue());
icon = new IconEntry(new DigestURL("http://yacy.net"), rels, sizes);
relStr = icon.relToString();
Assert.assertEquals(IconLinkRelations.ICON.getRelValue(), relStr);
}
}