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 <nlohmann/json.hpp>
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
// Issue #23932: saving a job used to append the choice every time, so the list grew
85
// without bound. Setting the selection must replace the list, never grow it.
86
BOOST_AUTO_TEST_CASE
( VariantNoAccumulation )
87
{
88
JOB_EXPORT_BOM
job;
89
job.
SetSelectedVariant
( wxS(
"VAR A"
) );
90
job.
SetSelectedVariant
( wxS(
"VAR A"
) );
91
job.
SetSelectedVariant
( wxS(
"VAR B"
) );
92
93
BOOST_CHECK_EQUAL
( job.
m_variantNames
.size(), 1u );
94
BOOST_CHECK( job.
GetSelectedVariant
() == wxS(
"VAR B"
) );
95
}
96
97
98
// Selecting the default variant leaves the list empty.
99
BOOST_AUTO_TEST_CASE
( DefaultVariantClearsList )
100
{
101
JOB_EXPORT_BOM
job;
102
job.
SetSelectedVariant
( wxS(
"VAR A"
) );
103
job.
SetSelectedVariant
( wxEmptyString );
104
105
BOOST_CHECK( job.
m_variantNames
.empty() );
106
BOOST_CHECK( job.
GetSelectedVariant
().IsEmpty() );
107
}
108
109
110
// A CLI multi-variant list is reported through its first entry.
111
BOOST_AUTO_TEST_CASE
( VariantFromList )
112
{
113
nlohmann::json j = { {
"variant_names"
, {
"VAR A"
,
"VAR B"
} } };
114
115
JOB_EXPORT_BOM
loaded;
116
loaded.
m_includeByteOrderMark
=
true
;
117
loaded.
FromJson
( j );
118
119
BOOST_CHECK( loaded.
GetSelectedVariant
() == wxS(
"VAR A"
) );
120
BOOST_CHECK( !loaded.
m_includeByteOrderMark
);
121
}
122
123
124
BOOST_AUTO_TEST_SUITE_END
()
bom_settings.h
JOB_EXPORT_BOM
Definition
job_export_bom.h:29
JOB_EXPORT_BOM::GetSelectedVariant
wxString GetSelectedVariant() const
Definition
job_export_bom.cpp:95
JOB_EXPORT_BOM::m_variantNames
std::vector< wxString > m_variantNames
Definition
job_export_bom.h:68
JOB_EXPORT_BOM::m_includeByteOrderMark
bool m_includeByteOrderMark
Definition
job_export_bom.h:55
JOB_EXPORT_BOM::SetSelectedVariant
void SetSelectedVariant(const wxString &aVariant)
Definition
job_export_bom.cpp:104
JOB::FromJson
virtual void FromJson(const nlohmann::json &j)
Definition
job.cpp:60
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
BOM_FMT_PRESET
Definition
bom_settings.h:80
BOM_FMT_PRESET::includeByteOrderMark
bool includeByteOrderMark
Definition
bom_settings.h:89
BOM_FMT_PRESET::CSV
static BOM_FMT_PRESET CSV()
Definition
bom_settings.cpp:265
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
Definition
test_api_enums.cpp:72
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 Fri Jul 31 2026 00:08:02 for KiCad PCB EDA Suite by
1.13.2