1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
var assert = require("assert");
var hamjest = require("hamjest");
var assertThat = hamjest.assertThat;
var contains = hamjest.contains;
var equalTo = hamjest.equalTo;
var hasProperties = hamjest.hasProperties;
var mammoth = require("../");
var documents = require("../lib/documents");
var promises = require("../lib/promises");
var test = require("./test")(module);
test('mammoth.images.inline() should be an alias of mammoth.images.imgElement()', function() {
assert.ok(mammoth.images.inline === mammoth.images.imgElement);
});
test('mammoth.images.dataUri() encodes images in base64', function() {
var imageBuffer = new Buffer("abc");
var image = new documents.Image({
readImage: function(encoding) {
return promises.when(imageBuffer.toString(encoding));
},
contentType: "image/jpeg"
});
return mammoth.images.dataUri(image).then(function(result) {
assertThat(result, contains(
hasProperties({tag: hasProperties({attributes: {"src": "data:image/jpeg;base64,YWJj"}})})
));
});
});
test('mammoth.images.imgElement()', {
'when element does not have alt text then alt attribute is not set': function() {
var imageBuffer = new Buffer("abc");
var image = new documents.Image({
readImage: function(encoding) {
return promises.when(imageBuffer.toString(encoding));
},
contentType: "image/jpeg"
});
var result = mammoth.images.imgElement(function(image) {
return {src: "<src>"};
})(image);
return result.then(function(result) {
assertThat(result, contains(
hasProperties({
tag: hasProperties({
attributes: equalTo({src: "<src>"})
})
})
));
});
},
'when element has alt text then alt attribute is set': function() {
var imageBuffer = new Buffer("abc");
var image = new documents.Image({
readImage: function(encoding) {
return promises.when(imageBuffer.toString(encoding));
},
contentType: "image/jpeg",
altText: "<alt>"
});
var result = mammoth.images.imgElement(function(image) {
return {src: "<src>"};
})(image);
return result.then(function(result) {
assertThat(result, contains(
hasProperties({
tag: hasProperties({
attributes: equalTo({alt: "<alt>", src: "<src>"})
})
})
));
});
},
'image alt text can be overridden by alt attribute returned from function': function() {
var imageBuffer = new Buffer("abc");
var image = new documents.Image({
readImage: function(encoding) {
return promises.when(imageBuffer.toString(encoding));
},
contentType: "image/jpeg",
altText: "<alt>"
});
var result = mammoth.images.imgElement(function(image) {
return {alt: "<alt override>", src: "<src>"};
})(image);
return result.then(function(result) {
assertThat(result, contains(
hasProperties({
tag: hasProperties({
attributes: equalTo({alt: "<alt override>", src: "<src>"})
})
})
));
});
}
});
test("imageFilenameExtension", {
"extension is derived from subtype of content type": function() {
var image = new documents.Image({
contentType: "image/gif"
});
var result = mammoth.images.imageFilenameExtension(image);
assertThat(result, equalTo("gif"));
},
"data after second slash is ignored": function() {
var image = new documents.Image({
contentType: "image/gif/jpeg"
});
var result = mammoth.images.imageFilenameExtension(image);
assertThat(result, equalTo("gif"));
},
"backslashes are treated as forward slashes": function() {
var image = new documents.Image({
contentType: "image\\gif\\..\\"
});
var result = mammoth.images.imageFilenameExtension(image);
assertThat(result, equalTo("gif"));
},
"when there is no subtype then null is returned": function() {
var image = new documents.Image({
contentType: "image"
});
var result = mammoth.images.imageFilenameExtension(image);
assertThat(result, equalTo(undefined));
}
});
|