bool bMiddleReadOnly = false;
bool bRightReadOnly = false;
bool bRecursive = false;
- project.GetPaths(tFiles, bRecursive);
- for (int i = 0; i < tFiles.size(); ++i)
+ bool rtn = true;
+ for (auto& projItem : project.Items())
{
- if (!paths::IsPathAbsolute(tFiles[i]))
- tFiles[i] = paths::ConcatPath(paths::GetParentPath(sProject), tFiles[i]);
- }
- bLeftReadOnly = project.GetLeftReadOnly();
- bMiddleReadOnly = project.GetMiddleReadOnly();
- bRightReadOnly = project.GetRightReadOnly();
- if (project.HasFilter())
- {
- String filter = project.GetFilter();
- filter = strutils::trim_ws(filter);
- m_pGlobalFileFilter->SetFilter(filter);
- }
- if (project.HasSubfolders())
- bRecursive = project.GetSubfolders() > 0;
-
- DWORD dwFlags[3] = {
- static_cast<DWORD>(tFiles.GetPath(0).empty() ? FFILEOPEN_NONE : FFILEOPEN_PROJECT),
- static_cast<DWORD>(tFiles.GetPath(1).empty() ? FFILEOPEN_NONE : FFILEOPEN_PROJECT),
- static_cast<DWORD>(tFiles.GetPath(2).empty() ? FFILEOPEN_NONE : FFILEOPEN_PROJECT)
- };
- if (bLeftReadOnly)
- dwFlags[0] |= FFILEOPEN_READONLY;
- if (tFiles.GetSize() == 2)
- {
- if (bRightReadOnly)
- dwFlags[1] |= FFILEOPEN_READONLY;
- }
- else
- {
- if (bMiddleReadOnly)
- dwFlags[1] |= FFILEOPEN_READONLY;
- if (bRightReadOnly)
- dwFlags[2] |= FFILEOPEN_READONLY;
- }
+ projItem.GetPaths(tFiles, bRecursive);
+ for (int i = 0; i < tFiles.size(); ++i)
+ {
+ if (!paths::IsPathAbsolute(tFiles[i]))
+ tFiles[i] = paths::ConcatPath(paths::GetParentPath(sProject), tFiles[i]);
+ }
+ bLeftReadOnly = projItem.GetLeftReadOnly();
+ bMiddleReadOnly = projItem.GetMiddleReadOnly();
+ bRightReadOnly = projItem.GetRightReadOnly();
+ if (projItem.HasFilter())
+ {
+ String filter = projItem.GetFilter();
+ filter = strutils::trim_ws(filter);
+ m_pGlobalFileFilter->SetFilter(filter);
+ }
+ if (projItem.HasSubfolders())
+ bRecursive = projItem.GetSubfolders() > 0;
+
+ DWORD dwFlags[3] = {
+ static_cast<DWORD>(tFiles.GetPath(0).empty() ? FFILEOPEN_NONE : FFILEOPEN_PROJECT),
+ static_cast<DWORD>(tFiles.GetPath(1).empty() ? FFILEOPEN_NONE : FFILEOPEN_PROJECT),
+ static_cast<DWORD>(tFiles.GetPath(2).empty() ? FFILEOPEN_NONE : FFILEOPEN_PROJECT)
+ };
+ if (bLeftReadOnly)
+ dwFlags[0] |= FFILEOPEN_READONLY;
+ if (tFiles.GetSize() == 2)
+ {
+ if (bRightReadOnly)
+ dwFlags[1] |= FFILEOPEN_READONLY;
+ }
+ else
+ {
+ if (bMiddleReadOnly)
+ dwFlags[1] |= FFILEOPEN_READONLY;
+ if (bRightReadOnly)
+ dwFlags[2] |= FFILEOPEN_READONLY;
+ }
- GetOptionsMgr()->SaveOption(OPT_CMP_INCLUDE_SUBDIRS, bRecursive);
-
- bool rtn = GetMainFrame()->DoFileOpen(&tFiles, dwFlags, nullptr, sReportFile, bRecursive);
+ GetOptionsMgr()->SaveOption(OPT_CMP_INCLUDE_SUBDIRS, bRecursive);
+
+ rtn &= GetMainFrame()->DoFileOpen(&tFiles, dwFlags, nullptr, sReportFile, bRecursive);
+ }
AddToRecentProjectsMRU(sProject.c_str());
return rtn;
ProjectFile project;
if (!theApp.LoadProjectFile(fileName, project))
return;
-
+ if (project.Items().size() == 0)
+ return;
PathContext paths;
- project.GetPaths(paths, m_bRecurse);
- project.GetLeftReadOnly();
+ ProjectFileItem& projItem = *project.Items().begin();
+ projItem.GetPaths(paths, m_bRecurse);
+ projItem.GetLeftReadOnly();
if (paths.size() < 3)
{
m_strPath[0] = paths[0];
m_strPath[1] = paths[1];
m_strPath[2] = _T("");
- m_bReadOnly[0] = project.GetLeftReadOnly();
- m_bReadOnly[1] = project.GetRightReadOnly();
+ m_bReadOnly[0] = projItem.GetLeftReadOnly();
+ m_bReadOnly[1] = projItem.GetRightReadOnly();
m_bReadOnly[2] = false;
}
else
m_strPath[0] = paths[0];
m_strPath[1] = paths[1];
m_strPath[2] = paths[2];
- m_bReadOnly[0] = project.GetLeftReadOnly();
- m_bReadOnly[1] = project.GetMiddleReadOnly();
- m_bReadOnly[2] = project.GetRightReadOnly();
+ m_bReadOnly[0] = projItem.GetLeftReadOnly();
+ m_bReadOnly[1] = projItem.GetMiddleReadOnly();
+ m_bReadOnly[2] = projItem.GetRightReadOnly();
}
- m_strExt = project.GetFilter();
+ m_strExt = projItem.GetFilter();
UpdateData(FALSE);
LangMessageBox(IDS_PROJFILE_LOAD_SUCCESS, MB_ICONINFORMATION);
return;
ProjectFile project;
+ ProjectFileItem projItem;
if (!m_strPath[0].empty())
- project.SetLeft(m_strPath[0], &m_bReadOnly[0]);
+ projItem.SetLeft(m_strPath[0], &m_bReadOnly[0]);
if (m_strPath[2].empty())
{
if (!m_strPath[1].empty())
- project.SetRight(m_strPath[1], &m_bReadOnly[1]);
+ projItem.SetRight(m_strPath[1], &m_bReadOnly[1]);
}
else
{
if (!m_strPath[1].empty())
- project.SetMiddle(m_strPath[1], &m_bReadOnly[1]);
+ projItem.SetMiddle(m_strPath[1], &m_bReadOnly[1]);
if (!m_strPath[2].empty())
- project.SetRight(m_strPath[2], &m_bReadOnly[2]);
+ projItem.SetRight(m_strPath[2], &m_bReadOnly[2]);
}
if (!m_strExt.empty())
{
strExt.erase(0, prefix.length());
}
strExt = strutils::trim_ws_begin(strExt);
- project.SetFilter(strExt);
+ projItem.SetFilter(strExt);
}
- project.SetSubfolders(m_bRecurse);
+ projItem.SetSubfolders(m_bRecurse);
+ project.Items().push_back(projItem);
if (!theApp.SaveProjectFile(fileName, project))
return;
if (!theApp.LoadProjectFile(path, prj))
return false;
-
+ if (prj.Items().size() == 0)
+ return false;
bool recurse;
- prj.GetPaths(m_files, recurse);
+ ProjectFileItem& projItem = *prj.Items().begin();
+ projItem.GetPaths(m_files, recurse);
m_bRecurse = recurse;
m_dwFlags[0] &= ~FFILEOPEN_READONLY;
- m_dwFlags[0] |= prj.GetLeftReadOnly() ? FFILEOPEN_READONLY : 0;
+ m_dwFlags[0] |= projItem.GetLeftReadOnly() ? FFILEOPEN_READONLY : 0;
if (m_files.GetSize() < 3)
{
m_dwFlags[1] &= ~FFILEOPEN_READONLY;
- m_dwFlags[1] |= prj.GetRightReadOnly() ? FFILEOPEN_READONLY : 0;
+ m_dwFlags[1] |= projItem.GetRightReadOnly() ? FFILEOPEN_READONLY : 0;
}
else
{
m_dwFlags[1] &= ~FFILEOPEN_READONLY;
- m_dwFlags[1] |= prj.GetMiddleReadOnly() ? FFILEOPEN_READONLY : 0;
+ m_dwFlags[1] |= projItem.GetMiddleReadOnly() ? FFILEOPEN_READONLY : 0;
m_dwFlags[2] &= ~FFILEOPEN_READONLY;
- m_dwFlags[2] |= prj.GetRightReadOnly() ? FFILEOPEN_READONLY : 0;
+ m_dwFlags[2] |= projItem.GetRightReadOnly() ? FFILEOPEN_READONLY : 0;
}
- if (prj.HasFilter())
+ if (projItem.HasFilter())
{
- m_strExt = strutils::trim_ws(prj.GetFilter());
+ m_strExt = strutils::trim_ws(projItem.GetFilter());
if (m_strExt[0] != '*')
m_strExt.insert(0, filterPrefix);
}
class ProjectFileHandler: public ContentHandler
{
public:
- explicit ProjectFileHandler(ProjectFile *pProject) : m_pProject(pProject) {}
+ explicit ProjectFileHandler(std::list<ProjectFileItem> *pProject) : m_pProject(pProject) {}
void setDocumentLocator(const Locator* loc) {}
void startDocument() {}
void endDocument() {}
void startElement(const XMLString& uri, const XMLString& localName, const XMLString& qname, const Attributes& attributes)
{
+ if (localName == Paths_element_name)
+ m_pProject->push_back(ProjectFileItem{});
m_stack.push(localName);
}
void endElement(const XMLString& uri, const XMLString& localName, const XMLString& qname)
}
void characters(const XMLChar ch[], int start, int length)
{
- if (m_stack.size() != 3)
+ if (m_stack.size() != 3 && m_pProject->size() == 0)
return;
+ ProjectFileItem& currentItem = m_pProject->back();
+
const std::string& nodename = m_stack.top();
if (nodename == Left_element_name)
{
- m_pProject->m_paths.SetLeft(m_pProject->m_paths.GetLeft() + xmlch2tstr(ch + start, length), false);
- m_pProject->m_bHasLeft = true;
+ currentItem.m_paths.SetLeft(currentItem.m_paths.GetLeft() + xmlch2tstr(ch + start, length), false);
+ currentItem.m_bHasLeft = true;
}
else if (nodename == Middle_element_name)
{
- m_pProject->m_paths.SetMiddle(m_pProject->m_paths.GetMiddle() + xmlch2tstr(ch + start, length), false);
- m_pProject->m_bHasMiddle = true;
+ currentItem.m_paths.SetMiddle(currentItem.m_paths.GetMiddle() + xmlch2tstr(ch + start, length), false);
+ currentItem.m_bHasMiddle = true;
}
else if (nodename == Right_element_name)
{
- m_pProject->m_paths.SetRight(m_pProject->m_paths.GetRight() + xmlch2tstr(ch + start, length), false);
- m_pProject->m_bHasRight = true;
+ currentItem.m_paths.SetRight(currentItem.m_paths.GetRight() + xmlch2tstr(ch + start, length), false);
+ currentItem.m_bHasRight = true;
}
else if (nodename == Filter_element_name)
{
- m_pProject->m_filter += xmlch2tstr(ch + start, length);
- m_pProject->m_bHasFilter = true;
+ currentItem.m_filter += xmlch2tstr(ch + start, length);
+ currentItem.m_bHasFilter = true;
}
else if (nodename == Subfolders_element_name)
{
- m_pProject->m_subfolders = atoi(std::string(ch + start, length).c_str());
- m_pProject->m_bHasSubfolders = true;
+ currentItem.m_subfolders = atoi(std::string(ch + start, length).c_str());
+ currentItem.m_bHasSubfolders = true;
}
else if (nodename == Left_ro_element_name)
{
- m_pProject->m_bLeftReadOnly = atoi(std::string(ch + start, length).c_str()) != 0;
+ currentItem.m_bLeftReadOnly = atoi(std::string(ch + start, length).c_str()) != 0;
}
else if (nodename == Middle_ro_element_name)
{
- m_pProject->m_bMiddleReadOnly = atoi(std::string(ch + start, length).c_str()) != 0;
+ currentItem.m_bMiddleReadOnly = atoi(std::string(ch + start, length).c_str()) != 0;
}
else if (nodename == Right_ro_element_name)
{
- m_pProject->m_bRightReadOnly = atoi(std::string(ch + start, length).c_str()) != 0;
+ currentItem.m_bRightReadOnly = atoi(std::string(ch + start, length).c_str()) != 0;
}
}
void ignorableWhitespace(const XMLChar ch[], int start, int length) {}
void skippedEntity(const XMLString& name) {}
private:
- ProjectFile *m_pProject;
+ std::list<ProjectFileItem> *m_pProject = nullptr;
std::stack<std::string> m_stack;
};
/**
* @brief Standard constructor.
*/
- ProjectFile::ProjectFile()
+ ProjectFileItem::ProjectFileItem()
: m_bHasLeft(false)
, m_bHasMiddle(false)
, m_bHasRight(false)
}
/**
- * @brief Open given path-file and read data from it to member variables.
- * @param [in] path Path to project file.
- * @param [out] sError Error string if error happened.
- * @return true if reading succeeded, false if error happened.
- */
-bool ProjectFile::Read(const String& path)
-{
- ProjectFileHandler handler(this);
- SAXParser parser;
- parser.setContentHandler(&handler);
- parser.parse(toUTF8(path));
- return true;
-}
-
-/**
- * @brief Save data from member variables to path-file.
- * @param [in] path Path to project file.
- * @param [out] sError Error string if error happened.
- * @return true if saving succeeded, false if error happened.
- */
-bool ProjectFile::Save(const String& path) const
-{
- FileStream out(toUTF8(path), FileStream::trunc);
- XMLWriter writer(out, XMLWriter::WRITE_XML_DECLARATION | XMLWriter::PRETTY_PRINT);
- writer.startDocument();
- writer.startElement("", "", Root_element_name);
- {
- writer.startElement("", "", Paths_element_name);
- {
- if (!m_paths.GetLeft().empty())
- writeElement(writer, Left_element_name, toUTF8(m_paths.GetLeft()));
- if (!m_paths.GetMiddle().empty())
- writeElement(writer, Middle_element_name, toUTF8(m_paths.GetMiddle()));
- if (!m_paths.GetRight().empty())
- writeElement(writer, Right_element_name, toUTF8(m_paths.GetRight()));
- if (!m_filter.empty())
- writeElement(writer, Filter_element_name, toUTF8(m_filter));
- writeElement(writer, Subfolders_element_name, m_subfolders != 0 ? "1" : "0");
- writeElement(writer, Left_ro_element_name, m_bLeftReadOnly ? "1" : "0");
- if (!m_paths.GetMiddle().empty())
- writeElement(writer, Middle_ro_element_name, m_bMiddleReadOnly ? "1" : "0");
- writeElement(writer, Right_ro_element_name, m_bRightReadOnly ? "1" : "0");
- }
- writer.endElement("", "", Paths_element_name);
- }
- writer.endElement("", "", Root_element_name);
- writer.endDocument();
- return true;
-}
-
-/**
* @brief Returns if left path is defined in project file.
* @return true if project file has left path.
*/
-bool ProjectFile::HasLeft() const
+bool ProjectFileItem::HasLeft() const
{
return m_bHasLeft;
}
/**
* @brief Returns if middle path is defined.
*/
-bool ProjectFile::HasMiddle() const
+bool ProjectFileItem::HasMiddle() const
{
return m_bHasMiddle;
}
* @brief Returns if right path is defined in project file.
* @return true if project file has right path.
*/
-bool ProjectFile::HasRight() const
+bool ProjectFileItem::HasRight() const
{
return m_bHasRight;
}
* @brief Returns if filter is defined in project file.
* @return true if project file has filter.
*/
-bool ProjectFile::HasFilter() const
+bool ProjectFileItem::HasFilter() const
{
return m_bHasFilter;
}
* @brief Returns if subfolder is defined in projectfile.
* @return true if project file has subfolder definition.
*/
-bool ProjectFile::HasSubfolders() const
+bool ProjectFileItem::HasSubfolders() const
{
return m_bHasSubfolders;
}
* @param [out] pReadOnly true if readonly was specified for path.
* @return Left path.
*/
-String ProjectFile::GetLeft(bool * pReadOnly /*= nullptr*/) const
+String ProjectFileItem::GetLeft(bool * pReadOnly /*= nullptr*/) const
{
if (pReadOnly != nullptr)
*pReadOnly = m_bLeftReadOnly;
* @brief Returns if left path is specified read-only.
* @return true if left path is read-only, false otherwise.
*/
-bool ProjectFile::GetLeftReadOnly() const
+bool ProjectFileItem::GetLeftReadOnly() const
{
return m_bLeftReadOnly;
}
* @param [in] sLeft Left path.
* @param [in] bReadOnly Will path be recorded read-only?
*/
-void ProjectFile::SetLeft(const String& sLeft, const bool * pReadOnly /*= nullptr*/)
+void ProjectFileItem::SetLeft(const String& sLeft, const bool * pReadOnly /*= nullptr*/)
{
m_paths.SetLeft(sLeft, false);
if (pReadOnly != nullptr)
* @brief Returns middle path.
* @param [out] pReadOnly true if readonly was specified for path.
*/
-String ProjectFile::GetMiddle(bool * pReadOnly /*= nullptr*/) const
+String ProjectFileItem::GetMiddle(bool * pReadOnly /*= nullptr*/) const
{
if (pReadOnly != nullptr)
*pReadOnly = m_bMiddleReadOnly;
/**
* @brief Returns if middle path is specified read-only.
*/
-bool ProjectFile::GetMiddleReadOnly() const
+bool ProjectFileItem::GetMiddleReadOnly() const
{
return m_bMiddleReadOnly;
}
* @param [in] sMiddle Middle path.
* @param [in] bReadOnly Will path be recorded read-only?
*/
-void ProjectFile::SetMiddle(const String& sMiddle, const bool * pReadOnly /*= nullptr*/)
+void ProjectFileItem::SetMiddle(const String& sMiddle, const bool * pReadOnly /*= nullptr*/)
{
m_paths.SetMiddle(sMiddle, false);
if (pReadOnly != nullptr)
* @param [out] pReadOnly true if readonly was specified for path.
* @return Right path.
*/
-String ProjectFile::GetRight(bool * pReadOnly /*= nullptr*/) const
+String ProjectFileItem::GetRight(bool * pReadOnly /*= nullptr*/) const
{
if (pReadOnly != nullptr)
*pReadOnly = m_bRightReadOnly;
* @brief Returns if right path is specified read-only.
* @return true if right path is read-only, false otherwise.
*/
-bool ProjectFile::GetRightReadOnly() const
+bool ProjectFileItem::GetRightReadOnly() const
{
return m_bRightReadOnly;
}
* @param [in] sRight Right path.
* @param [in] bReadOnly Will path be recorded read-only?
*/
-void ProjectFile::SetRight(const String& sRight, const bool * pReadOnly /*= nullptr*/)
+void ProjectFileItem::SetRight(const String& sRight, const bool * pReadOnly /*= nullptr*/)
{
m_paths.SetRight(sRight, false);
if (pReadOnly != nullptr)
* @brief Returns filter.
* @return Filter string.
*/
-String ProjectFile::GetFilter() const
+String ProjectFileItem::GetFilter() const
{
return m_filter;
}
* @brief Set filter.
* @param [in] sFilter New filter string to set.
*/
-void ProjectFile::SetFilter(const String& sFilter)
+void ProjectFileItem::SetFilter(const String& sFilter)
{
m_filter = sFilter;
}
* @brief Returns subfolder included -setting.
* @return != 0 if subfolders are included.
*/
-int ProjectFile::GetSubfolders() const
+int ProjectFileItem::GetSubfolders() const
{
return m_subfolders;
}
* @brief set subfolder.
* @param [in] iSubfolder New value for subfolder inclusion.
*/
-void ProjectFile::SetSubfolders(bool bSubfolder)
+void ProjectFileItem::SetSubfolders(bool bSubfolder)
{
m_subfolders = bSubfolder ? 1 : 0;
}
* @param [in] files Files in project
* @param [in] bSubFolders If true subfolders included (recursive compare)
*/
-void ProjectFile::SetPaths(const PathContext& files, bool bSubfolders)
+void ProjectFileItem::SetPaths(const PathContext& files, bool bSubfolders)
{
m_paths = files;
m_subfolders = bSubfolders;
* @param [out] files Files in project
* @param [out] bSubFolders If true subfolders included (recursive compare)
*/
-void ProjectFile::GetPaths(PathContext& files, bool & bSubfolders) const
+void ProjectFileItem::GetPaths(PathContext& files, bool & bSubfolders) const
{
files = m_paths;
if (HasSubfolders())
bSubfolders = (GetSubfolders() == 1);
}
+
+/**
+ * @brief Open given path-file and read data from it to member variables.
+ * @param [in] path Path to project file.
+ * @param [out] sError Error string if error happened.
+ * @return true if reading succeeded, false if error happened.
+ */
+bool ProjectFile::Read(const String& path)
+{
+ ProjectFileHandler handler(&m_items);
+ SAXParser parser;
+ parser.setContentHandler(&handler);
+ parser.parse(toUTF8(path));
+ return true;
+}
+
+/**
+ * @brief Save data from member variables to path-file.
+ * @param [in] path Path to project file.
+ * @param [out] sError Error string if error happened.
+ * @return true if saving succeeded, false if error happened.
+ */
+bool ProjectFile::Save(const String& path) const
+{
+ FileStream out(toUTF8(path), FileStream::trunc);
+ XMLWriter writer(out, XMLWriter::WRITE_XML_DECLARATION | XMLWriter::PRETTY_PRINT);
+ writer.startDocument();
+ writer.startElement("", "", Root_element_name);
+ {
+ for (auto& item : m_items)
+ {
+ writer.startElement("", "", Paths_element_name);
+ {
+ if (!item.m_paths.GetLeft().empty())
+ writeElement(writer, Left_element_name, toUTF8(item.m_paths.GetLeft()));
+ if (!item.m_paths.GetMiddle().empty())
+ writeElement(writer, Middle_element_name, toUTF8(item.m_paths.GetMiddle()));
+ if (!item.m_paths.GetRight().empty())
+ writeElement(writer, Right_element_name, toUTF8(item.m_paths.GetRight()));
+ if (!item.m_filter.empty())
+ writeElement(writer, Filter_element_name, toUTF8(item.m_filter));
+ writeElement(writer, Subfolders_element_name, item.m_subfolders != 0 ? "1" : "0");
+ writeElement(writer, Left_ro_element_name, item.m_bLeftReadOnly ? "1" : "0");
+ if (!item.m_paths.GetMiddle().empty())
+ writeElement(writer, Middle_ro_element_name, item.m_bMiddleReadOnly ? "1" : "0");
+ writeElement(writer, Right_ro_element_name, item.m_bRightReadOnly ? "1" : "0");
+ }
+ writer.endElement("", "", Paths_element_name);
+ }
+ }
+ writer.endElement("", "", Root_element_name);
+ writer.endDocument();
+ return true;
+}
+
#include "UnicodeString.h"
#include "PathContext.h"
-/**
- * @brief Class for handling project files.
- *
- * This class loads and saves project files. Expat parser and SCEW wrapper for
- * expat are used for XML parsing. We use UTF-8 encoding so Unicode paths are
- * supported.
- */
-class ProjectFile
+class ProjectFileItem
{
+ friend class ProjectFile;
friend class ProjectFileHandler;
public:
- ProjectFile();
- bool Read(const String& path);
- bool Save(const String& path) const;
-
+ ProjectFileItem();
bool HasLeft() const;
bool HasMiddle() const;
bool HasRight() const;
void GetPaths(PathContext& files, bool & bSubFolders) const;
void SetPaths(const PathContext& files, bool bSubFolders = false);
- static const String PROJECTFILE_EXT;
-
private:
PathContext m_paths;
bool m_bHasLeft; /**< Has left path? */
bool m_bMiddleReadOnly; /**< Is middle path opened as read-only */
bool m_bRightReadOnly; /**< Is right path opened as read-only */
};
+
+/**
+ * @brief Class for handling project files.
+ *
+ * This class loads and saves project files. Expat parser and SCEW wrapper for
+ * expat are used for XML parsing. We use UTF-8 encoding so Unicode paths are
+ * supported.
+ */
+class ProjectFile
+{
+public:
+ bool Read(const String& path);
+ bool Save(const String& path) const;
+ const std::list<ProjectFileItem>& Items() const { return m_items; };
+ std::list<ProjectFileItem>& Items() { return m_items; }
+ static const String PROJECTFILE_EXT;
+private:
+ std::list<ProjectFileItem> m_items;
+};
class LeftAndRightTest : public testing::Test\r
{\r
protected:\r
- LeftAndRightTest() : m_pProjectFile(nullptr)\r
+ LeftAndRightTest() : m_pProjectFile(nullptr), m_pProjectFileItem(nullptr)\r
{\r
// You can do set-up work for each test here.\r
}\r
\r
// Objects declared here can be used by all tests in the test case for Foo.\r
ProjectFile *m_pProjectFile;\r
+ ProjectFileItem *m_pProjectFileItem;\r
};\r
\r
/**\r
TEST_F(LeftAndRightTest, GetLeftPath)\r
{\r
// Has left path\r
- bool bIsLeft = m_pProjectFile->HasLeft();\r
+ bool bIsLeft = m_pProjectFileItem->HasLeft();\r
ASSERT_TRUE(bIsLeft == true);\r
\r
// Get left path without read-only info\r
- String left = m_pProjectFile->GetLeft();\r
+ String left = m_pProjectFileItem->GetLeft();\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
\r
// Get left path with read-only info\r
bool bReadOnly;\r
- left = m_pProjectFile->GetLeft(&bReadOnly);\r
+ left = m_pProjectFileItem->GetLeft(&bReadOnly);\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(LeftAndRightTest, GetRightPath)\r
{\r
// Has right path\r
- bool bIsRight = m_pProjectFile->HasRight();\r
+ bool bIsRight = m_pProjectFileItem->HasRight();\r
ASSERT_TRUE(bIsRight == true);\r
\r
// Get right path without read-only info\r
- String right = m_pProjectFile->GetRight();\r
+ String right = m_pProjectFileItem->GetRight();\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
\r
// Get right path with read-only info\r
bool bReadOnly;\r
- right = m_pProjectFile->GetRight(&bReadOnly);\r
+ right = m_pProjectFileItem->GetRight(&bReadOnly);\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(LeftAndRightTest, GetSubfolders)\r
{\r
// We don't have a subfolders\r
- bool bHasSubfolders = m_pProjectFile->HasSubfolders();\r
+ bool bHasSubfolders = m_pProjectFileItem->HasSubfolders();\r
ASSERT_TRUE(bHasSubfolders == false);\r
\r
// Returns -1 if not set\r
- int subfolders = m_pProjectFile->GetSubfolders();\r
+ int subfolders = m_pProjectFileItem->GetSubfolders();\r
ASSERT_TRUE(subfolders == -1);\r
}\r
\r
TEST_F(LeftAndRightTest, GetFilter)\r
{\r
// We don't have a filter\r
- bool bHasFilter = m_pProjectFile->HasFilter();\r
+ bool bHasFilter = m_pProjectFileItem->HasFilter();\r
ASSERT_TRUE(bHasFilter == false);\r
\r
- String filter = m_pProjectFile->GetFilter();\r
+ String filter = m_pProjectFileItem->GetFilter();\r
ASSERT_TRUE(filter.empty());\r
}\r
\r
class LeftAndRightNonRecursiveTest : public testing::Test\r
{\r
protected:\r
- LeftAndRightNonRecursiveTest() : m_pProjectFile(nullptr)\r
+ LeftAndRightNonRecursiveTest() : m_pProjectFile(nullptr), m_pProjectFileItem(nullptr)\r
{\r
// You can do set-up work for each test here.\r
}\r
m_pProjectFile = new ProjectFile;\r
\r
bool success = m_pProjectFile->Read(FileName);\r
+ m_pProjectFileItem = &*m_pProjectFile->Items().begin();\r
+ \r
}\r
\r
virtual void TearDown()\r
\r
// Objects declared here can be used by all tests in the test case for Foo.\r
ProjectFile *m_pProjectFile;\r
+ ProjectFileItem *m_pProjectFileItem;\r
};\r
\r
/**\r
TEST_F(LeftAndRightNonRecursiveTest, GetLeftPath)\r
{\r
// Has left path\r
- bool bIsLeft = m_pProjectFile->HasLeft();\r
+ bool bIsLeft = m_pProjectFileItem->HasLeft();\r
ASSERT_TRUE(bIsLeft == true);\r
\r
// Get left path without read-only info\r
- String left = m_pProjectFile->GetLeft();\r
+ String left = m_pProjectFileItem->GetLeft();\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
\r
// Get left path with read-only info\r
bool bReadOnly;\r
- left = m_pProjectFile->GetLeft(&bReadOnly);\r
+ left = m_pProjectFileItem->GetLeft(&bReadOnly);\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(LeftAndRightNonRecursiveTest, GetRightPath)\r
{\r
// Has right path\r
- bool bIsRight = m_pProjectFile->HasRight();\r
+ bool bIsRight = m_pProjectFileItem->HasRight();\r
ASSERT_TRUE(bIsRight == true);\r
\r
// Get right path without read-only info\r
- String right = m_pProjectFile->GetRight();\r
+ String right = m_pProjectFileItem->GetRight();\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
\r
// Get right path with read-only info\r
bool bReadOnly;\r
- right = m_pProjectFile->GetRight(&bReadOnly);\r
+ right = m_pProjectFileItem->GetRight(&bReadOnly);\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(LeftAndRightNonRecursiveTest, GetSubfolders)\r
{\r
// Now we have subfolders\r
- bool bHasSubfolders = m_pProjectFile->HasSubfolders();\r
+ bool bHasSubfolders = m_pProjectFileItem->HasSubfolders();\r
ASSERT_TRUE(bHasSubfolders == true);\r
\r
// But the setting says we don't want recursive compare\r
- int subfolders = m_pProjectFile->GetSubfolders();\r
+ int subfolders = m_pProjectFileItem->GetSubfolders();\r
ASSERT_TRUE(subfolders == 0);\r
}\r
\r
TEST_F(LeftAndRightNonRecursiveTest, GetFilter)\r
{\r
// We don't have a filter\r
- bool bHasFilter = m_pProjectFile->HasFilter();\r
+ bool bHasFilter = m_pProjectFileItem->HasFilter();\r
ASSERT_TRUE(bHasFilter == false);\r
\r
- String filter = m_pProjectFile->GetFilter();\r
+ String filter = m_pProjectFileItem->GetFilter();\r
ASSERT_TRUE(filter.empty());\r
}\r
\r
class LeftAndRightRecursiveTest : public testing::Test\r
{\r
protected:\r
- LeftAndRightRecursiveTest() : m_pProjectFile(nullptr)\r
+ LeftAndRightRecursiveTest() : m_pProjectFile(nullptr),m_pProjectFileItem(nullptr)\r
{\r
// You can do set-up work for each test here.\r
}\r
m_pProjectFile = new ProjectFile;\r
\r
bool success = m_pProjectFile->Read(FileName);\r
+ m_pProjectFileItem = &*m_pProjectFile->Items().begin();\r
+ \r
}\r
\r
virtual void TearDown()\r
\r
// Objects declared here can be used by all tests in the test case for Foo.\r
ProjectFile *m_pProjectFile;\r
+ ProjectFileItem *m_pProjectFileItem;\r
};\r
\r
/**\r
TEST_F(LeftAndRightRecursiveTest, GetLeftPath)\r
{\r
// Has left path\r
- bool bIsLeft = m_pProjectFile->HasLeft();\r
+ bool bIsLeft = m_pProjectFileItem->HasLeft();\r
ASSERT_TRUE(bIsLeft == true);\r
\r
// Get left path without read-only info\r
- String left = m_pProjectFile->GetLeft();\r
+ String left = m_pProjectFileItem->GetLeft();\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
\r
// Get left path with read-only info\r
bool bReadOnly;\r
- left = m_pProjectFile->GetLeft(&bReadOnly);\r
+ left = m_pProjectFileItem->GetLeft(&bReadOnly);\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(LeftAndRightRecursiveTest, GetRightPath)\r
{\r
// Has right path\r
- bool bIsRight = m_pProjectFile->HasRight();\r
+ bool bIsRight = m_pProjectFileItem->HasRight();\r
ASSERT_TRUE(bIsRight == true);\r
\r
// Get right path without read-only info\r
- String right = m_pProjectFile->GetRight();\r
+ String right = m_pProjectFileItem->GetRight();\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
\r
// Get right path with read-only info\r
bool bReadOnly;\r
- right = m_pProjectFile->GetRight(&bReadOnly);\r
+ right = m_pProjectFileItem->GetRight(&bReadOnly);\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(LeftAndRightRecursiveTest, GetSubfolders)\r
{\r
// Now we have subfolders\r
- bool bHasSubfolders = m_pProjectFile->HasSubfolders();\r
+ bool bHasSubfolders = m_pProjectFileItem->HasSubfolders();\r
ASSERT_TRUE(bHasSubfolders == true);\r
\r
- int subfolders = m_pProjectFile->GetSubfolders();\r
+ int subfolders = m_pProjectFileItem->GetSubfolders();\r
ASSERT_TRUE(subfolders == 1);\r
}\r
\r
TEST_F(LeftAndRightRecursiveTest, GetFilter)\r
{\r
// We don't have a filter\r
- bool bHasFilter = m_pProjectFile->HasFilter();\r
+ bool bHasFilter = m_pProjectFileItem->HasFilter();\r
ASSERT_TRUE(bHasFilter == false);\r
\r
- String filter = m_pProjectFile->GetFilter();\r
+ String filter = m_pProjectFileItem->GetFilter();\r
ASSERT_TRUE(filter.empty());\r
}\r
\r
class PathAndFilterTest : public testing::Test\r
{\r
protected:\r
- PathAndFilterTest() : m_pProjectFile(nullptr)\r
+ PathAndFilterTest() : m_pProjectFile(nullptr), m_pProjectFileItem(nullptr)\r
{\r
// You can do set-up work for each test here.\r
}\r
m_pProjectFile = new ProjectFile;\r
\r
bool success = m_pProjectFile->Read(FileName);\r
+ m_pProjectFileItem = &*m_pProjectFile->Items().begin(); \r
}\r
\r
virtual void TearDown()\r
\r
// Objects declared here can be used by all tests in the test case for Foo.\r
ProjectFile *m_pProjectFile;\r
+ ProjectFileItem *m_pProjectFileItem;\r
};\r
\r
/**\r
TEST_F(PathAndFilterTest, GetLeftPath)\r
{\r
// Has left path\r
- bool bIsLeft = m_pProjectFile->HasLeft();\r
+ bool bIsLeft = m_pProjectFileItem->HasLeft();\r
ASSERT_TRUE(bIsLeft == true);\r
\r
// Get left path without read-only info\r
- String left = m_pProjectFile->GetLeft();\r
+ String left = m_pProjectFileItem->GetLeft();\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
\r
// Get left path with read-only info\r
bool bReadOnly;\r
- left = m_pProjectFile->GetLeft(&bReadOnly);\r
+ left = m_pProjectFileItem->GetLeft(&bReadOnly);\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(PathAndFilterTest, GetRightPath)\r
{\r
// Has right path\r
- bool bIsRight = m_pProjectFile->HasRight();\r
+ bool bIsRight = m_pProjectFileItem->HasRight();\r
ASSERT_TRUE(bIsRight == true);\r
\r
// Get right path without read-only info\r
- String right = m_pProjectFile->GetRight();\r
+ String right = m_pProjectFileItem->GetRight();\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
\r
// Get right path with read-only info\r
bool bReadOnly;\r
- right = m_pProjectFile->GetRight(&bReadOnly);\r
+ right = m_pProjectFileItem->GetRight(&bReadOnly);\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(PathAndFilterTest, GetSubfolders)\r
{\r
// We don't have a subfolders\r
- bool bHasSubfolders = m_pProjectFile->HasSubfolders();\r
+ bool bHasSubfolders = m_pProjectFileItem->HasSubfolders();\r
ASSERT_TRUE(bHasSubfolders == false);\r
\r
// Returns -1 if not set\r
- int subfolders = m_pProjectFile->GetSubfolders();\r
+ int subfolders = m_pProjectFileItem->GetSubfolders();\r
ASSERT_TRUE(subfolders == -1);\r
}\r
\r
TEST_F(PathAndFilterTest, GetFilter)\r
{\r
// Now we have a filter\r
- bool bHasFilter = m_pProjectFile->HasFilter();\r
+ bool bHasFilter = m_pProjectFileItem->HasFilter();\r
ASSERT_TRUE(bHasFilter == true);\r
\r
- String filter = m_pProjectFile->GetFilter();\r
+ String filter = m_pProjectFileItem->GetFilter();\r
ASSERT_TRUE(filter.compare(Filter) == 0);\r
}\r
\r
class SimpleLeftTest : public testing::Test\r
{\r
protected:\r
- SimpleLeftTest() : m_pProjectFile(nullptr)\r
+ SimpleLeftTest() : m_pProjectFile(nullptr), m_pProjectFileItem(nullptr)\r
{\r
// You can do set-up work for each test here.\r
}\r
m_pProjectFile = new ProjectFile;\r
\r
bool success = m_pProjectFile->Read(FileName);\r
+ m_pProjectFileItem = &*m_pProjectFile->Items().begin(); \r
}\r
\r
virtual void TearDown()\r
\r
// Objects declared here can be used by all tests in the test case for Foo.\r
ProjectFile *m_pProjectFile;\r
+ ProjectFileItem *m_pProjectFileItem;\r
};\r
\r
/**\r
TEST_F(SimpleLeftTest, GetLeftPath)\r
{\r
// Has left path (only)\r
- bool bIsLeft = m_pProjectFile->HasLeft();\r
+ bool bIsLeft = m_pProjectFileItem->HasLeft();\r
ASSERT_TRUE(bIsLeft == true);\r
\r
// Get left path without read-only info\r
- String left = m_pProjectFile->GetLeft();\r
+ String left = m_pProjectFileItem->GetLeft();\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
\r
// Get left path with read-only info\r
bool bReadOnly;\r
- left = m_pProjectFile->GetLeft(&bReadOnly);\r
+ left = m_pProjectFileItem->GetLeft(&bReadOnly);\r
ASSERT_TRUE(left.compare(LeftPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(SimpleLeftTest, GetRightPath)\r
{\r
// We don't have right path\r
- bool bIsRight = m_pProjectFile->HasRight();\r
+ bool bIsRight = m_pProjectFileItem->HasRight();\r
ASSERT_TRUE(bIsRight == false);\r
\r
// Get right path without read-only info\r
- String right = m_pProjectFile->GetRight();\r
+ String right = m_pProjectFileItem->GetRight();\r
ASSERT_TRUE(right.empty());\r
\r
// Get right path with read-only info\r
bool bReadOnly;\r
- right = m_pProjectFile->GetRight(&bReadOnly);\r
+ right = m_pProjectFileItem->GetRight(&bReadOnly);\r
ASSERT_TRUE(right.empty());\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(SimpleLeftTest, GetSubfolders)\r
{\r
// We don't have a subfolders\r
- bool bHasSubfolders = m_pProjectFile->HasSubfolders();\r
+ bool bHasSubfolders = m_pProjectFileItem->HasSubfolders();\r
ASSERT_TRUE(bHasSubfolders == false);\r
\r
// Returns -1 if not set\r
- int subfolders = m_pProjectFile->GetSubfolders();\r
+ int subfolders = m_pProjectFileItem->GetSubfolders();\r
ASSERT_TRUE(subfolders == -1);\r
}\r
\r
TEST_F(SimpleLeftTest, GetFilter)\r
{\r
// We don't have a filter\r
- bool bHasFilter = m_pProjectFile->HasFilter();\r
+ bool bHasFilter = m_pProjectFileItem->HasFilter();\r
ASSERT_TRUE(bHasFilter == false);\r
\r
- String filter = m_pProjectFile->GetFilter();\r
+ String filter = m_pProjectFileItem->GetFilter();\r
ASSERT_TRUE(filter.empty());\r
}\r
\r
class SimpleRightTest : public testing::Test\r
{\r
protected:\r
- SimpleRightTest() : m_pProjectFile(nullptr)\r
+ SimpleRightTest() : m_pProjectFile(nullptr),m_pProjectFileItem(nullptr)\r
{\r
// You can do set-up work for each test here.\r
}\r
m_pProjectFile = new ProjectFile;\r
\r
bool success = m_pProjectFile->Read(FileName);\r
+ m_pProjectFileItem = &*m_pProjectFile->Items().begin();\r
+ \r
}\r
\r
virtual void TearDown()\r
\r
// Objects declared here can be used by all tests in the test case for Foo.\r
ProjectFile *m_pProjectFile;\r
+ ProjectFileItem *m_pProjectFileItem;\r
};\r
\r
/**\r
TEST_F(SimpleRightTest, GetRightPath)\r
{\r
// Has right path (only)\r
- bool bIsRight = m_pProjectFile->HasRight();\r
+ bool bIsRight = m_pProjectFileItem->HasRight();\r
ASSERT_TRUE(bIsRight == true);\r
\r
// Get right path without read-only info\r
- String right = m_pProjectFile->GetRight();\r
+ String right = m_pProjectFileItem->GetRight();\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
\r
// Get right path with read-only info\r
bool bReadOnly;\r
- right = m_pProjectFile->GetRight(&bReadOnly);\r
+ right = m_pProjectFileItem->GetRight(&bReadOnly);\r
ASSERT_TRUE(right.compare(RightPath) == 0);\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(SimpleRightTest, GetLeftPath)\r
{\r
// We don't have left path\r
- bool bIsLeft = m_pProjectFile->HasLeft();\r
+ bool bIsLeft = m_pProjectFileItem->HasLeft();\r
ASSERT_TRUE(bIsLeft == false);\r
\r
// Get left path without read-only info\r
- String left = m_pProjectFile->GetLeft();\r
+ String left = m_pProjectFileItem->GetLeft();\r
ASSERT_TRUE(left.empty());\r
\r
// Get left path with read-only info\r
bool bReadOnly;\r
- left = m_pProjectFile->GetLeft(&bReadOnly);\r
+ left = m_pProjectFileItem->GetLeft(&bReadOnly);\r
ASSERT_TRUE(left.empty());\r
ASSERT_TRUE(bReadOnly == false);\r
}\r
TEST_F(SimpleRightTest, GetSubfolders)\r
{\r
// We don't have a subfolders\r
- bool bHasSubfolders = m_pProjectFile->HasSubfolders();\r
+ bool bHasSubfolders = m_pProjectFileItem->HasSubfolders();\r
ASSERT_TRUE(bHasSubfolders == false);\r
\r
// Returns -1 if not set\r
- int subfolders = m_pProjectFile->GetSubfolders();\r
+ int subfolders = m_pProjectFileItem->GetSubfolders();\r
ASSERT_TRUE(subfolders == -1);\r
}\r
\r
TEST_F(SimpleRightTest, GetFilter)\r
{\r
// We don't have a filter\r
- bool bHasFilter = m_pProjectFile->HasFilter();\r
+ bool bHasFilter = m_pProjectFileItem->HasFilter();\r
ASSERT_TRUE(bHasFilter == false);\r
\r
- String filter = m_pProjectFile->GetFilter();\r
+ String filter = m_pProjectFileItem->GetFilter();\r
ASSERT_TRUE(filter.empty());\r
}\r
\r