77 PCB_DIFFER differ( m_before.get(), m_after.get(), wxS(
"complex_hierarchy.kicad_pcb" ) );
81 BOOST_CHECK_MESSAGE(
result.Empty(),
"Two fresh loads of the same fixture should produce no diff; "
82 "got " <<
result.changes.size()
83 <<
" change records" );
108 PCB_DIFFER differ( m_before.get(), m_after.get() );
111 BOOST_REQUIRE_EQUAL(
result.changes.size(), 1u );
128 subject =
static_cast<PCB_TRACK*
>( item );
135 int originalWidth = subject->
GetWidth();
136 int newWidth = originalWidth + 50000;
139 PCB_DIFFER differ( m_before.get(), m_after.get() );
142 BOOST_REQUIRE_EQUAL(
result.changes.size(), 1u );
146 bool foundWidthDelta =
false;
150 if( d.
name.Lower().Contains( wxS(
"width" ) ) )
152 foundWidthDelta =
true;
158 BOOST_CHECK_MESSAGE( foundWidthDelta,
"Expected Width property delta after SetWidth() on a track" );
165 std::map<wxString, PCB_TRACK*> tracksByNet;
166 wxString selectedNet;
182 if( tracksByNet.contains( netName ) )
184 selectedNet = netName;
185 first = tracksByNet[netName];
190 tracksByNet[netName] = track;
199 PCB_DIFFER differ( m_before.get(), m_after.get() );
202 std::size_t selectedNetChanges = 0;
206 if( change.
refdes == selectedNet )
208 ++selectedNetChanges;
209 BOOST_CHECK( change.
typeName == wxS(
"PCB_TRACK" ) || change.
typeName == wxS(
"PCB_VIA" ) );
228 if( !fp->
Pads().empty() )
239 pad->SetNumber(
pad->GetNumber() + wxS(
"X" ) );
241 PCB_DIFFER differ( m_before.get(), m_after.get() );
245 BOOST_REQUIRE_EQUAL(
result.changes.size(), 1u );
248 BOOST_REQUIRE_EQUAL(
result.changes[0].children.size(), 1u );
251 pad->m_Uuid.AsString().ToStdString() );
258 FOOTPRINT* beforeFp = m_before->Footprints().front();
259 auto* afterFp =
dynamic_cast<FOOTPRINT*
>( m_after->ResolveItem( beforeFp->
m_Uuid,
true ) );
263 PCB_FIELD& afterField = afterFp->Value();
267 PCB_DIFFER unchangedDiffer( m_before.get(), m_after.get() );
268 BOOST_CHECK( unchangedDiffer.
Diff().
Empty() );
270 afterField.
SetText( wxS(
"QA_CHANGED_VALUE" ) );
271 PCB_DIFFER differ( m_before.get(), m_after.get() );
274 BOOST_REQUIRE_EQUAL( diff.
changes.size(), 1u );
275 BOOST_REQUIRE_EQUAL( diff.
changes[0].children.size(), 1u );
278 BOOST_REQUIRE_EQUAL( change.
id.size(), 2u );
279 BOOST_CHECK( change.
id.at( 0 ) == beforeFp->
m_Uuid );
282 BOOST_CHECK(
FindPcbDiffItem( m_before.get(), change.
id.back() ) == &beforeField );
283 BOOST_CHECK(
FindPcbDiffItem( m_after.get(), change.
id.back() ) == &afterField );
293 for(
FOOTPRINT* fp : m_after->Footprints() )
295 fp->Value().SetText( wxS(
"QA_VALUE_" ) + fp->GetReference() );
301 BOOST_REQUIRE_EQUAL( changed, 2 );
302 PCB_DIFFER differ( m_before.get(), m_after.get() );
305 BOOST_REQUIRE_EQUAL( diff.
changes.size(), 2u );
306 BOOST_REQUIRE_EQUAL( diff.
changes[0].children.size(), 1u );
307 BOOST_REQUIRE_EQUAL( diff.
changes[1].children.size(), 1u );
310 BOOST_REQUIRE_EQUAL( first.
id.size(), 2u );
311 BOOST_REQUIRE_EQUAL( second.
id.size(), 2u );
314 BOOST_CHECK( first.
id.back() != second.
id.back() );
318 auto* fp =
dynamic_cast<FOOTPRINT*
>( m_after->ResolveItem( parent.
id.back(),
true ) );
334 subject =
static_cast<PCB_TRACK*
>( item );
342 PCB_DIFFER differ1( m_before.get(), m_after.get() );
343 PCB_DIFFER differ2( m_before.get(), m_after.get() );
361 subject =
static_cast<PCB_TRACK*
>( item );
369 PCB_DIFFER differ( m_before.get(), m_after.get(), wxS(
"complex_hierarchy.kicad_pcb" ) );
372 nlohmann::json j =
result.ToJson();
377 BOOST_REQUIRE_EQUAL( back.
changes.size(),
result.changes.size() );
378 BOOST_CHECK( back.
changes[0].kind ==
result.changes[0].kind );
388 BOOST_CHECK( !geometry.
Empty() );
390 LSET expectedTrackLayers;
392 for(
const PCB_TRACK* track : m_after->Tracks() )
395 expectedTrackLayers |= track->GetLayerSet();
401 BOOST_CHECK( ( geometryLayers & expectedTrackLayers ).
any() );
403 bool segmentWithLayer =
false;
407 if( segment.
layers.any() )
409 segmentWithLayer =
true;
414 BOOST_CHECK( segmentWithLayer );
std::set< BOARD_ITEM *, CompareByUuid > BOARD_ITEM_SET
Set of BOARD_ITEMs ordered by UUID.
wxString GetNetname() const
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
void SetUuid(const KIID &aUuid)
virtual void SetText(const wxString &aText)
Diff two already-parsed BOARDs and produce a DOCUMENT_DIFF.
DOCUMENT_DIFF Diff() override
Produce a DOCUMENT_DIFF of the inputs the concrete differ was constructed with.
A color representation with 4 components: red, green, blue, alpha.
wxString AsString() const
LSET is a set of PCB_LAYER_IDs.
virtual void SetWidth(int aWidth)
virtual int GetWidth() const
A type-safe container of any type.
LSET GeometryLayerSet(const DOCUMENT_GEOMETRY &aGeometry)
Return the union of every non-empty layer set carried by the geometry.
BOARD_ITEM * FindPcbDiffItem(const BOARD *aBoard, const KIID &aId)
Resolve an actual UUID or a footprint field's diff ID on a board.
DOCUMENT_GEOMETRY ExtractBoardGeometry(const BOARD &aBoard, const KIGFX::COLOR4D &aColor)
Extract a coarse outline of a BOARD into a DOCUMENT_GEOMETRY for use as background context in DIFF_SC...
void LoadBoard(SETTINGS_MANAGER &aSettingsManager, const wxString &aRelPath, std::unique_ptr< BOARD > &aBoard)
The full set of changes between two parsed documents of one type.
nlohmann::json ToJson() const
static DOCUMENT_DIFF FromJson(const nlohmann::json &aJson)
std::vector< ITEM_CHANGE > changes
Aggregate of background geometry extracted from one source document.
std::vector< DOCUMENT_SEGMENT > segments
Stroked line segment from one of the source documents.
One change record on a single item.
std::optional< wxString > refdes
std::vector< ITEM_CHANGE > children
Single (name, before, after) triple for one mutated property on an item.
Fixture: loads the same canonical board into two separate BOARD instances so tests can mutate one and...
std::unique_ptr< BOARD > m_before
SETTINGS_MANAGER m_settingsA
SETTINGS_MANAGER m_settingsB
std::unique_ptr< BOARD > m_after
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE(TwoFreshLoadsAreIdentical)
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)