Skip to content

Commit 0147f37

Browse files
committed
test: add several tests for svd_encoder::Config
rename `UpperSnake` to `Constant`
1 parent 71510df commit 0147f37

15 files changed

+416
-44
lines changed

svd-encoder/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
99

1010
- Bump MSRV to 1.56.0 (2021)
1111
- Add advanced encoder options `Config`
12-
- BREAKING: `Encode` trait needs to implement `encode_with_config`
12+
- BREAKING: `Encode` trait needs to implement `encode_with_config`
1313

1414
## [v0.13.1] - 2022-02-12
1515

svd-encoder/src/config.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ pub enum IdentifierFormat {
1818
///
1919
/// `a_snake_case_example`
2020
Snake,
21-
/// `UpperSnake` case
21+
/// `Constant` case
2222
///
23-
/// `AN_UPPER_SNAKE_CASE_EXAMPLE`
24-
UpperSnake,
23+
/// `A_CONSTANT_CASE_EXAMPLE`
24+
Constant,
2525
}
2626

2727
impl FromStr for IdentifierFormat {
@@ -32,7 +32,7 @@ impl FromStr for IdentifierFormat {
3232
"Camel" => Ok(IdentifierFormat::Camel),
3333
"Pascal" => Ok(IdentifierFormat::Pascal),
3434
"Snake" => Ok(IdentifierFormat::Snake),
35-
"UpperSnake" => Ok(IdentifierFormat::UpperSnake),
35+
"Constant" => Ok(IdentifierFormat::Constant),
3636
_ => Err(()),
3737
}
3838
}
@@ -55,7 +55,7 @@ pub fn change_case(s: &str, case: Option<IdentifierFormat>) -> String {
5555
IdentifierFormat::Camel => Case::Camel,
5656
IdentifierFormat::Pascal => Case::Pascal,
5757
IdentifierFormat::Snake => Case::Snake,
58-
IdentifierFormat::UpperSnake => Case::UpperSnake,
58+
IdentifierFormat::Constant => Case::UpperSnake,
5959
})
6060
}
6161
}

tests/src/access.rs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,32 @@ use crate::svd::Access;
44
#[test]
55
fn decode_encode() {
66
let tests = vec![
7-
(Access::ReadOnly, "<access>read-only</access>"),
8-
(Access::ReadWrite, "<access>read-write</access>"),
9-
(Access::ReadWriteOnce, "<access>read-writeOnce</access>"),
10-
(Access::WriteOnly, "<access>write-only</access>"),
11-
(Access::WriteOnce, "<access>writeOnce</access>"),
7+
(
8+
Access::ReadOnly,
9+
"<access>read-only</access>",
10+
"<access>read-only</access>",
11+
),
12+
(
13+
Access::ReadWrite,
14+
"<access>read-write</access>",
15+
"<access>read-write</access>",
16+
),
17+
(
18+
Access::ReadWriteOnce,
19+
"<access>read-writeOnce</access>",
20+
"<access>read-writeOnce</access>",
21+
),
22+
(
23+
Access::WriteOnly,
24+
"<access>write-only</access>",
25+
"<access>write-only</access>",
26+
),
27+
(
28+
Access::WriteOnce,
29+
"<access>writeOnce</access>",
30+
"<access>writeOnce</access>",
31+
),
1232
];
1333

14-
run_test::<Access>(&tests[..]);
34+
run_test::<Access>(&tests[..], None, None);
1535
}

tests/src/addressblock.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,30 @@ use crate::svd::{AddressBlock, AddressBlockUsage, ValidateLevel};
33

44
#[test]
55
fn decode_encode() {
6+
let parse_config = svd_parser::Config::default();
7+
let mut encode_config = svd_encoder::Config::default();
8+
encode_config.update("address_block_offset", "Dec");
9+
encode_config.update("address_block_size", "UpperHex8");
10+
611
let tests = vec![(
712
AddressBlock::builder()
813
.offset(0)
9-
.size(0x00000800)
14+
.size(0x00000F00)
1015
.usage(AddressBlockUsage::Registers)
1116
.protection(None)
1217
.build(ValidateLevel::Strict)
1318
.unwrap(),
1419
"<addressBlock>
1520
<offset>0x0</offset>
16-
<size>0x800</size>
21+
<size>0xF00</size>
22+
<usage>registers</usage>
23+
</addressBlock>",
24+
"<addressBlock>
25+
<offset>0</offset>
26+
<size>0x00000F00</size>
1727
<usage>registers</usage>
1828
</addressBlock>",
1929
)];
2030

21-
run_test::<AddressBlock>(&tests[..]);
31+
run_test::<AddressBlock>(&tests[..], Some(parse_config), Some(encode_config));
2232
}

