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
#![deny(missing_docs)]
use std::io::Write;
pub use xml::writer::EmitterConfig;
mod consts;
mod debug;
pub mod manifest;
mod serialize;
mod xml_alias {
pub use xml::{
attribute::Attribute as XmlAttribute,
common::XmlVersion,
name::Name as XmlName,
namespace::{self, Namespace as XmlNamespace},
};
}
pub use manifest::AssemblyManifest;
use serialize::SerializeResult;
#[allow(missing_docs)]
pub mod error {
pub use crate::serialize::{SerializeError, SerializeResult};
}
impl AssemblyManifest {
pub fn serialize<W: Write>(&self, writer: W) -> SerializeResult<W> {
self.serialize_with_config(EmitterConfig::new(), writer)
}
pub fn serialize_to_string_with_config(
&self,
config: EmitterConfig,
) -> SerializeResult<String> {
let buf: Vec<u8> = Vec::new();
let buf = self.serialize_with_config(config, buf)?;
Ok(String::from_utf8(buf).unwrap())
}
pub fn serialize_to_string(&self) -> SerializeResult<String> {
self.serialize_to_string_with_config(EmitterConfig::new())
}
}
#[test]
fn test_empty_manifest() {
let manifest = AssemblyManifest::default();
let mut config = EmitterConfig::new();
config.indent_string = "".into();
config.line_separator = "".into();
let serialized = manifest.serialize_to_string_with_config(config).unwrap();
assert_eq!(serialized, include_str!("tests/empty.xml"));
}
#[test]
fn test_supported_os_single() {
use manifest::*;
let mut manifest = AssemblyManifest::default();
manifest
.compatibility
.supported_os
.insert(SupportedOS::Windows10);
let mut config = EmitterConfig::new();
config.indent_string = "".into();
config.line_separator = "".into();
let serialized = manifest.serialize_to_string_with_config(config).unwrap();
assert_eq!(serialized, include_str!("tests/supported_os_single.xml"));
}
#[test]
fn test_max_version_tested() {
use manifest::*;
let mut manifest = AssemblyManifest::default();
manifest.compatibility.max_version_tested = Some(AssemblyVersion {
major: 10,
minor: 0,
build: 18358,
revision: Some(0),
});
let mut config = EmitterConfig::new();
config.indent_string = "".into();
config.line_separator = "".into();
assert!(manifest
.serialize_to_string_with_config(config.clone())
.is_err());
manifest
.compatibility
.supported_os
.insert(SupportedOS::Windows10);
let serialized = manifest.serialize_to_string_with_config(config).unwrap();
assert_eq!(serialized, include_str!("tests/max_version_tested.xml"));
}