Skip to content

Commit 35f2c3c

Browse files
committed
Add incomplete deserialization tests
Verifies a few fields of ScannerCapabilities and ScannerStatus that are interesting to me atm.
1 parent aeca3c3 commit 35f2c3c

File tree

3 files changed

+275
-0
lines changed

3 files changed

+275
-0
lines changed

escl-scan/src/structs.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,59 @@ pub struct ScanSettings {
180180
#[serde(rename = "scan:YResolution")]
181181
pub y_resolution: i16,
182182
}
183+
184+
#[cfg(test)]
185+
mod tests {
186+
use crate::structs::*;
187+
use std::io::Read;
188+
189+
#[test]
190+
fn scanner_capabilities() {
191+
let xml_file_result =
192+
std::fs::File::open("../reference/Brother_MFC-2710DW_Capabilities.xml");
193+
assert!(xml_file_result.is_ok());
194+
let mut xml = String::new();
195+
assert!(xml_file_result
196+
.ok()
197+
.unwrap()
198+
.read_to_string(&mut xml)
199+
.is_ok());
200+
201+
let result = serde_xml_rs::from_str::<ScannerCapabilities>(&xml);
202+
if let Err(err) = result {
203+
println!("{err}");
204+
assert!(false);
205+
return;
206+
}
207+
208+
assert!(result.is_ok());
209+
let caps = result.ok().unwrap();
210+
let setting_profiles = caps.platen.platen_input_caps.setting_profiles.entries;
211+
assert!(setting_profiles.len() == 1);
212+
let platen_profile = setting_profiles.first().unwrap();
213+
let color_modes = &platen_profile.color_modes.entries;
214+
assert!(color_modes.len() == 3);
215+
assert!(color_modes[0].mode_name == "BlackAndWhite1");
216+
assert!(color_modes[1].mode_name == "Grayscale8");
217+
assert!(color_modes[2].mode_name == "RGB24");
218+
}
219+
220+
#[test]
221+
fn scanner_status() {
222+
let xml_file_result =
223+
std::fs::File::open("../reference/Brother_MFC-2710DW_ScannerStatus.xml");
224+
assert!(xml_file_result.is_ok());
225+
let mut xml = String::new();
226+
assert!(xml_file_result
227+
.ok()
228+
.unwrap()
229+
.read_to_string(&mut xml)
230+
.is_ok());
231+
232+
let result = serde_xml_rs::from_str::<ScannerStatus>(&xml);
233+
assert!(result.is_ok());
234+
let status = result.ok().unwrap();
235+
assert!(status.state == ScannerState::Idle);
236+
// TODO adf_state
237+
}
238+
}
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<scan:ScannerCapabilities xmlns:scan="http://schemas.hp.com/imaging/escl/2011/05/03"
3+
xmlns:pwg="http://www.pwg.org/schemas/2010/12/sm"
4+
xmlns:dest="http://schemas.hp.com/imaging/destination/2011/06/06"
5+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.hp.com/imaging/escl/2011/05/03 ../../schemas/eSCL-1_92.xsd">
6+
<pwg:Version>2.63</pwg:Version>
7+
<pwg:MakeAndModel>Brother MFC-L2710DW series</pwg:MakeAndModel>
8+
<pwg:SerialNumber>E78295A8N498138</pwg:SerialNumber>
9+
<scan:UUID>e3248000-80ce-11db-8000-3c2af4493199</scan:UUID>
10+
<scan:AdminURI>http://brw2c6fc93127d1.local./net/net/airprint.html</scan:AdminURI>
11+
<scan:IconURI>http://brw2c6fc93127d1.local./icons/device-icons-128.png</scan:IconURI>
12+
<scan:Platen>
13+
<scan:PlatenInputCaps>
14+
<scan:MinWidth>16</scan:MinWidth>
15+
<scan:MaxWidth>2550</scan:MaxWidth>
16+
<scan:MinHeight>16</scan:MinHeight>
17+
<scan:MaxHeight>3507</scan:MaxHeight>
18+
<scan:MaxScanRegions>1</scan:MaxScanRegions>
19+
<scan:SettingProfiles>
20+
<scan:SettingProfile>
21+
<scan:ColorModes>
22+
<scan:ColorMode>BlackAndWhite1</scan:ColorMode>
23+
<scan:ColorMode>Grayscale8</scan:ColorMode>
24+
<scan:ColorMode>RGB24</scan:ColorMode>
25+
</scan:ColorModes>
26+
<scan:DocumentFormats>
27+
<pwg:DocumentFormat>application/pdf</pwg:DocumentFormat>
28+
<pwg:DocumentFormat>image/jpeg</pwg:DocumentFormat>
29+
<scan:DocumentFormatExt>application/pdf</scan:DocumentFormatExt>
30+
<scan:DocumentFormatExt>image/jpeg</scan:DocumentFormatExt>
31+
</scan:DocumentFormats>
32+
<scan:SupportedResolutions>
33+
<scan:DiscreteResolutions>
34+
<scan:DiscreteResolution>
35+
<scan:XResolution>100</scan:XResolution>
36+
<scan:YResolution>100</scan:YResolution>
37+
</scan:DiscreteResolution>
38+
<scan:DiscreteResolution>
39+
<scan:XResolution>200</scan:XResolution>
40+
<scan:YResolution>200</scan:YResolution>
41+
</scan:DiscreteResolution>
42+
<scan:DiscreteResolution>
43+
<scan:XResolution>300</scan:XResolution>
44+
<scan:YResolution>300</scan:YResolution>
45+
</scan:DiscreteResolution>
46+
<scan:DiscreteResolution>
47+
<scan:XResolution>600</scan:XResolution>
48+
<scan:YResolution>600</scan:YResolution>
49+
</scan:DiscreteResolution>
50+
</scan:DiscreteResolutions>
51+
</scan:SupportedResolutions>
52+
<scan:ColorSpaces>
53+
<scan:ColorSpace>CMYK</scan:ColorSpace>
54+
<scan:ColorSpace>YCC</scan:ColorSpace>
55+
<scan:ColorSpace>sRGB</scan:ColorSpace>
56+
</scan:ColorSpaces>
57+
<scan:CcdChannels>
58+
<scan:CcdChannel>Red</scan:CcdChannel>
59+
<scan:CcdChannel>Green</scan:CcdChannel>
60+
<scan:CcdChannel>Blue</scan:CcdChannel>
61+
<scan:CcdChannel>NTSC</scan:CcdChannel>
62+
<scan:CcdChannel>GrayCcd</scan:CcdChannel>
63+
<scan:CcdChannel>GrayCcdEmulated</scan:CcdChannel>
64+
</scan:CcdChannels>
65+
<scan:BinaryRenderings>
66+
<scan:BinaryRendering>Halftone</scan:BinaryRendering>
67+
<scan:BinaryRendering>Threshold</scan:BinaryRendering>
68+
</scan:BinaryRenderings>
69+
</scan:SettingProfile>
70+
</scan:SettingProfiles>
71+
<scan:SupportedIntents>
72+
<scan:Intent>Document</scan:Intent>
73+
<scan:Intent>TextAndGraphic</scan:Intent>
74+
<scan:Intent>Photo</scan:Intent>
75+
<scan:Intent>Preview</scan:Intent>
76+
</scan:SupportedIntents>
77+
<scan:MaxOpticalXResolution>2400</scan:MaxOpticalXResolution>
78+
<scan:MaxOpticalYResolution>2400</scan:MaxOpticalYResolution>
79+
<scan:RiskyLeftMargin>0</scan:RiskyLeftMargin>
80+
<scan:RiskyRightMargin>0</scan:RiskyRightMargin>
81+
<scan:RiskyTopMargin>0</scan:RiskyTopMargin>
82+
<scan:RiskyBottomMargin>0</scan:RiskyBottomMargin>
83+
<scan:MaxPhysicalWidth>0</scan:MaxPhysicalWidth>
84+
<scan:MaxPhysicalHeight>0</scan:MaxPhysicalHeight>
85+
</scan:PlatenInputCaps>
86+
</scan:Platen>
87+
<scan:Adf>
88+
<scan:AdfSimplexInputCaps>
89+
<scan:MinWidth>16</scan:MinWidth>
90+
<scan:MaxWidth>2550</scan:MaxWidth>
91+
<scan:MinHeight>16</scan:MinHeight>
92+
<scan:MaxHeight>4200</scan:MaxHeight>
93+
<scan:MaxScanRegions>1</scan:MaxScanRegions>
94+
<scan:SettingProfiles>
95+
<scan:SettingProfile>
96+
<scan:ColorModes>
97+
<scan:ColorMode>BlackAndWhite1</scan:ColorMode>
98+
<scan:ColorMode>Grayscale8</scan:ColorMode>
99+
<scan:ColorMode>RGB24</scan:ColorMode>
100+
</scan:ColorModes>
101+
<scan:DocumentFormats>
102+
<pwg:DocumentFormat>application/pdf</pwg:DocumentFormat>
103+
<pwg:DocumentFormat>image/jpeg</pwg:DocumentFormat>
104+
<scan:DocumentFormatExt>application/pdf</scan:DocumentFormatExt>
105+
<scan:DocumentFormatExt>image/jpeg</scan:DocumentFormatExt>
106+
</scan:DocumentFormats>
107+
<scan:SupportedResolutions>
108+
<scan:DiscreteResolutions>
109+
<scan:DiscreteResolution>
110+
<scan:XResolution>100</scan:XResolution>
111+
<scan:YResolution>100</scan:YResolution>
112+
</scan:DiscreteResolution>
113+
<scan:DiscreteResolution>
114+
<scan:XResolution>200</scan:XResolution>
115+
<scan:YResolution>200</scan:YResolution>
116+
</scan:DiscreteResolution>
117+
<scan:DiscreteResolution>
118+
<scan:XResolution>300</scan:XResolution>
119+
<scan:YResolution>300</scan:YResolution>
120+
</scan:DiscreteResolution>
121+
<scan:DiscreteResolution>
122+
<scan:XResolution>600</scan:XResolution>
123+
<scan:YResolution>600</scan:YResolution>
124+
</scan:DiscreteResolution>
125+
</scan:DiscreteResolutions>
126+
</scan:SupportedResolutions>
127+
<scan:ColorSpaces>
128+
<scan:ColorSpace>CMYK</scan:ColorSpace>
129+
<scan:ColorSpace>YCC</scan:ColorSpace>
130+
<scan:ColorSpace>sRGB</scan:ColorSpace>
131+
</scan:ColorSpaces>
132+
<scan:CcdChannels>
133+
<scan:CcdChannel>Red</scan:CcdChannel>
134+
<scan:CcdChannel>Green</scan:CcdChannel>
135+
<scan:CcdChannel>Blue</scan:CcdChannel>
136+
<scan:CcdChannel>NTSC</scan:CcdChannel>
137+
<scan:CcdChannel>GrayCcd</scan:CcdChannel>
138+
<scan:CcdChannel>GrayCcdEmulated</scan:CcdChannel>
139+
</scan:CcdChannels>
140+
<scan:BinaryRenderings>
141+
<scan:BinaryRendering>Halftone</scan:BinaryRendering>
142+
<scan:BinaryRendering>Threshold</scan:BinaryRendering>
143+
</scan:BinaryRenderings>
144+
</scan:SettingProfile>
145+
</scan:SettingProfiles>
146+
<scan:SupportedIntents>
147+
<scan:Intent>Document</scan:Intent>
148+
<scan:Intent>TextAndGraphic</scan:Intent>
149+
<scan:Intent>Photo</scan:Intent>
150+
<scan:Intent>Preview</scan:Intent>
151+
</scan:SupportedIntents>
152+
<scan:MaxOpticalXResolution>2400</scan:MaxOpticalXResolution>
153+
<scan:MaxOpticalYResolution>2400</scan:MaxOpticalYResolution>
154+
<scan:RiskyLeftMargin>0</scan:RiskyLeftMargin>
155+
<scan:RiskyRightMargin>0</scan:RiskyRightMargin>
156+
<scan:RiskyTopMargin>0</scan:RiskyTopMargin>
157+
<scan:RiskyBottomMargin>0</scan:RiskyBottomMargin>
158+
<scan:MaxPhysicalWidth>0</scan:MaxPhysicalWidth>
159+
<scan:MaxPhysicalHeight>0</scan:MaxPhysicalHeight>
160+
</scan:AdfSimplexInputCaps>
161+
<scan:FeederCapacity>20</scan:FeederCapacity>
162+
<scan:AdfOptions>
163+
<scan:AdfOption>DetectPaperLoaded</scan:AdfOption>
164+
</scan:AdfOptions>
165+
</scan:Adf>
166+
<scan:StoredJobRequestSupport>
167+
<scan:MaxStoredjobRequests>0</scan:MaxStoredjobRequests>
168+
<scan:TimeoutInSeconds>0</scan:TimeoutInSeconds>
169+
</scan:StoredJobRequestSupport>
170+
</scan:ScannerCapabilities>
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<scan:ScannerStatus xmlns:pwg="http://www.pwg.org/schemas/2010/12/sm"
3+
xmlns:scan="http://schemas.hp.com/imaging/escl/2011/05/03"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.hp.com/imaging/escl/2011/05/03 ../../schemas/eSCL-1_92.xsd">
5+
<pwg:Version>2.63</pwg:Version>
6+
<pwg:State>Idle</pwg:State>
7+
<scan:AdfState>ScannerAdfEmpty</scan:AdfState>
8+
<scan:Jobs>
9+
<scan:JobInfo>
10+
<pwg:JobUri>
11+
/eSCL/ScanJobs/71af3a90-8d5b-11ee-80cb-3c2af4493199
12+
</pwg:JobUri>
13+
<pwg:JobUuid>urn:uuid:71af3a90-8d5b-11ee-80cb-3c2af4493199</pwg:JobUuid>
14+
<scan:Age>289564</scan:Age>
15+
<pwg:ImagesCompleted>1</pwg:ImagesCompleted>
16+
<pwg:ImagesToTransfer>1</pwg:ImagesToTransfer>
17+
<pwg:JobState>Completed</pwg:JobState>
18+
<pwg:JobStateReasons>
19+
<pwg:JobStateReason>JobCompletedSuccessfully</pwg:JobStateReason>
20+
</pwg:JobStateReasons>
21+
</scan:JobInfo>
22+
<scan:JobInfo>
23+
<pwg:JobUri>
24+
/eSCL/ScanJobs/0381d914-8e8d-11ee-8108-3c2af4493199
25+
</pwg:JobUri>
26+
<pwg:JobUuid>urn:uuid:0381d914-8e8d-11ee-8108-3c2af4493199</pwg:JobUuid>
27+
<scan:Age>285373</scan:Age>
28+
<pwg:ImagesCompleted>1</pwg:ImagesCompleted>
29+
<pwg:ImagesToTransfer>1</pwg:ImagesToTransfer>
30+
<pwg:JobState>Completed</pwg:JobState>
31+
<pwg:JobStateReasons>
32+
<pwg:JobStateReason>JobCompletedSuccessfully</pwg:JobStateReason>
33+
</pwg:JobStateReasons>
34+
</scan:JobInfo>
35+
<scan:JobInfo>
36+
<pwg:JobUri>
37+
/eSCL/ScanJobs/253b25c7-8e8d-11ee-8109-3c2af4493199
38+
</pwg:JobUri>
39+
<pwg:JobUuid>urn:uuid:253b25c7-8e8d-11ee-8109-3c2af4493199</pwg:JobUuid>
40+
<scan:Age>285324</scan:Age>
41+
<pwg:ImagesCompleted>1</pwg:ImagesCompleted>
42+
<pwg:ImagesToTransfer>1</pwg:ImagesToTransfer>
43+
<pwg:JobState>Completed</pwg:JobState>
44+
<pwg:JobStateReasons>
45+
<pwg:JobStateReason>JobCompletedSuccessfully</pwg:JobStateReason>
46+
</pwg:JobStateReasons>
47+
</scan:JobInfo>
48+
</scan:Jobs>
49+
</scan:ScannerStatus>

0 commit comments

Comments
 (0)