Skip to content

Commit d0f0c07

Browse files
committed
Fix #30: fixing pushing after empty lines
1 parent e2fdcd9 commit d0f0c07

File tree

4 files changed

+84
-3
lines changed

4 files changed

+84
-3
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ All notable changes to wsjcpp-yaml project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

8-
## [v0.1.10] - 2025-12-?? (2025 Dec ??)
8+
## [v0.1.10] - 2025-12-30 (2025 Dec 30)
99

1010
- Downgrade min c++ standart to C++11
1111
- Fixed #38: TODO escaping names
1212
- Fixed #24: Auto detect quotes on setValue setName
13+
- Fixed #30: fixing pushing after empty lines
1314

1415
## [v0.1.9] - 2025-12-18 (2025 Dec 18)
1516

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
MIT License
3+
4+
Copyright (c) 2019-2025 wsjcpp
5+
6+
Permission is hereby granted, free of charge, to any person obtaining a copy
7+
of this software and associated documentation files (the "Software"), to deal
8+
in the Software without restriction, including without limitation the rights
9+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
copies of the Software, and to permit persons to whom the Software is
11+
furnished to do so, subject to the following conditions:
12+
13+
The above copyright notice and this permission notice shall be included in all
14+
copies or substantial portions of the Software.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
SOFTWARE.
23+
24+
Official Source Code: https://github.com/wsjcpp/wsjcpp-yaml
25+
*/
26+
27+
#include <iostream>
28+
#include <wsjcpp_yaml.h>
29+
30+
int main() {
31+
32+
std::string sInput =
33+
"some: \n"
34+
" - n1: 1\n"
35+
" n2: 2\n"
36+
"\n"
37+
"some2: r \n"
38+
;
39+
40+
WsjcppYaml yaml;
41+
std::string sError;
42+
if (!yaml.loadFromString("test_append_element_issue_30.yml", sInput, sError)) {
43+
std::cerr << sError << std::endl;
44+
return -1;
45+
}
46+
47+
WsjcppYamlNode *pSome = yaml.getRoot()->getElement("some")->getElement(0);
48+
pSome->setElementValue("n3", "3");
49+
50+
std::string sExpectedYaml =
51+
"some:\n"
52+
" - n1: 1\n"
53+
" n2: 2\n"
54+
" n3: 3\n"
55+
"\n"
56+
"some2: r"
57+
;
58+
59+
std::string sSaved = yaml.getRoot()->toString();
60+
61+
if (sSaved != sExpectedYaml) {
62+
std::cerr << "ERROR (1). Not equal. Expected: \n---\n" << sExpectedYaml << "\n---\n, but got \n---\n" << sSaved << "\n---\n" << std::endl;
63+
return -1;
64+
}
65+
66+
return 0;
67+
}

src/tests/test_keep_format.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ int main() {
7171
}
7272

7373
if (sOutput != sInput) {
74-
std::cerr << "sOutput != sInput" << std::endl;
74+
std::cerr << "sOutput != sInput" << "Expected: \n-----\n" << sInput << "\n-----\nbut got: \n-----\n" << sOutput << "\n-----\n" << std::endl;
7575
return -1;
7676
}
7777

src/wsjcpp_yaml.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,20 @@ bool WsjcppYamlNode::setElement(const std::string &sName, WsjcppYamlNode *pItem)
318318
"(" + m_placeInFile.getFilename() + ":" + WSJCPP_INT_TO_STR(m_placeInFile.getNumberOfLine()) + ") "
319319
"already has element with this name: '" + sName + "'");
320320
}
321-
m_vObjects.push_back(pItem); // TODO create clone
321+
322+
if (m_vObjects.size() == 0 || getParent() == WSJCPP_NULL) {
323+
m_vObjects.push_back(pItem); // TODO create clone
324+
return true;
325+
}
326+
327+
// fix issue 30
328+
WsjcppYamlNode *prevNode = m_vObjects[m_vObjects.size()-1];
329+
if (prevNode != WSJCPP_NULL && prevNode->isEmpty() && prevNode->getComment() == "") {
330+
m_vObjects[m_vObjects.size()-1] = pItem; // TODO create clone
331+
m_vObjects.push_back(prevNode); // TODO create clone
332+
} else {
333+
m_vObjects.push_back(pItem); // TODO create clone
334+
}
322335
return true;
323336
}
324337

0 commit comments

Comments
 (0)