tests/src/cpu.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,18 @@ fn decode_encode() {
2525
<vendorSystickConfig>false</vendorSystickConfig>
2626
</cpu>
2727
",
28+
"
29+
<cpu>
30+
<name>EFM32JG12B500F512GM48</name>
31+
<revision>5.1.1</revision>
32+
<endian>little</endian>
33+
<mpuPresent>true</mpuPresent>
34+
<fpuPresent>true</fpuPresent>
35+
<nvicPrioBits>8</nvicPrioBits>
36+
<vendorSystickConfig>false</vendorSystickConfig>
37+
</cpu>
38+
",
2839
)];
2940

30-
run_test::<Cpu>(&tests[..]);
41+
run_test::<Cpu>(&tests[..], None, None);
3142
}

tests/src/dimelement.rs

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@ fn decode_encode() {
1616
<dimIndex>10,20</dimIndex>
1717
</dimElement>
1818
",
19+
"<dimElement>
20+
<dim>2</dim>
21+
<dimIncrement>0x4</dimIncrement>
22+
<dimIndex>10,20</dimIndex>
23+
</dimElement>
24+
",
1925
)];
20-
run_test::<DimElement>(&tests[..]);
26+
run_test::<DimElement>(&tests[..], None, None);
2127

2228
let tests = vec![(
2329
DimElement::builder()
@@ -36,8 +42,14 @@ fn decode_encode() {
3642
<dimIndex>3-5</dimIndex>
3743
</dimElement>
3844
",
45+
"<dimElement>
46+
<dim>3</dim>
47+
<dimIncrement>0x4</dimIncrement>
48+
<dimIndex>3-5</dimIndex>
49+
</dimElement>
50+
",
3951
)];
40-
run_test::<DimElement>(&tests[..]);
52+
run_test::<DimElement>(&tests[..], None, None);
4153

4254
let tests = vec![(
4355
DimElement::builder()
@@ -56,8 +68,14 @@ fn decode_encode() {
5668
<dimIndex>3,5,4</dimIndex>
5769
</dimElement>
5870
",
71+
"<dimElement>
72+
<dim>3</dim>
73+
<dimIncrement>0x4</dimIncrement>
74+
<dimIndex>3,5,4</dimIndex>
75+
</dimElement>
76+
",
5977
)];
60-
run_test::<DimElement>(&tests[..]);
78+
run_test::<DimElement>(&tests[..], None, None);
6179

6280
let tests = vec![(
6381
DimElement::builder()
@@ -72,8 +90,39 @@ fn decode_encode() {
7290
<dimIndex>3-3</dimIndex>
7391
</dimElement>
7492
",
93+
"<dimElement>
94+
<dim>1</dim>
95+
<dimIncrement>0x0</dimIncrement>
96+
<dimIndex>3-3</dimIndex>
97+
</dimElement>
98+
",
7599
)];
76-
run_test::<DimElement>(&tests[..]);
100+
run_test::<DimElement>(&tests[..], None, None);
101+
102+
let parse_config = svd_parser::Config::default();
103+
let mut encode_config = svd_encoder::Config::default();
104+
encode_config.update("dim_dim", "UpperHex");
105+
encode_config.update("dim_increment", "LowerHex");
106+
107+
let tests = vec![(
108+
DimElement::builder()
109+
.dim(14)
110+
.dim_increment(15)
111+
.build(ValidateLevel::Strict)
112+
.unwrap(),
113+
"<dimElement>
114+
<dim>14</dim>
115+
<dimIncrement>0xF</dimIncrement>
116+
</dimElement>
117+
",
118+
"<dimElement>
119+
<dim>0xE</dim>
120+
<dimIncrement>0xf</dimIncrement>
121+
</dimElement>
122+
",
123+
)];
124+
125+
run_test::<DimElement>(&tests[..], Some(parse_config), Some(encode_config));
77126
}
78127

79128
#[test]

tests/src/endian.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,23 @@ use crate::svd::Endian;
44
#[test]
55
fn decode_encode() {
66
let tests = vec![
7-
(Endian::Little, "<endian>little</endian>"),
8-
(Endian::Big, "<endian>big</endian>"),
9-
(Endian::Selectable, "<endian>selectable</endian>"),
10-
(Endian::Other, "<endian>other</endian>"),
7+
(
8+
Endian::Little,
9+
"<endian>little</endian>",
10+
"<endian>little</endian>",
11+
),
12+
(Endian::Big, "<endian>big</endian>", "<endian>big</endian>"),
13+
(
14+
Endian::Selectable,
15+
"<endian>selectable</endian>",
16+
"<endian>selectable</endian>",
17+
),
18+
(
19+
Endian::Other,
20+
"<endian>other</endian>",
21+
"<endian>other</endian>",
22+
),
1123
];
1224

13-
run_test::<Endian>(&tests[..]);
25+
run_test::<Endian>(&tests[..], None, None);
1426
}

tests/src/enumeratedvalue.rs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,46 @@ fn decode_encode() {
1919
<value>0</value>
2020
</enumeratedValue>
2121
",
22+
"
23+
<enumeratedValue>
24+
<name>WS0</name>
25+
<description>Zero wait-states inserted in fetch or read transfers</description>
26+
<value>0</value>
27+
</enumeratedValue>
28+
",
29+
)];
30+
31+
run_test::<EnumeratedValue>(&tests[..], None, None);
32+
33+
let parse_config = svd_parser::Config::default();
34+
let mut encode_config = svd_encoder::Config::default();
35+
encode_config.update("enumerated_value_name", "Pascal");
36+
encode_config.update("enumerated_value_value", "Bin");
37+
38+
let tests = vec![(
39+
EnumeratedValue::builder()
40+
.name("WS0".to_string())
41+
.description(Some(
42+
"Zero wait-states inserted in fetch or read transfers".to_string(),
43+
))
44+
.value(Some(0))
45+
.build(ValidateLevel::Strict)
46+
.unwrap(),
47+
"
48+
<enumeratedValue>
49+
<name>WS0</name>
50+
<description>Zero wait-states inserted in fetch or read transfers</description>
51+
<value>0</value>
52+
</enumeratedValue>
53+
",
54+
"
55+
<enumeratedValue>
56+
<name>Ws0</name>
57+
<description>Zero wait-states inserted in fetch or read transfers</description>
58+
<value>0b0</value>
59+
</enumeratedValue>
60+
",
2261
)];
2362

24-
run_test::<EnumeratedValue>(&tests[..]);
63+
run_test::<EnumeratedValue>(&tests[..], Some(parse_config), Some(encode_config));
2564
}

