Skip to content

Commit 2034a2c

Browse files
authored
Merge pull request #28 from NimaSoroush/freezeimage
Freezeimage
2 parents 1c95854 + 3723e44 commit 2034a2c

File tree

7 files changed

+77
-3
lines changed

7 files changed

+77
-3
lines changed

API.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
|----|----|-----|
1313
|`goto`|`string`|Url|
1414
|`wait`|`string`, `integer` or `func`|waiting time in millisecond `or` waiting for a selector `or` waiting until the function you supplied is evaluated as true|
15-
|`evaluate`|`func`|Evaluates a expression in the browser context|
15+
|`execute`|`func`|execute an expression in the browser context|
16+
|`freezeImage`|`string`|Selector name of a <img> tag containing animated image to be freezed before taking screenshot|
1617
|`capture`|`string`|`undefiend`, `document` or selector name|
1718

1819
#### Steps example
@@ -23,7 +24,8 @@
2324
steps: [
2425
{ name: 'goto', value: 'http://www.example.com' },
2526
{ name: 'wait', value: 5000 },
26-
{ name: 'evaluate', value: () => { alert("Hello! I am an alert box!!") } },
27+
{ name: 'freezeImage', value: '#myImage' },
28+
{ name: 'execute', value: () => { alert("Hello! I am an alert box!!") } },
2729
{ name: 'capture', value: 'document' },
2830
],
2931
...

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## [0.0.15] - 2017-08-03
2+
### Added
3+
- Adding evaluate functionality to evaluate expression on browser
4+
- Adding freeze image functionality to freeze animations
5+
16
## [0.0.14] - 2017-08-01
27
### Added
38
- Assign free ports to run chrome instances

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "differencify",
3-
"version": "0.0.14",
3+
"version": "0.0.15",
44
"description": "Perceptual diffing tool",
55
"main": "dist/index.js",
66
"scripts": {

src/actions.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ export default {
44
test: 'test',
55
wait: 'wait',
66
evaluate: 'evaluate',
7+
freezeImage: 'freezeImge',
78
};

src/chromyRunner.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import fs from 'fs';
22
import check from 'check-types';
33
import logger from './logger';
44
import compareImage from './compareImage';
5+
import freezeImage from './freezeImage';
56
import actions from './actions';
67
import { configTypes } from './defaultConfig';
78

@@ -101,6 +102,19 @@ const run = async (chromy, options, test) => {
101102
return false;
102103
}
103104
break;
105+
case actions.freezeImage:
106+
try {
107+
prefixedLogger.log(`Freezing image ${action.value} in browser`);
108+
const result = await chromy.evaluate(freezeImage(action.value));
109+
if (!result) {
110+
prefixedLogger.log(`Tag with selector ${action.value} is not a valid image`);
111+
return false;
112+
}
113+
} catch (error) {
114+
prefixedLogger.error(error);
115+
return false;
116+
}
117+
break;
104118
default:
105119
break;
106120
}

src/freezeImage.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const freezeImage = (selector) => {
2+
const image = document.querySelector(selector);
3+
if (image.tagName !== 'IMG') {
4+
return false;
5+
}
6+
const className = image.className;
7+
const canvas = document.createElement('canvas');
8+
canvas.className = className;
9+
const context = canvas.getContext('2d');
10+
image.parentNode.replaceChild(canvas, image);
11+
12+
canvas.width = image.width;
13+
canvas.height = image.height;
14+
context.drawImage(image, 0, 0);
15+
return true;
16+
};
17+
18+
export default freezeImage;

src/freezeImage.test.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import freezeImage from './freezeImage';
2+
3+
const replaceChild = jest.fn();
4+
document.querySelector = jest.fn(() => ({
5+
tagName: 'IMG',
6+
parentNode: {
7+
replaceChild,
8+
},
9+
}));
10+
11+
const drawImage = jest.fn();
12+
const getContext = jest.fn(() => ({
13+
drawImage,
14+
}));
15+
document.createElement = jest.fn(() => ({
16+
className: 'class',
17+
getContext,
18+
}));
19+
20+
describe('Freeze Image', () => {
21+
beforeEach(() => {
22+
document.querySelector.mockClear();
23+
document.createElement.mockClear();
24+
});
25+
26+
it('calls document with correct value', () => {
27+
freezeImage('test');
28+
expect(document.querySelector).toHaveBeenCalledWith('test');
29+
expect(document.createElement).toHaveBeenCalledWith('canvas');
30+
expect(getContext).toHaveBeenCalledWith('2d');
31+
expect(drawImage).toHaveBeenCalledTimes(1);
32+
expect(replaceChild).toHaveBeenCalledTimes(1);
33+
});
34+
});

0 commit comments

Comments
 (0)