Project

General

Profile

Download (5.66 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2011 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.dataportal.elements;
11

    
12
import java.util.ArrayList;
13
import java.util.HashMap;
14
import java.util.List;
15

    
16
import static junit.framework.Assert.*;
17
import static org.junit.Assert.assertEquals;
18

    
19
import org.openqa.selenium.By;
20
import org.openqa.selenium.NoSuchElementException;
21
import org.openqa.selenium.WebElement;
22
import org.openqa.selenium.WebElement;
23

    
24
import com.gargoylesoftware.htmlunit.ElementNotFoundException;
25

    
26
/**
27
 * @author andreas
28
 * @date Jul 4, 2011
29
 *
30
 */
31
public class FeatureBlock extends DrupalBlock {
32

    
33
	private List<LinkElement> footNoteKeys = new ArrayList<LinkElement>();
34

    
35
	private List<BaseElement> footNotes = new ArrayList<BaseElement>();
36

    
37
	private List<BaseElement> originalSources = new ArrayList<BaseElement>();
38

    
39
	private List<DescriptionElementRepresentation> descriptionElements = new ArrayList<DescriptionElementRepresentation>();
40

    
41
	private String featureType = null;
42

    
43

    
44
	public List<LinkElement> getFootNoteKeys() {
45
		return footNoteKeys;
46
	}
47

    
48
	public List<BaseElement> getFootNotes() {
49
		return footNotes;
50
	}
51

    
52
	public List<BaseElement> getOriginalSourcesSections() {
53
		return originalSources;
54
	}
55

    
56

    
57
	public List<DescriptionElementRepresentation> getDescriptionElements() {
58
		return descriptionElements;
59
	}
60

    
61
	public String getFeatureType() {
62
		return featureType;
63
	}
64

    
65

    
66
	/**
67
	 * @param element
68
	 */
69
	public FeatureBlock(WebElement element, String enclosingTag, String ... elementTags) {
70
		super(element);
71

    
72
		List<WebElement> fnkList = element.findElements(By.className("footnote-key"));
73
		for(WebElement fnk : fnkList) {
74
			footNoteKeys.add(new LinkElement(fnk.findElement(By.tagName("a"))));
75
		}
76

    
77
		List<WebElement> fnList = element.findElements(By.className("footnote"));
78
		for(WebElement fn : fnList) {
79
			footNotes.add(new BaseElement(fn));
80
		}
81

    
82
		List<WebElement> sourcesList = element.findElements(By.className("sources"));
83
		for(WebElement source : sourcesList) {
84
			originalSources.add(new BaseElement(source));
85
		}
86

    
87
		WebElement descriptionElementsRepresentation =  element.findElement(By.className("description"));
88
		featureType = descriptionElementsRepresentation.getAttribute("id");
89

    
90
		//TODO throw exception instead of making an assetion! selenium should have appropriate exeptions
91
		assertEquals("Unexpected tag enclosing description element representations", enclosingTag, descriptionElementsRepresentation.getTagName());
92

    
93
		if(elementTags.length > 1){
94

    
95
			// handle multipart elements e.g. <dt></dt><dd></dd>
96
			HashMap<String, List<WebElement>> elementsByTag = new HashMap<String, List<WebElement>>();
97
			Integer lastSize = null;
98
			for (String elementTag : elementTags) {
99
				List<WebElement> foundElements = descriptionElementsRepresentation.findElements(By.tagName(elementTag));
100
				if(lastSize != null && foundElements.size() != lastSize){
101
					throw new NoSuchElementException("Mulitpart element lists differ in size");
102
				}
103
				lastSize = foundElements.size();
104
				elementsByTag.put(elementTag, foundElements);
105
			}
106

    
107
			for (int descriptionElementIndex = 0; descriptionElementIndex < lastSize; descriptionElementIndex++){
108
				List<WebElement> elementsByIndex = new ArrayList<WebElement>();
109
				for (String elementTag : elementTags) {
110
					elementsByIndex.add(elementsByTag.get(elementTag).get(descriptionElementIndex));
111
				}
112
				descriptionElements.add(new MultipartDescriptionElementRepresentation(elementsByIndex.toArray(new WebElement[elementsByIndex.size()])));
113

    
114
			}
115
		} else {
116
			// handle single elements
117
			String elementTag = elementTags[0];
118
			for(WebElement el : descriptionElementsRepresentation.findElements(By.tagName( elementTag ))) {
119
				descriptionElements.add(new DescriptionElementRepresentation(el));
120
			}
121
		}
122

    
123
	}
124

    
125
	/**
126
	 * @param indent
127
	 * @param computedFontSize
128
	 * @param expectedCssDisplay
129
	 * @param expectedListStyleType only applies if cssDisplay equals list-item
130
	 * @param expectedListStylePosition only applies if cssDisplay equals list-item
131
	 * @param expectedListStyleImage only applies if cssDisplay equals list-item
132
	 */
133
	public void testDescriptionElementLayout(int descriptionElementId, int indent, int computedFontSize
134
			, String expectedCssDisplay, String expectedListStyleType, String expectedListStylePosition, String expectedListStyleImage) {
135

    
136
		DescriptionElementRepresentation firstDescriptionElement = getDescriptionElements().get(descriptionElementId);
137

    
138
		if(firstDescriptionElement instanceof MultipartDescriptionElementRepresentation){
139
			int multipartElementIndex = 0;
140
			firstDescriptionElement = ((MultipartDescriptionElementRepresentation)firstDescriptionElement).multipartElements.get(multipartElementIndex);
141
		}
142
		int parentX = getElement().getLocation().getX();
143
		int elementX = firstDescriptionElement.getElement().getLocation().getX();
144
		double elementPadLeft = pxSizeToDouble(firstDescriptionElement.getElement().getCssValue("padding-left"));
145

    
146
		assertEquals(indent, elementX - parentX + elementPadLeft, PIXEL_TOLERANCE);
147
		assertEquals(computedFontSize, firstDescriptionElement.getComputedFontSize(), 0.5);
148
		assertEquals(expectedCssDisplay, firstDescriptionElement.getElement().getCssValue("display"));
149

    
150
		if(expectedCssDisplay.equals("list-item")){
151
			assertEquals(expectedListStylePosition, firstDescriptionElement.getElement().getCssValue("list-style-position"));
152
			assertEquals(expectedListStyleImage, firstDescriptionElement.getElement().getCssValue("list-style-image"));
153
			assertEquals(expectedListStyleType, firstDescriptionElement.getElement().getCssValue("list-style-type"));
154
		}
155
	}
156

    
157
}
(4-4/11)