35#include <wx/filename.h>
53 wxFileName tmp( wxFileName::CreateTempFileName( wxS(
"saveas" ) ) );
54 wxString dirPath = tmp.GetPath();
55 wxString dirName = tmp.GetName();
56 wxRemoveFile( tmp.GetFullPath() );
58 wxFileName base( dirPath, wxEmptyString );
59 base.AppendDir( dirName );
73 wxCopyFile( dataDir.GetFullPath() + wxS(
"/issue13212.kicad_sch" ),
74 m_srcDir.GetFullPath() + wxS(
"/issue13212.kicad_sch" ) );
75 wxCopyFile( dataDir.GetFullPath() + wxS(
"/issue13212_subsheet_1.kicad_sch" ),
76 m_srcDir.GetFullPath() + wxS(
"/issue13212_subsheet_1.kicad_sch" ) );
77 wxCopyFile( dataDir.GetFullPath() + wxS(
"/issue13212_subsheet_2.kicad_sch" ),
78 m_externalDir.GetFullPath() + wxS(
"/issue13212_subsheet_2.kicad_sch" ) );
81 rootFile.SetFullName( wxS(
"issue13212.kicad_sch" ) );
83 wxFFile file( rootFile.GetFullPath(), wxS(
"rb" ) );
85 file.ReadAll( &content );
87 content.Replace( wxS(
"issue13212_subsheet_2.kicad_sch" ),
88 wxS(
"../external/issue13212_subsheet_2.kicad_sch" ) );
89 wxFFile outFile( rootFile.GetFullPath(), wxS(
"wb" ) );
90 outFile.Write( content );
97 fn.SetName( aRelativePath );
104 for(
size_t i = 0; i < aScreens.
GetCount(); i++ )
120 wxFileName srcRoot = GetSchematicPath( wxS(
"issue13212" ) );
122 wxFileName destRoot( m_baseDir );
123 destRoot.AppendDir( wxS(
"new" ) );
124 destRoot.AppendDir( wxS(
"location" ) );
125 destRoot.SetName( wxS(
"issue13212" ) );
127 { wxFileName destDir( destRoot ); destDir.SetFullName( wxEmptyString );
if( !destDir.DirExists() ) destDir.Mkdir( 0777, wxPATH_MKDIR_FULL ); }
129 std::unordered_map<SCH_SCREEN*, wxString> filenameMap;
132 m_schematic->Root().SetFileName( destRoot.GetFullName() );
133 m_schematic->RootScreen()->SetFileName( destRoot.GetFullPath() );
136 false, filenameMap, msg );
142 for(
size_t i = 0; i < screens.
GetCount(); i++ )
146 if( wxString( s->
GetFileName() ).EndsWith( wxS(
"issue13212_subsheet_1.kicad_sch" ) ) )
148 else if( wxString( s->
GetFileName() ).EndsWith( wxS(
"issue13212_subsheet_2.kicad_sch" ) ) )
152 wxFileName internalExpected( destRoot.GetPath(), wxS(
"issue13212_subsheet_1.kicad_sch" ) );
155 wxFileName externalExpected( m_externalDir.GetFullPath(), wxS(
"issue13212_subsheet_2.kicad_sch" ) );
158 SCH_SHEET_LIST sheetList = m_schematic->BuildSheetListSortedByPageNumbers();
160 wxString externalSheetPath;
164 if(
path.Last()->GetFileName().Contains( wxS(
"issue13212_subsheet_2" ) ) )
165 externalSheetPath =
path.Last()->GetFileName();
168 BOOST_CHECK_EQUAL( externalSheetPath, wxS(
"../../external/issue13212_subsheet_2.kicad_sch" ) );
176 wxFileName srcRoot = GetSchematicPath( wxS(
"issue13212" ) );
178 wxFileName destRoot( m_baseDir );
179 destRoot.AppendDir( wxS(
"destall" ) );
180 destRoot.SetName( wxS(
"issue13212" ) );
182 { wxFileName destDir( destRoot ); destDir.SetFullName( wxEmptyString );
if( !destDir.DirExists() ) destDir.Mkdir( 0777, wxPATH_MKDIR_FULL ); }
184 std::unordered_map<SCH_SCREEN*, wxString> filenameMap;
187 m_schematic->Root().SetFileName( destRoot.GetFullName() );
188 m_schematic->RootScreen()->SetFileName( destRoot.GetFullPath() );
191 true, filenameMap, msg );
196 for(
size_t i = 0; i < screens.
GetCount(); i++ )
200 if( wxString( s->
GetFileName() ).EndsWith( wxS(
"issue13212_subsheet_2.kicad_sch" ) ) )
204 wxFileName externalExpected( destRoot.GetPath(), wxS(
"issue13212_subsheet_2.kicad_sch" ) );
213 wxFileName srcRoot = GetSchematicPath( wxS(
"issue13212" ) );
215 wxFileName destRoot( m_baseDir );
216 destRoot.AppendDir( wxS(
"nocopy" ) );
217 destRoot.SetName( wxS(
"issue13212" ) );
219 { wxFileName destDir( destRoot ); destDir.SetFullName( wxEmptyString );
if( !destDir.DirExists() ) destDir.Mkdir( 0777, wxPATH_MKDIR_FULL ); }
221 std::unordered_map<SCH_SCREEN*, wxString> filenameMap;
224 m_schematic->Root().SetFileName( destRoot.GetFullName() );
225 m_schematic->RootScreen()->SetFileName( destRoot.GetFullPath() );
228 false, filenameMap, msg );
233 for(
size_t i = 0; i < screens.
GetCount(); i++ )
237 if( wxString( s->
GetFileName() ).EndsWith( wxS(
"issue13212_subsheet_1.kicad_sch" ) ) )
241 wxFileName internalExpected( m_srcDir.GetFullPath(), wxS(
"issue13212_subsheet_1.kicad_sch" ) );
252 wxFileName srcRoot = GetSchematicPath( wxS(
"issue13212" ) );
254 wxFileName destRoot( m_baseDir );
255 destRoot.AppendDir( wxS(
"virtualroot" ) );
256 destRoot.SetName( wxS(
"issue13212" ) );
259 wxFileName destDir( destRoot );
260 destDir.SetFullName( wxEmptyString );
261 BOOST_REQUIRE( destDir.DirExists() || destDir.Mkdir( 0777, wxPATH_MKDIR_FULL ) );
263 SCH_SCREEN* virtualRootScreen = m_schematic->Root().GetScreen();
265 BOOST_REQUIRE( virtualRootScreen != m_schematic->RootScreen() );
268 std::unordered_map<SCH_SCREEN*, wxString> filenameMap;
271 m_schematic->Root().SetFileName( destRoot.GetFullName() );
272 m_schematic->RootScreen()->SetFileName( destRoot.GetFullPath() );
274 BOOST_CHECK(
PrepareSaveAsFiles( *m_schematic, screens, srcRoot, destRoot,
false,
true,
275 false, filenameMap, msg ) );
285 wxFileName srcRoot = GetSchematicPath( wxS(
"issue13212" ) );
287 wxFileName destRoot( m_baseDir );
288 destRoot.AppendDir( wxS(
"virtualrootcopy" ) );
289 destRoot.SetName( wxS(
"issue13212" ) );
292 wxFileName destDir( destRoot );
293 destDir.SetFullName( wxEmptyString );
294 BOOST_REQUIRE( destDir.DirExists() || destDir.Mkdir( 0777, wxPATH_MKDIR_FULL ) );
296 SCH_SCREEN* virtualRootScreen = m_schematic->Root().GetScreen();
298 BOOST_REQUIRE( virtualRootScreen != m_schematic->RootScreen() );
301 std::unordered_map<SCH_SCREEN*, wxString> filenameMap;
304 filenameMap[m_schematic->RootScreen()] = destRoot.GetFullPath();
306 BOOST_CHECK(
PrepareSaveAsFiles( *m_schematic, screens, srcRoot, destRoot,
true,
true,
307 false, filenameMap, msg ) );
309 BOOST_CHECK( !filenameMap.contains( virtualRootScreen ) );
318 std::vector<wxString> references;
325 wxFileName destFile( m_baseDir );
326 destFile.AppendDir( wxS(
"apicopy" ) );
327 destFile.SetName( wxS(
"copy" ) );
330 wxFileName destDir( destFile );
331 destDir.SetFullName( wxEmptyString );
332 BOOST_REQUIRE( destDir.DirExists() || destDir.Mkdir( 0777, wxPATH_MKDIR_FULL ) );
335 destFile.GetFullPath(),
false ) );
337 wxFFile written( destFile.GetFullPath(), wxS(
"rb" ) );
341 written.ReadAll( &content );
343 for(
const wxString& reference : references )
344 BOOST_CHECK( content.Contains( wxS(
"\"" ) + reference + wxS(
"\"" ) ) );
A generic fixture for loading schematics and associated settings for qa tests.
wxFileName GetSchematicPath(const wxString &aRelativePath)
SAVEAS_SUBSHEET_FIXTURE()
Base class for any item which can be embedded within the SCHEMATIC container class,...
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
SCH_SCREEN * GetScreen(unsigned int aIndex) const
const wxString & GetFileName() const
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
bool PrepareSaveAsFiles(SCHEMATIC &aSchematic, SCH_SCREENS &aScreens, const wxFileName &aOldRoot, const wxFileName &aNewRoot, bool aSaveCopy, bool aCopySubsheets, bool aIncludeExternSheets, std::unordered_map< SCH_SCREEN *, wxString > &aFilenameMap, wxString &aErrorMsg)
static const std::string KiCadSchematicFileExtension
std::string GetEeschemaTestDataDir()
Get the configured location of Eeschema test data.
bool SaveSchematicCopy(SCHEMATIC &aSchematic, PROJECT &aProject, const wxString &aFileName, bool aCreateProject)
Save the root schematic to aFileName without changing the open document.
static void LoadSchematic(SCHEMATIC *aSchematic, SCH_SHEET *aRootSheet, const wxString &aFileName)
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
@ REFERENCE
Field Reference of part, i.e. "IC21".
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE(CopyInternalReferenceExternal)
static bool ScreensContain(SCH_SCREENS &aScreens, SCH_SCREEN *aScreen)
BOOST_CHECK_EQUAL(result, "25.4")
Definition of file extensions used in Kicad.