Skip to content

Commit e916ff9

Browse files
mttwcVishaalK
authored andcommitted
Test pdf components (#170)
* Got the first UT to work * Added UTs for the new pdf components * More test cases
1 parent 7baf3a9 commit e916ff9

File tree

7 files changed

+176
-7
lines changed

7 files changed

+176
-7
lines changed

src/scripts/clipperUI/components/previewViewer/pdfPageViewport.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,25 @@ export interface PdfPageViewportProp {
1111
}
1212

1313
class PdfPageViewportClass extends ComponentBase<{}, PdfPageViewportProp> {
14-
private getContainerDimensionsStyle(): string {
14+
private getContainerStyle(): string {
1515
return "max-width: " + this.props.viewportDimensions.width + "px;";
1616
}
1717

18-
private getPlaceholderDimensionsStyle(): string {
18+
private getImageStyle(): string {
19+
let styleString = "max-width: " + this.props.viewportDimensions.width + "px;";
20+
return styleString + "max-height: " + this.props.viewportDimensions.height + "px;";
21+
}
22+
23+
private getPlaceholderStyle(): string {
1924
return "padding-bottom: " + ((this.props.viewportDimensions.height / this.props.viewportDimensions.width) * 100) + "%;";
2025
}
2126

2227
public render() {
2328
return (
24-
<div data-pageindex={this.props.index} style={this.getContainerDimensionsStyle()}>
29+
<div data-pageindex={this.props.index} style={this.getContainerStyle()}>
2530
{this.props.imgUrl ?
26-
<img class={Constants.Classes.pdfPreviewImage} src={this.props.imgUrl}></img> :
27-
<div style={this.getPlaceholderDimensionsStyle()}></div>}
31+
<img class={Constants.Classes.pdfPreviewImage} src={this.props.imgUrl} style={this.getImageStyle()}></img> :
32+
<div style={this.getPlaceholderStyle()}></div>}
2833
</div>
2934
);
3035
}

src/scripts/clipperUI/components/previewViewer/pdfPreviewPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class PdfPreviewPageClass extends ComponentBase<{}, PdfPreviewPageProp> {
2121
<PdfPageViewport viewportDimensions={this.props.viewportDimensions} imgUrl={this.props.imgUrl} index={this.props.index} />
2222
</div>
2323
<div className={Constants.Classes.overlay + (this.props.showPageNumber ? "" : (" " + Constants.Classes.overlayHidden))}>
24-
<span class="overlay-number">{this.props.index + 1}</span>
24+
<span class={Constants.Classes.overlayNumber}>{this.props.index + 1}</span>
2525
</div>
2626
</div>
2727
);

src/scripts/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export module Constants {
2828
export var attachmentOverlay = "attachment-overlay";
2929
export var overlay = "overlay";
3030
export var overlayHidden = "overlay-hidden";
31+
export var overlayNumber = "overlay-number";
3132
export var pdfPreviewImage = "pdf-preview-image";
3233
export var pdfPreviewImageCanvas = "pdf-preview-image-canvas";
3334
export var unselected = "unselected";

src/tests/clipperUI/components/previewViewer/pdfDataUrls.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,10 @@ let string1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAICAYAAAAvOAW
33
let string2 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAD4CAYAAAC+LPu/AAACaklEQVR4Xu3VsQqDMABFUf3/n3VQlIjYudBauGM52bNcTl7mfd/v8zwn573Auq7TvG2bOB9kLMsizrcXI87DlogjTvtqyCGHnFaAnNbN5pBDTitATutmc8ghpxUgp3WzOeSQ0wqQ07rZHHLIaQXIad1sDjnktALktG42hxxyWgFyWjebQw45rQA5rZvNIYecVoCc1s3mkENOK0BO62ZzyCGnFSCndbM55JDTCpDTutkccshpBchp3WwOOeS0AuS0bjaHHHJaAXJaN5tDDjmtADmtm80hh5xWgJzWzeaQQ04rQE7rZnPIIacVIKd1sznkkNMKkNO62RxyyGkFyGndbA455LQC5LRuNocccloBclo3m0MOOa0AOa2bzSGHnFaAnNbN5pBDTitATutmc8ghpxUgp3WzOeSQ0wqQ07rZHHLIaQXIad1sDjnktALktG42hxxyWgFyWjebQw45rQA5rZvNIYecVoCc1s3mkENOK0BO62ZzyCGnFSCndbM55JDTCpDTutkccshpBchp3WwOOeS0AuS0bjaHHHJaAXJaN5tDDjmtADmtm80hh5xWgJzWzeaQQ04rQE7rZnPIIacVIKd1sznkkNMKkNO62RxyyGkFyGndbA455LQC5LRuNocccloBclo3m0MOOa0AOa2bzSGHnFaAnNbN5pBDTitATutmc8ghpxUgp3WzOeSQ0wqQ07rZHHLIaQXIad1sDjnktALktG42hxxyWgFyWjebQw45rQA5rZvNIYecVoCc1s3mkENOK0BO62ZzyCGnFSCndbM55JDTCpDTutmcX3LGGPd1XS3vH986jmN6AdP4U8daodwiAAAAAElFTkSuQmCC";
44

55
let pdfDataUrls: string[] = [string0, string1, string2];
6+
let pdfDataUrlDimensions = [
7+
{ width: "14px", height: "9px" },
8+
{ width: "11px", height: "8px" },
9+
{ width: "71px", height: "248px" }
10+
];
611

7-
export {pdfDataUrls};
12+
export {pdfDataUrls, pdfDataUrlDimensions};
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import {PdfPageViewport} from "../../../../scripts/clipperUI/components/previewViewer/pdfPageViewport";
2+
3+
import {HelperFunctions} from "../../../helperFunctions";
4+
5+
import {pdfDataUrls, pdfDataUrlDimensions} from "./pdfDataUrls";
6+
7+
QUnit.module("pdfPageViewport", {});
8+
9+
test("Given both the imgUrl and dimensions, the imgUrl is rendered in the component in a container div under those dimensions", () => {
10+
let expectedWidth = pdfDataUrlDimensions[0].width;
11+
let expectedHeight = pdfDataUrlDimensions[0].height;
12+
13+
let pdfPageViewport = HelperFunctions.mountToFixture(
14+
<PdfPageViewport viewportDimensions={{ width: parseInt(expectedWidth, 10), height: parseInt(expectedHeight, 10) }}
15+
imgUrl={pdfDataUrls[0]} index={0} />);
16+
17+
let container = HelperFunctions.getFixture().firstChild as HTMLElement;
18+
let containerComputedStyle = window.getComputedStyle(container);
19+
strictEqual(containerComputedStyle.maxWidth, expectedWidth, "The container's max width should be the specified viewport width");
20+
21+
let images = container.getElementsByTagName("img");
22+
strictEqual(images.length, 1, "There should be one image present in the container");
23+
24+
let imageComputedStyle = window.getComputedStyle(images[0]);
25+
strictEqual(imageComputedStyle.maxWidth, expectedWidth, "The image's max width should be the specified viewport width");
26+
strictEqual(imageComputedStyle.maxHeight, expectedHeight, "The image's max height should be the specified viewport height");
27+
});
28+
29+
test("When not given the imgUrl, the component should render a blank viewport with the specified dimensions", () => {
30+
let expectedWidth = pdfDataUrlDimensions[0].width;
31+
let expectedHeight = pdfDataUrlDimensions[0].height;
32+
33+
let pdfPageViewport = HelperFunctions.mountToFixture(
34+
<PdfPageViewport viewportDimensions={{ width: parseInt(expectedWidth, 10), height: parseInt(expectedHeight, 10) }}
35+
index={0} />);
36+
37+
let container = HelperFunctions.getFixture().firstChild as HTMLElement;
38+
let containerComputedStyle = window.getComputedStyle(container);
39+
strictEqual(containerComputedStyle.width, expectedWidth, "The container's width should be the specified viewport width");
40+
strictEqual(containerComputedStyle.height, expectedHeight, "The container's height should be the specified viewport width");
41+
42+
let images = container.getElementsByTagName("img");
43+
strictEqual(images.length, 0, "There should be no images rendered");
44+
});
45+
46+
test("Given the index, the component should render the container with the index stored in the attribute 'data-pageindex'", () => {
47+
let expectedIndex = 11;
48+
49+
let pdfPageViewport = HelperFunctions.mountToFixture(
50+
<PdfPageViewport viewportDimensions={{ width: 20, height: 15 }}
51+
imgUrl={pdfDataUrls[0]} index={expectedIndex} />);
52+
53+
let container = HelperFunctions.getFixture().firstChild as HTMLElement;
54+
strictEqual((container.dataset as any).pageindex, "" + expectedIndex, "The index should be stored in the data-pageindex attribute");
55+
});
56+
57+
test("Given the index, but not an imgUrl, the component should still render the container with the index stored in the attribute 'data-pageindex'", () => {
58+
let expectedIndex = 999;
59+
60+
let pdfPageViewport = HelperFunctions.mountToFixture(
61+
<PdfPageViewport viewportDimensions={{ width: 20, height: 15 }}
62+
index={expectedIndex} />);
63+
64+
let container = HelperFunctions.getFixture().firstChild as HTMLElement;
65+
strictEqual((container.dataset as any).pageindex, "" + expectedIndex, "The index should be stored in the data-pageindex attribute");
66+
});
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import {Constants} from "../../../../scripts/constants";
2+
3+
import {PdfPreviewPage, PdfPreviewPageProp} from "../../../../scripts/clipperUI/components/previewViewer/pdfPreviewPage";
4+
5+
import {HelperFunctions} from "../../../helperFunctions";
6+
7+
import {pdfDataUrls, pdfDataUrlDimensions} from "./pdfDataUrls";
8+
9+
QUnit.module("pdfPreviewPage", {});
10+
11+
test("Given that the page is selected, the image container's opacity should be set to 1", () => {
12+
let pdfPreviewPage = HelperFunctions.mountToFixture(
13+
<PdfPreviewPage viewportDimensions={{ width: 50, height: 50 }}
14+
imgUrl={pdfDataUrls[0]} index={0} showPageNumber={false} isSelected={true} />);
15+
16+
let container = HelperFunctions.getFixture().getElementsByClassName(Constants.Classes.pdfPreviewImageCanvas)[0];
17+
ok(!container.classList.contains(Constants.Classes.unselected), "The unselected class should not be applied to the container");
18+
strictEqual(HelperFunctions.getFixture().getElementsByClassName(Constants.Classes.unselected).length, 0,
19+
"The unselected class should not be applied anywhere");
20+
});
21+
22+
test("Given that the page is not selected, the image container's opacity should be set to 0.3", () => {
23+
let pdfPreviewPage = HelperFunctions.mountToFixture(
24+
<PdfPreviewPage viewportDimensions={{ width: 50, height: 50 }}
25+
imgUrl={pdfDataUrls[0]} index={0} showPageNumber={false} isSelected={false} />);
26+
27+
let container = HelperFunctions.getFixture().getElementsByClassName(Constants.Classes.pdfPreviewImageCanvas)[0];
28+
ok(container.classList.contains(Constants.Classes.unselected), "The unselected class should be applied to the container");
29+
strictEqual(HelperFunctions.getFixture().getElementsByClassName(Constants.Classes.unselected).length, 1,
30+
"The unselected class should only be applied once in the component");
31+
});
32+
33+
// Note: Because we fade out the page numbers using a css class, we check for opacity to determine if the number is in view
34+
35+
test("Given that showPageNumber is true, the page number should be shown", () => {
36+
let index = 19;
37+
let expectedPageNumber = "" + (index + 1);
38+
let pdfPreviewPage = HelperFunctions.mountToFixture(
39+
<PdfPreviewPage viewportDimensions={{ width: 50, height: 50 }}
40+
imgUrl={pdfDataUrls[0]} index={index} showPageNumber={true} isSelected={true} />);
41+
42+
let overlay = HelperFunctions.getFixture().getElementsByClassName(Constants.Classes.overlay)[0] as HTMLElement;
43+
strictEqual(overlay.innerText, expectedPageNumber, "The page number shown should be the index + 1");
44+
ok(!overlay.classList.contains(Constants.Classes.overlayHidden), "The overlay should not be hidden");
45+
});
46+
47+
test("Given that showPageNumber is true, but the page is not selected, the page number should still be shown", () => {
48+
let index = 19;
49+
let expectedPageNumber = "" + (index + 1);
50+
let pdfPreviewPage = HelperFunctions.mountToFixture(
51+
<PdfPreviewPage viewportDimensions={{ width: 50, height: 50 }}
52+
imgUrl={pdfDataUrls[0]} index={index} showPageNumber={true} isSelected={false} />);
53+
54+
let overlay = HelperFunctions.getFixture().getElementsByClassName(Constants.Classes.overlay)[0] as HTMLElement;
55+
strictEqual(overlay.innerText, expectedPageNumber, "The page number shown should be the index + 1");
56+
ok(!overlay.classList.contains(Constants.Classes.overlayHidden), "The overlay should not be hidden");
57+
});
58+
59+
test("Given that showPageNumber is true, but the imgUrl is undefined, the page number should still be shown", () => {
60+
let index = 19;
61+
let expectedPageNumber = "" + (index + 1);
62+
let pdfPreviewPage = HelperFunctions.mountToFixture(
63+
<PdfPreviewPage viewportDimensions={{ width: 50, height: 50 }}
64+
index={index} showPageNumber={true} isSelected={true} />);
65+
66+
let overlay = HelperFunctions.getFixture().getElementsByClassName(Constants.Classes.overlay)[0] as HTMLElement;
67+
strictEqual(overlay.innerText, expectedPageNumber, "The page number shown should be the index + 1");
68+
ok(!overlay.classList.contains(Constants.Classes.overlayHidden), "The overlay should not be hidden");
69+
});
70+
71+
test("Given that showPageNumber is true and the index is 0, the page number should be shown", () => {
72+
let index = 0;
73+
let expectedPageNumber = "" + (index + 1);
74+
let pdfPreviewPage = HelperFunctions.mountToFixture(
75+
<PdfPreviewPage viewportDimensions={{ width: 50, height: 50 }}
76+
imgUrl={pdfDataUrls[0]} index={index} showPageNumber={true} isSelected={true} />);
77+
78+
let overlay = HelperFunctions.getFixture().getElementsByClassName(Constants.Classes.overlay)[0] as HTMLElement;
79+
strictEqual(overlay.innerText, expectedPageNumber, "The page number shown should be the index + 1");
80+
ok(!overlay.classList.contains(Constants.Classes.overlayHidden), "The overlay should not be hidden");
81+
});
82+
83+
test("Given that showPageNumber is false, the page number should not be shown", () => {
84+
let pdfPreviewPage = HelperFunctions.mountToFixture(
85+
<PdfPreviewPage viewportDimensions={{ width: 50, height: 50 }}
86+
imgUrl={pdfDataUrls[0]} index={10} showPageNumber={false} isSelected={true} />);
87+
88+
let overlay = HelperFunctions.getFixture().getElementsByClassName(Constants.Classes.overlay)[0] as HTMLElement;
89+
ok(overlay.classList.contains(Constants.Classes.overlayHidden), "The overlay should be hidden");
90+
});

src/tests/tests.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525

2626
<script type="text/javascript" src="clipperUI/components/previewViewer/augmentationPreview_tests.js"></script>
2727
<script type="text/javascript" src="clipperUI/components/previewViewer/fullPagePreview_tests.js"></script>
28+
<script type="text/javascript" src="clipperUI/components/previewViewer/pdfPageViewport_tests.js"></script>
2829
<script type="text/javascript" src="clipperUI/components/previewViewer/pdfPreview_tests.js"></script>
30+
<script type="text/javascript" src="clipperUI/components/previewViewer/pdfPreviewPage_tests.js"></script>
2931
<script type="text/javascript" src="clipperUI/components/previewViewer/previewViewerAugmentationHeader_tests.js"></script>
3032
<script type="text/javascript" src="clipperUI/components/previewViewer/previewViewerPdfHeader_tests.js"></script>
3133
<script type="text/javascript" src="clipperUI/components/previewViewer/previewViewerRegionHeader_tests.js"></script>

0 commit comments

Comments
 (0)