Browse Source
Allow PCB reference image locking and UUID to be saved
Allow PCB reference image locking and UUID to be saved
Add some unit tests for reference image saving/loading. Fixes: https://gitlab.com/kicad/code/kicad/-/issues/16334newinvert
committed by
Jon Evans
10 changed files with 901 additions and 12 deletions
-
20pcbnew/plugins/kicad/pcb_parser.cpp
-
8pcbnew/plugins/kicad/pcb_plugin.cpp
-
283qa/data/pcbnew/reference_images_load_save.kicad_pcb
-
271qa/data/pcbnew/reference_images_load_save.kicad_pro
-
57qa/pcbnew_utils/board_test_utils.cpp
-
33qa/pcbnew_utils/include/pcbnew_utils/board_test_utils.h
-
1qa/tests/pcbnew/CMakeLists.txt
-
102qa/tests/pcbnew/test_footprint_load_save.cpp
-
12qa/tests/pcbnew/test_module.cpp
-
126qa/tests/pcbnew/test_reference_image_load.cpp
@ -0,0 +1,283 @@ |
|||
(kicad_pcb |
|||
(version 20231212) |
|||
(generator "pcbnew") |
|||
(generator_version "7.99") |
|||
(general |
|||
(thickness 1.6) |
|||
(legacy_teardrops no) |
|||
) |
|||
(paper "A4") |
|||
(layers |
|||
(0 "F.Cu" signal) |
|||
(31 "B.Cu" signal) |
|||
(32 "B.Adhes" user "B.Adhesive") |
|||
(33 "F.Adhes" user "F.Adhesive") |
|||
(34 "B.Paste" user) |
|||
(35 "F.Paste" user) |
|||
(36 "B.SilkS" user "B.Silkscreen") |
|||
(37 "F.SilkS" user "F.Silkscreen") |
|||
(38 "B.Mask" user) |
|||
(39 "F.Mask" user) |
|||
(40 "Dwgs.User" user "User.Drawings") |
|||
(41 "Cmts.User" user "User.Comments") |
|||
(42 "Eco1.User" user "User.Eco1") |
|||
(43 "Eco2.User" user "User.Eco2") |
|||
(44 "Edge.Cuts" user) |
|||
(45 "Margin" user) |
|||
(46 "B.CrtYd" user "B.Courtyard") |
|||
(47 "F.CrtYd" user "F.Courtyard") |
|||
(48 "B.Fab" user) |
|||
(49 "F.Fab" user) |
|||
(50 "User.1" user) |
|||
(51 "User.2" user) |
|||
(52 "User.3" user) |
|||
(53 "User.4" user) |
|||
(54 "User.5" user) |
|||
(55 "User.6" user) |
|||
(56 "User.7" user) |
|||
(57 "User.8" user) |
|||
(58 "User.9" user) |
|||
) |
|||
(setup |
|||
(pad_to_mask_clearance 0) |
|||
(allow_soldermask_bridges_in_footprints no) |
|||
(pcbplotparams |
|||
(layerselection 0x00010fc_ffffffff) |
|||
(plot_on_all_layers_selection 0x0000000_00000000) |
|||
(disableapertmacros no) |
|||
(usegerberextensions no) |
|||
(usegerberattributes yes) |
|||
(usegerberadvancedattributes yes) |
|||
(creategerberjobfile yes) |
|||
(dashed_line_dash_ratio 12.000000) |
|||
(dashed_line_gap_ratio 3.000000) |
|||
(svgprecision 4) |
|||
(plotframeref no) |
|||
(viasonmask no) |
|||
(mode 1) |
|||
(useauxorigin no) |
|||
(hpglpennumber 1) |
|||
(hpglpenspeed 20) |
|||
(hpglpendiameter 15.000000) |
|||
(pdf_front_fp_property_popups yes) |
|||
(pdf_back_fp_property_popups yes) |
|||
(dxfpolygonmode yes) |
|||
(dxfimperialunits yes) |
|||
(dxfusepcbnewfont yes) |
|||
(psnegative no) |
|||
(psa4output no) |
|||
(plotreference yes) |
|||
(plotvalue yes) |
|||
(plotfptext yes) |
|||
(plotinvisibletext no) |
|||
(sketchpadsonfab no) |
|||
(subtractmaskfromsilk no) |
|||
(outputformat 1) |
|||
(mirror no) |
|||
(drillshape 1) |
|||
(scaleselection 1) |
|||
(outputdirectory "") |
|||
) |
|||
) |
|||
(net 0 "") |
|||
(image |
|||
(at 100 46) |
|||
(layer "F.Cu") |
|||
(data "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" |
|||
"TkSuQmCC" |
|||
) |
|||
(uuid "7dde345e-020a-4fdd-af77-588b452be5e0") |
|||
) |
|||
(image |
|||
(at 100 65) |
|||
(layer "F.Cu") |
|||
(locked yes) |
|||
(data "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" |
|||
"TkSuQmCC" |
|||
) |
|||
(uuid "e4fd52dd-1d89-4c43-b621-aebfc9788d5c") |
|||
) |
|||
(image |
|||
(at 100 90) |
|||
(layer "B.Cu") |
|||
(scale 2) |
|||
(data "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" |
|||
"TkSuQmCC" |
|||
) |
|||
(uuid "d402397e-bce0-4cae-a398-b5aeef397e87") |
|||
) |
|||
(gr_text "Image at scale 1" |
|||
(at 97 38 0) |
|||
(layer "Cmts.User") |
|||
(uuid "11c5bcf4-add5-4b5a-8a6e-551d6cc455dc") |
|||
(effects |
|||
(font |
|||
(size 1.5 1.5) |
|||
(thickness 0.3) |
|||
(bold yes) |
|||
) |
|||
(justify left bottom) |
|||
) |
|||
) |
|||
(gr_text "Locked image" |
|||
(at 97 57 0) |
|||
(layer "Cmts.User") |
|||
(uuid "ad07820b-4490-4581-87a7-7709f90e4f7e") |
|||
(effects |
|||
(font |
|||
(size 1.5 1.5) |
|||
(thickness 0.3) |
|||
(bold yes) |
|||
) |
|||
(justify left bottom) |
|||
) |
|||
) |
|||
(gr_text "Image at scale 2 on B.Cu" |
|||
(at 97 76 0) |
|||
(layer "Cmts.User") |
|||
(uuid "c4b3cc49-cd2d-43d3-93e2-82f81e39ecf0") |
|||
(effects |
|||
(font |
|||
(size 1.5 1.5) |
|||
(thickness 0.3) |
|||
(bold yes) |
|||
) |
|||
(justify left bottom) |
|||
) |
|||
) |
|||
) |
|||
@ -0,0 +1,271 @@ |
|||
{ |
|||
"board": { |
|||
"3dviewports": [], |
|||
"design_settings": { |
|||
"defaults": { |
|||
"apply_defaults_to_fp_fields": false, |
|||
"apply_defaults_to_fp_shapes": false, |
|||
"apply_defaults_to_fp_text": false, |
|||
"board_outline_line_width": 0.049999999999999996, |
|||
"copper_line_width": 0.19999999999999998, |
|||
"copper_text_italic": false, |
|||
"copper_text_size_h": 1.5, |
|||
"copper_text_size_v": 1.5, |
|||
"copper_text_thickness": 0.3, |
|||
"copper_text_upright": false, |
|||
"courtyard_line_width": 0.049999999999999996, |
|||
"dimension_precision": 4, |
|||
"dimension_units": 3, |
|||
"dimensions": { |
|||
"arrow_length": 1270000, |
|||
"extension_offset": 500000, |
|||
"keep_text_aligned": true, |
|||
"suppress_zeroes": false, |
|||
"text_position": 0, |
|||
"units_format": 1 |
|||
}, |
|||
"fab_line_width": 0.09999999999999999, |
|||
"fab_text_italic": false, |
|||
"fab_text_size_h": 1.0, |
|||
"fab_text_size_v": 1.0, |
|||
"fab_text_thickness": 0.15, |
|||
"fab_text_upright": false, |
|||
"other_line_width": 0.09999999999999999, |
|||
"other_text_italic": false, |
|||
"other_text_size_h": 1.0, |
|||
"other_text_size_v": 1.0, |
|||
"other_text_thickness": 0.15, |
|||
"other_text_upright": false, |
|||
"pads": { |
|||
"drill": 0.762, |
|||
"height": 1.524, |
|||
"width": 1.524 |
|||
}, |
|||
"silk_line_width": 0.09999999999999999, |
|||
"silk_text_italic": false, |
|||
"silk_text_size_h": 1.0, |
|||
"silk_text_size_v": 1.0, |
|||
"silk_text_thickness": 0.09999999999999999, |
|||
"silk_text_upright": false, |
|||
"zones": { |
|||
"min_clearance": 0.5 |
|||
} |
|||
}, |
|||
"diff_pair_dimensions": [], |
|||
"drc_exclusions": [], |
|||
"meta": { |
|||
"version": 2 |
|||
}, |
|||
"rule_severities": { |
|||
"annular_width": "error", |
|||
"clearance": "error", |
|||
"connection_width": "warning", |
|||
"copper_edge_clearance": "error", |
|||
"copper_sliver": "warning", |
|||
"courtyards_overlap": "error", |
|||
"diff_pair_gap_out_of_range": "error", |
|||
"diff_pair_uncoupled_length_too_long": "error", |
|||
"drill_out_of_range": "error", |
|||
"duplicate_footprints": "warning", |
|||
"extra_footprint": "warning", |
|||
"footprint": "error", |
|||
"footprint_type_mismatch": "ignore", |
|||
"hole_clearance": "error", |
|||
"hole_near_hole": "error", |
|||
"invalid_outline": "error", |
|||
"isolated_copper": "warning", |
|||
"item_on_disabled_layer": "error", |
|||
"items_not_allowed": "error", |
|||
"length_out_of_range": "error", |
|||
"lib_footprint_issues": "warning", |
|||
"lib_footprint_mismatch": "warning", |
|||
"malformed_courtyard": "error", |
|||
"microvia_drill_out_of_range": "error", |
|||
"missing_courtyard": "ignore", |
|||
"missing_footprint": "warning", |
|||
"net_conflict": "warning", |
|||
"npth_inside_courtyard": "ignore", |
|||
"padstack": "warning", |
|||
"pth_inside_courtyard": "ignore", |
|||
"shorting_items": "error", |
|||
"silk_edge_clearance": "warning", |
|||
"silk_over_copper": "warning", |
|||
"silk_overlap": "warning", |
|||
"skew_out_of_range": "error", |
|||
"solder_mask_bridge": "error", |
|||
"starved_thermal": "error", |
|||
"text_height": "warning", |
|||
"text_thickness": "warning", |
|||
"through_hole_pad_without_hole": "error", |
|||
"too_many_vias": "error", |
|||
"track_dangling": "warning", |
|||
"track_width": "error", |
|||
"tracks_crossing": "error", |
|||
"unconnected_items": "error", |
|||
"unresolved_variable": "error", |
|||
"via_dangling": "warning", |
|||
"zones_intersect": "error" |
|||
}, |
|||
"rules": { |
|||
"max_error": 0.005, |
|||
"min_clearance": 0.0, |
|||
"min_connection": 0.0, |
|||
"min_copper_edge_clearance": 0.5, |
|||
"min_hole_clearance": 0.25, |
|||
"min_hole_to_hole": 0.25, |
|||
"min_microvia_diameter": 0.19999999999999998, |
|||
"min_microvia_drill": 0.09999999999999999, |
|||
"min_resolved_spokes": 2, |
|||
"min_silk_clearance": 0.0, |
|||
"min_text_height": 0.7999999999999999, |
|||
"min_text_thickness": 0.08, |
|||
"min_through_hole_diameter": 0.3, |
|||
"min_track_width": 0.0, |
|||
"min_via_annular_width": 0.09999999999999999, |
|||
"min_via_diameter": 0.5, |
|||
"solder_mask_to_copper_clearance": 0.0, |
|||
"use_height_for_length_calcs": true |
|||
}, |
|||
"teardrop_options": [ |
|||
{ |
|||
"td_onpadsmd": true, |
|||
"td_onroundshapesonly": false, |
|||
"td_ontrackend": false, |
|||
"td_onviapad": true |
|||
} |
|||
], |
|||
"teardrop_parameters": [ |
|||
{ |
|||
"td_allow_use_two_tracks": true, |
|||
"td_curve_segcount": 0, |
|||
"td_height_ratio": 1.0, |
|||
"td_length_ratio": 0.5, |
|||
"td_maxheight": 2.0, |
|||
"td_maxlen": 1.0, |
|||
"td_on_pad_in_zone": false, |
|||
"td_target_name": "td_round_shape", |
|||
"td_width_to_size_filter_ratio": 0.9 |
|||
}, |
|||
{ |
|||
"td_allow_use_two_tracks": true, |
|||
"td_curve_segcount": 0, |
|||
"td_height_ratio": 1.0, |
|||
"td_length_ratio": 0.5, |
|||
"td_maxheight": 2.0, |
|||
"td_maxlen": 1.0, |
|||
"td_on_pad_in_zone": false, |
|||
"td_target_name": "td_rect_shape", |
|||
"td_width_to_size_filter_ratio": 0.9 |
|||
}, |
|||
{ |
|||
"td_allow_use_two_tracks": true, |
|||
"td_curve_segcount": 0, |
|||
"td_height_ratio": 1.0, |
|||
"td_length_ratio": 0.5, |
|||
"td_maxheight": 2.0, |
|||
"td_maxlen": 1.0, |
|||
"td_on_pad_in_zone": false, |
|||
"td_target_name": "td_track_end", |
|||
"td_width_to_size_filter_ratio": 0.9 |
|||
} |
|||
], |
|||
"track_widths": [], |
|||
"tuning_pattern_settings": { |
|||
"diff_pair_defaults": { |
|||
"corner_radius_percentage": 100, |
|||
"corner_style": 1, |
|||
"max_amplitude": 1.0, |
|||
"min_amplitude": 0.1, |
|||
"single_sided": false, |
|||
"spacing": 0.6 |
|||
}, |
|||
"diff_pair_skew_defaults": { |
|||
"corner_radius_percentage": 100, |
|||
"corner_style": 1, |
|||
"max_amplitude": 1.0, |
|||
"min_amplitude": 0.1, |
|||
"single_sided": false, |
|||
"spacing": 0.6 |
|||
}, |
|||
"single_track_defaults": { |
|||
"corner_radius_percentage": 100, |
|||
"corner_style": 1, |
|||
"max_amplitude": 1.0, |
|||
"min_amplitude": 0.1, |
|||
"single_sided": false, |
|||
"spacing": 0.6 |
|||
} |
|||
}, |
|||
"via_dimensions": [], |
|||
"zones_allow_external_fillets": false |
|||
}, |
|||
"ipc2581": { |
|||
"dist": "", |
|||
"distpn": "", |
|||
"internal_id": "", |
|||
"mfg": "", |
|||
"mpn": "" |
|||
}, |
|||
"layer_presets": [], |
|||
"viewports": [] |
|||
}, |
|||
"boards": [], |
|||
"cvpcb": { |
|||
"equivalence_files": [] |
|||
}, |
|||
"libraries": { |
|||
"pinned_footprint_libs": [], |
|||
"pinned_symbol_libs": [] |
|||
}, |
|||
"meta": { |
|||
"filename": "pcb_reference_images.kicad_pro", |
|||
"version": 1 |
|||
}, |
|||
"net_settings": { |
|||
"classes": [ |
|||
{ |
|||
"bus_width": 12, |
|||
"clearance": 0.2, |
|||
"diff_pair_gap": 0.25, |
|||
"diff_pair_via_gap": 0.25, |
|||
"diff_pair_width": 0.2, |
|||
"line_style": 0, |
|||
"microvia_diameter": 0.3, |
|||
"microvia_drill": 0.1, |
|||
"name": "Default", |
|||
"pcb_color": "rgba(0, 0, 0, 0.000)", |
|||
"schematic_color": "rgba(0, 0, 0, 0.000)", |
|||
"track_width": 0.2, |
|||
"via_diameter": 0.6, |
|||
"via_drill": 0.3, |
|||
"wire_width": 6 |
|||
} |
|||
], |
|||
"meta": { |
|||
"version": 3 |
|||
}, |
|||
"net_colors": null, |
|||
"netclass_assignments": null, |
|||
"netclass_patterns": [] |
|||
}, |
|||
"pcbnew": { |
|||
"last_paths": { |
|||
"gencad": "", |
|||
"idf": "", |
|||
"netlist": "", |
|||
"plot": "", |
|||
"pos_files": "", |
|||
"specctra_dsn": "", |
|||
"step": "", |
|||
"svg": "", |
|||
"vrml": "" |
|||
}, |
|||
"page_layout_descr_file": "" |
|||
}, |
|||
"schematic": { |
|||
"legacy_lib_dir": "", |
|||
"legacy_lib_list": [] |
|||
}, |
|||
"sheets": [], |
|||
"text_variables": {} |
|||
} |
|||
@ -0,0 +1,102 @@ |
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors. |
|||
* |
|||
* This program is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU General Public License |
|||
* as published by the Free Software Foundation; either version 2 |
|||
* of the License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, you may find one here: |
|||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|||
* or you may search the http://www.gnu.org website for the version 2 license,
|
|||
* or you may write to the Free Software Foundation, Inc., |
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
|||
*/ |
|||
|
|||
#include <filesystem>
|
|||
|
|||
#include <board.h>
|
|||
#include <kiid.h>
|
|||
#include <footprint.h>
|
|||
#include <pcbnew_utils/board_file_utils.h>
|
|||
#include <pcbnew_utils/board_test_utils.h>
|
|||
#include <qa_utils/wx_utils/unit_test_utils.h>
|
|||
#include <settings/settings_manager.h>
|
|||
|
|||
namespace |
|||
{ |
|||
|
|||
struct FOOTPRINT_LOAD_TEST_FIXTURE |
|||
{ |
|||
FOOTPRINT_LOAD_TEST_FIXTURE() {} |
|||
}; |
|||
|
|||
|
|||
struct FOOTPRINT_LOAD_TEST_CASE |
|||
{ |
|||
// Which footprint this is
|
|||
KIID m_footprintUuid; |
|||
bool m_expectedLocked; |
|||
VECTOR2I m_expectedPos; |
|||
}; |
|||
|
|||
|
|||
struct FOOTPRINT_LOAD_BOARD_TEST_CASE |
|||
{ |
|||
// The board to load
|
|||
wxString m_boardFileRelativePath; |
|||
// List of images to check
|
|||
std::vector<FOOTPRINT_LOAD_TEST_CASE> m_imageCases; |
|||
}; |
|||
|
|||
} // namespace
|
|||
|
|||
BOOST_FIXTURE_TEST_CASE( FootprintLoadSave, FOOTPRINT_LOAD_TEST_FIXTURE ) |
|||
{ |
|||
const std::vector<FOOTPRINT_LOAD_BOARD_TEST_CASE> testCases{ |
|||
{ |
|||
"footprints_load_save", |
|||
{ |
|||
// From top to bottom in the board file
|
|||
{ |
|||
"898cf321-03c7-40bb-8d78-4bc5e52986c2", |
|||
false, |
|||
{ 100, 80 }, |
|||
}, |
|||
{ |
|||
"0775cd70-2e84-4592-a160-456c37a8f4f6", |
|||
true, |
|||
{ 100, 100 }, |
|||
}, |
|||
}, |
|||
}, |
|||
}; |
|||
|
|||
for( const FOOTPRINT_LOAD_BOARD_TEST_CASE& testCase : testCases ) |
|||
{ |
|||
const auto doBoardTest = [&]( const BOARD& aBoard ) |
|||
{ |
|||
for( const FOOTPRINT_LOAD_TEST_CASE& fooprintTestCase : testCase.m_imageCases ) |
|||
{ |
|||
BOOST_TEST_MESSAGE( "Checking for footprint with UUID: " |
|||
<< fooprintTestCase.m_footprintUuid.AsString() ); |
|||
|
|||
const auto& image = static_cast<FOOTPRINT&>( KI_TEST::RequireBoardItemWithTypeAndId( |
|||
aBoard, PCB_FOOTPRINT_T, fooprintTestCase.m_footprintUuid ) ); |
|||
|
|||
BOOST_CHECK_EQUAL( image.IsLocked(), fooprintTestCase.m_expectedLocked ); |
|||
BOOST_CHECK_EQUAL( image.GetPosition(), fooprintTestCase.m_expectedPos * 1000000 ); |
|||
} |
|||
}; |
|||
|
|||
KI_TEST::LoadAndTestBoardFile( testCase.m_boardFileRelativePath, true, doBoardTest ); |
|||
} |
|||
} |
|||
@ -0,0 +1,126 @@ |
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors. |
|||
* |
|||
* This program is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU General Public License |
|||
* as published by the Free Software Foundation; either version 2 |
|||
* of the License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, you may find one here: |
|||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|||
* or you may search the http://www.gnu.org website for the version 2 license,
|
|||
* or you may write to the Free Software Foundation, Inc., |
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
|||
*/ |
|||
|
|||
#include <filesystem>
|
|||
|
|||
#include <board.h>
|
|||
#include <kiid.h>
|
|||
#include <pcb_reference_image.h>
|
|||
#include <pcbnew_utils/board_file_utils.h>
|
|||
#include <pcbnew_utils/board_test_utils.h>
|
|||
#include <qa_utils/wx_utils/unit_test_utils.h>
|
|||
#include <settings/settings_manager.h>
|
|||
|
|||
namespace |
|||
{ |
|||
|
|||
struct REFERENCE_IMAGE_LOAD_TEST_FIXTURE |
|||
{ |
|||
REFERENCE_IMAGE_LOAD_TEST_FIXTURE() {} |
|||
}; |
|||
|
|||
|
|||
struct REFERENCE_IMAGE_LOAD_TEST_CASE |
|||
{ |
|||
// Which
|
|||
KIID m_imageUuid; |
|||
bool m_expectedLocked; |
|||
VECTOR2I m_expectedPos; |
|||
double m_expectedScale; |
|||
// This should also check correct image decoding, as it won't work otherwise
|
|||
VECTOR2I m_expectedPixelSize; |
|||
}; |
|||
|
|||
|
|||
struct REFERENCE_IMAGE_LOAD_BOARD_TEST_CASE |
|||
{ |
|||
// The board to load
|
|||
wxString m_boardFileRelativePath; |
|||
// List of images to check
|
|||
std::vector<REFERENCE_IMAGE_LOAD_TEST_CASE> m_imageCases; |
|||
}; |
|||
|
|||
} // namespace
|
|||
|
|||
BOOST_FIXTURE_TEST_CASE( ReferenceImageLoading, REFERENCE_IMAGE_LOAD_TEST_FIXTURE ) |
|||
{ |
|||
const std::vector<REFERENCE_IMAGE_LOAD_BOARD_TEST_CASE> testCases{ |
|||
{ |
|||
"reference_images_load_save", |
|||
{ |
|||
// From top to bottom in the board file
|
|||
{ |
|||
"7dde345e-020a-4fdd-af77-588b452be5e0", |
|||
false, |
|||
{ 100, 46 }, |
|||
1.0, |
|||
{ 64, 64 }, |
|||
}, |
|||
{ |
|||
"e4fd52dd-1d89-4c43-b621-aebfc9788d5c", |
|||
true, |
|||
{ 100, 65 }, |
|||
1.0, |
|||
{ 64, 64 }, |
|||
}, |
|||
{ |
|||
"d402397e-bce0-4cae-a398-b5aeef397e87", |
|||
false, |
|||
{ 100, 90 }, |
|||
2.0, |
|||
{ 64, 64 }, // It's the same size, but scaled
|
|||
}, |
|||
}, |
|||
}, |
|||
}; |
|||
|
|||
for( const REFERENCE_IMAGE_LOAD_BOARD_TEST_CASE& testCase : testCases ) |
|||
{ |
|||
const auto doBoardTest = [&]( const BOARD& aBoard ) |
|||
{ |
|||
for( const REFERENCE_IMAGE_LOAD_TEST_CASE& imageTestCase : testCase.m_imageCases ) |
|||
{ |
|||
BOOST_TEST_MESSAGE( |
|||
"Checking for image with UUID: " << imageTestCase.m_imageUuid.AsString() ); |
|||
|
|||
const auto& image = |
|||
static_cast<PCB_REFERENCE_IMAGE&>( KI_TEST::RequireBoardItemWithTypeAndId( |
|||
aBoard, PCB_REFERENCE_IMAGE_T, imageTestCase.m_imageUuid ) ); |
|||
|
|||
BOOST_CHECK_EQUAL( image.IsLocked(), imageTestCase.m_expectedLocked ); |
|||
BOOST_CHECK_EQUAL( image.GetPosition(), imageTestCase.m_expectedPos * 1000000 ); |
|||
BOOST_CHECK_CLOSE( image.GetImageScale(), imageTestCase.m_expectedScale, 1e-6 ); |
|||
|
|||
const BITMAP_BASE* bitmap = image.GetImage(); |
|||
|
|||
BOOST_REQUIRE( bitmap ); |
|||
|
|||
BOOST_TEST_MESSAGE( "Got underlying image" ); |
|||
|
|||
BOOST_CHECK_EQUAL( bitmap->GetSizePixels(), imageTestCase.m_expectedPixelSize ); |
|||
} |
|||
}; |
|||
|
|||
KI_TEST::LoadAndTestBoardFile( testCase.m_boardFileRelativePath, true, doBoardTest ); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue