KiCad PCB EDA Suite
Loading...
Searching...
No Matches
test_job_export_sch_bom.cpp
Go to the documentation of this file.
1
/*
2
* This program source code file is part of KiCad, a free EDA CAD application.
3
*
4
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <https://www.gnu.org/licenses/>.
18
*/
19
20
#include <boost/test/unit_test.hpp>
21
#include <
jobs/job_export_bom.h
>
22
#include <
json_common.h
>
23
#include <
settings/bom_settings.h
>
24
25
26
BOOST_AUTO_TEST_SUITE
( JobExportSchBom )
27
28
29
BOOST_AUTO_TEST_CASE
( ByteOrderMarkFormatPresetRoundTripAndLegacyDefault )
30
{
31
BOM_FMT_PRESET
preset =
BOM_FMT_PRESET::CSV
();
32
preset.
includeByteOrderMark
=
true
;
33
34
BOM_FMT_PRESET
withoutByteOrderMark = preset;
35
withoutByteOrderMark.
includeByteOrderMark
=
false
;
36
BOOST_CHECK( preset != withoutByteOrderMark );
37
38
nlohmann::json j = preset;
39
40
BOOST_REQUIRE
( j.contains(
"include_byte_order_mark"
) );
41
BOOST_CHECK( j.at(
"include_byte_order_mark"
).get<
bool
>() );
42
43
BOM_FMT_PRESET
loaded = j.get<
BOM_FMT_PRESET
>();
44
BOOST_CHECK( loaded.
includeByteOrderMark
);
45
46
j.erase(
"include_byte_order_mark"
);
47
loaded.
includeByteOrderMark
=
true
;
48
from_json
( j, loaded );
49
BOOST_CHECK( !loaded.
includeByteOrderMark
);
50
}
51
52
53
BOOST_AUTO_TEST_CASE
( VariantRoundTrip )
54
{
55
JOB_EXPORT_BOM
job;
56
job.
SetSelectedVariant
( wxS(
"VAR A"
) );
57
job.
m_includeByteOrderMark
=
true
;
58
59
nlohmann::json j;
60
job.
ToJson
( j );
61
62
JOB_EXPORT_BOM
loaded;
63
loaded.
FromJson
( j );
64
65
BOOST_CHECK( loaded.
GetSelectedVariant
() == wxS(
"VAR A"
) );
66
BOOST_CHECK( loaded.
m_includeByteOrderMark
);
67
}
68
69
70
BOOST_AUTO_TEST_CASE
( EmptyVariantRoundTrip )
71
{
72
JOB_EXPORT_BOM
job;
73
74
nlohmann::json j;
75
job.
ToJson
( j );
76
77
JOB_EXPORT_BOM
loaded;
78
loaded.
FromJson
( j );
79
80
BOOST_CHECK( loaded.
GetSelectedVariant
().IsEmpty() );
81
}
82
83
84
BOOST_AUTO_TEST_CASE
( FilterScopeRoundTripAndDefault )
85
{
86
JOB_EXPORT_BOM
job;
87
job.
m_filterScope
=
BOM_FILTER_SCOPE::ALL
;
88
89
nlohmann::json j;
90
job.
ToJson
( j );
91
92
BOOST_REQUIRE
( j.contains(
"filter_scope"
) );
93
BOOST_CHECK_EQUAL
( j.at(
"filter_scope"
).get<std::string>(),
"all"
);
94
95
JOB_EXPORT_BOM
loaded;
96
loaded.
FromJson
( j );
97
BOOST_CHECK( loaded.
m_filterScope
==
BOM_FILTER_SCOPE::ALL
);
98
99
j.erase(
"filter_scope"
);
100
loaded.
m_filterScope
=
BOM_FILTER_SCOPE::VISIBLE
;
101
loaded.
FromJson
( j );
102
BOOST_CHECK( loaded.
m_filterScope
==
BOM_FILTER_SCOPE::REFERENCE
);
103
}
104
105
106
BOOST_AUTO_TEST_CASE
( PresetNamesAreClearedOnDeserialization )
107
{
108
JOB_EXPORT_BOM
job;
109
job.
m_bomPresetName
= wxS(
"fields"
);
110
job.
m_bomFmtPresetName
= wxS(
"format"
);
111
job.
m_filterString
= wxS(
"R1"
);
112
job.
m_fieldDelimiter
= wxS(
";"
);
113
114
nlohmann::json j;
115
job.
ToJson
( j );
116
117
JOB_EXPORT_BOM
loaded;
118
loaded.
FromJson
( j );
119
120
BOOST_CHECK( loaded.
m_bomPresetName
.IsEmpty() );
121
BOOST_CHECK( loaded.
m_bomFmtPresetName
.IsEmpty() );
122
BOOST_CHECK( loaded.
m_filterString
== wxS(
"R1"
) );
123
BOOST_CHECK( loaded.
m_fieldDelimiter
== wxS(
";"
) );
124
}
125
126
127
BOOST_AUTO_TEST_CASE
( BomPresetFilterScopeRoundTripAndDefault )
128
{
129
BOM_PRESET preset = BOM_PRESET::DefaultEditing();
130
preset.filterScope =
BOM_FILTER_SCOPE::VISIBLE
;
131
132
nlohmann::json j = preset;
133
134
BOOST_REQUIRE
( j.contains(
"filter_scope"
) );
135
BOOST_CHECK_EQUAL
( j.at(
"filter_scope"
).get<std::string>(),
"visible"
);
136
137
BOM_PRESET loaded = j.get<BOM_PRESET>();
138
BOOST_CHECK( loaded.filterScope ==
BOM_FILTER_SCOPE::VISIBLE
);
139
140
j.erase(
"filter_scope"
);
141
loaded.filterScope =
BOM_FILTER_SCOPE::ALL
;
142
from_json
( j, loaded );
143
BOOST_CHECK( loaded.filterScope ==
BOM_FILTER_SCOPE::REFERENCE
);
144
}
145
146
147
// Issue #23932: saving a job used to append the choice every time, so the list grew
148
// without bound. Setting the selection must replace the list, never grow it.
149
BOOST_AUTO_TEST_CASE
( VariantNoAccumulation )
150
{
151
JOB_EXPORT_BOM
job;
152
job.
SetSelectedVariant
( wxS(
"VAR A"
) );
153
job.
SetSelectedVariant
( wxS(
"VAR A"
) );
154
job.
SetSelectedVariant
( wxS(
"VAR B"
) );
155
156
BOOST_CHECK_EQUAL
( job.
m_variantNames
.size(), 1u );
157
BOOST_CHECK( job.
GetSelectedVariant
() == wxS(
"VAR B"
) );
158
}
159
160
161
// Selecting the default variant leaves the list empty.
162
BOOST_AUTO_TEST_CASE
( DefaultVariantClearsList )
163
{
164
JOB_EXPORT_BOM
job;
165
job.
SetSelectedVariant
( wxS(
"VAR A"
) );
166
job.
SetSelectedVariant
( wxEmptyString );
167
168
BOOST_CHECK( job.
m_variantNames
.empty() );
169
BOOST_CHECK( job.
GetSelectedVariant
().IsEmpty() );
170
}
171
172
173
// A CLI multi-variant list is reported through its first entry.
174
BOOST_AUTO_TEST_CASE
( VariantFromList )
175
{
176
nlohmann::json j = { {
"variant_names"
, {
"VAR A"
,
"VAR B"
} } };
177
178
JOB_EXPORT_BOM
loaded;
179
loaded.
m_includeByteOrderMark
=
true
;
180
loaded.
FromJson
( j );
181
182
BOOST_CHECK( loaded.
GetSelectedVariant
() == wxS(
"VAR A"
) );
183
BOOST_CHECK( !loaded.
m_includeByteOrderMark
);
184
}
185
186
187
BOOST_AUTO_TEST_SUITE_END
()
bom_settings.h
BOM_FILTER_SCOPE::VISIBLE
@ VISIBLE
Definition
bom_settings.h:50
BOM_FILTER_SCOPE::ALL
@ ALL
Definition
bom_settings.h:51
BOM_FILTER_SCOPE::REFERENCE
@ REFERENCE
Definition
bom_settings.h:49
JOB_EXPORT_BOM
Definition
job_export_bom.h:30
JOB_EXPORT_BOM::GetSelectedVariant
wxString GetSelectedVariant() const
Definition
job_export_bom.cpp:105
JOB_EXPORT_BOM::m_variantNames
std::vector< wxString > m_variantNames
Definition
job_export_bom.h:71
JOB_EXPORT_BOM::m_fieldDelimiter
wxString m_fieldDelimiter
Definition
job_export_bom.h:51
JOB_EXPORT_BOM::m_includeByteOrderMark
bool m_includeByteOrderMark
Definition
job_export_bom.h:57
JOB_EXPORT_BOM::m_filterString
wxString m_filterString
Definition
job_export_bom.h:65
JOB_EXPORT_BOM::FromJson
void FromJson(const nlohmann::json &aJson) override
Definition
job_export_bom.cpp:97
JOB_EXPORT_BOM::SetSelectedVariant
void SetSelectedVariant(const wxString &aVariant)
Definition
job_export_bom.cpp:114
JOB_EXPORT_BOM::m_bomFmtPresetName
wxString m_bomFmtPresetName
Definition
job_export_bom.h:48
JOB_EXPORT_BOM::m_bomPresetName
wxString m_bomPresetName
Definition
job_export_bom.h:47
JOB_EXPORT_BOM::m_filterScope
BOM_FILTER_SCOPE m_filterScope
Definition
job_export_bom.h:66
JOB::ToJson
virtual void ToJson(nlohmann::json &j) const
Definition
job.cpp:67
from_json
KICOMMON_API void from_json(const nlohmann::json &j, JOB &f)
Definition
job.cpp:173
job_export_bom.h
json_common.h
BOM_FMT_PRESET
Definition
bom_settings.h:96
BOM_FMT_PRESET::includeByteOrderMark
bool includeByteOrderMark
Definition
bom_settings.h:105
BOM_FMT_PRESET::CSV
static BOM_FMT_PRESET CSV()
Definition
bom_settings.cpp:271
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
Definition
test_api_enums.cpp:79
BOOST_AUTO_TEST_SUITE
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_REQUIRE
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(ByteOrderMarkFormatPresetRoundTripAndLegacyDefault)
Definition
test_job_export_sch_bom.cpp:29
BOOST_CHECK_EQUAL
BOOST_CHECK_EQUAL(result, "25.4")
src
qa
tests
common
test_job_export_sch_bom.cpp
Generated on Thu Sep 17 2026 00:06:24 for KiCad PCB EDA Suite by
1.13.2