tests/src/field.rs

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,52 @@ fn decode_encode() {
3131
<bitWidth>2</bitWidth>
3232
</field>
3333
",
34+
"
35+
<field derivedFrom=\"other_field\">
36+
<dim>2</dim>
37+
<dimIncrement>0x4</dimIncrement>
38+
<dimIndex>10,20</dimIndex>
39+
<name>MODE%s</name>
40+
<bitOffset>24</bitOffset>
41+
<bitWidth>2</bitWidth>
42+
</field>
43+
",
44+
)];
45+
run_test::<Field>(&tests[..], None, None);
46+
47+
let parse_config = svd_parser::Config::default();
48+
let mut encode_config = svd_encoder::Config::default();
49+
encode_config.update("field_name", "Snake");
50+
encode_config.update("field_bit_range", "MsbLsb");
51+
52+
let tests = vec![(
53+
FieldInfo::builder()
54+
.name("MODE".to_string())
55+
.derived_from(Some("other_field".to_string()))
56+
.bit_range(BitRange {
57+
offset: 24,
58+
width: 2,
59+
range_type: BitRangeType::OffsetWidth,
60+
})
61+
.build(ValidateLevel::Strict)
62+
.unwrap(),
63+
"
64+
<field derivedFrom=\"other_field\">
65+
<name>MODE</name>
66+
<bitOffset>24</bitOffset>
67+
<bitWidth>2</bitWidth>
68+
</field>
69+
",
70+
"
71+
<field derivedFrom=\"other_field\">
72+
<name>mode</name>
73+
<lsb>24</lsb>
74+
<msb>25</msb>
75+
</field>
76+
",
3477
)];
35-
run_test::<Field>(&tests[..]);
78+
79+
run_test::<FieldInfo>(&tests[..], Some(parse_config), Some(encode_config));
3680
}
3781

3882
#[test]
@@ -77,6 +121,22 @@ fn decode_encode_info() {
77121
</enumeratedValue>
78122
</enumeratedValues>
79123
</field>
124+
",
125+
"
126+
<field>
127+
<name>MODE</name>
128+
<description>Read Mode</description>
129+
<bitOffset>24</bitOffset>
130+
<bitWidth>2</bitWidth>
131+
<access>read-write</access>
132+
<enumeratedValues>
133+
<enumeratedValue>
134+
<name>WS0</name>
135+
<description>Zero wait-states inserted in fetch or read transfers</description>
136+
<value>0</value>
137+
</enumeratedValue>
138+
</enumeratedValues>
139+
</field>
80140
",
81141
),
82142
(
@@ -96,9 +156,16 @@ fn decode_encode_info() {
96156
<bitOffset>24</bitOffset>
97157
<bitWidth>2</bitWidth>
98158
</field>
159+
",
160+
"
161+
<field derivedFrom=\"other_field\">
162+
<name>MODE</name>
163+
<bitOffset>24</bitOffset>
164+
<bitWidth>2</bitWidth>
165+
</field>
99166
",
100167
),
101168
];
102169

103-
run_test::<FieldInfo>(&tests[..]);
170+
run_test::<FieldInfo>(&tests[..], None, None);
104171
}

0 commit comments

Comments
 (0)