Manager: Fix unit test, add XML comment testcase
This commit is contained in:
+14
-3
@@ -405,16 +405,27 @@ void Dotfile::selectivelyCommentOrUncomment(const std::string& path)
|
||||
|
||||
size_t lineLength = line.size();
|
||||
size_t commentStart = line.find(commentCharacter, indentation);
|
||||
size_t commentEnd = line.find(commentTerminationCharacter, commentStart);
|
||||
bool hasComment = commentStart != std::string::npos && commentEnd != std::string::npos;
|
||||
size_t commentEnd = line.rfind(commentTerminationCharacter);
|
||||
bool hasComment = commentStart != std::string::npos && (commentTerminationCharacter.empty() || commentEnd != std::string::npos);
|
||||
|
||||
// Lines that have a comment at the *end* of the line aren't considered commented lines
|
||||
if (hasComment && line.find_first_not_of(" \t") < commentStart) {
|
||||
hasComment = false;
|
||||
}
|
||||
|
||||
// Uncomment line
|
||||
if (hasComment && !addComment) {
|
||||
size_t contentStart = line.find_first_not_of(" \t", commentStart + commentCharacter.size());
|
||||
size_t contentLength = commentEnd - contentStart;
|
||||
|
||||
// Trim trailing whitespace
|
||||
std::string content = line.substr(contentStart, contentLength);
|
||||
content = content.substr(0, content.find_last_not_of(" \t") + 1);
|
||||
|
||||
line = line.substr(0, indentation)
|
||||
+ line.substr(contentStart, contentLength);
|
||||
+ content;
|
||||
}
|
||||
// Comment line
|
||||
else if (!hasComment && addComment) {
|
||||
size_t contentStart = line.find_first_not_of(" \t");
|
||||
size_t contentLength = line.size() - contentStart;
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
/*
|
||||
* Copyright (C) 2022 Riyyi
|
||||
* Copyright (C) 2022,2025 Riyyi
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <cstddef> // size_t
|
||||
#include <cstdint> // uint32_t
|
||||
#include <cstdio> // stderr
|
||||
#include <filesystem> // path
|
||||
#include <string>
|
||||
@@ -13,12 +12,12 @@
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#include "ruc/file.h"
|
||||
|
||||
#include "config.h"
|
||||
#include "dotfile.h"
|
||||
#include "machine.h"
|
||||
#include "macro.h"
|
||||
#include "ruc/file.h"
|
||||
#include "ruc/system.h"
|
||||
#include "testcase.h"
|
||||
#include "testsuite.h"
|
||||
|
||||
@@ -503,7 +502,7 @@ TEST_CASE(PushDotfilesWithIgnorePattern)
|
||||
TEST_CASE(PushDotfilesSelectivelyComment)
|
||||
{
|
||||
std::vector<std::string> fileNames;
|
||||
for (size_t i = 0; i < 36; ++i) {
|
||||
for (size_t i = 0; i < 44; ++i) {
|
||||
fileNames.push_back("__test-file-" + std::to_string(i + 1));
|
||||
}
|
||||
|
||||
@@ -678,6 +677,43 @@ test data /**/ comment
|
||||
/* test data /**/ uncomment */
|
||||
/* <<< */
|
||||
)",
|
||||
|
||||
// Comment <!---->
|
||||
"<!-- >>> distro=" + placeholder + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
test data <!----> comment
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + distro + " hostname=" + placeholder + " user=" + username + " -->" + R"(
|
||||
test data <!----> comment
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + distro + " hostname=" + hostname + " user=" + placeholder + " -->" + R"(
|
||||
test data <!----> comment
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + placeholder + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
test data <!----> comment
|
||||
<!-- <<< -->
|
||||
)",
|
||||
|
||||
// Uncomment <!---->
|
||||
"<!-- >>> distro=" + distro + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
<!-- test data <!----> uncomment -->
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro="
|
||||
+ distro + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
<!-- test data <!----> uncomment -->
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + distro + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
<!-- test data <!----> uncomment -->
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + distro + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
<!-- test data <!----> uncomment -->
|
||||
<!-- <<< -->
|
||||
)",
|
||||
};
|
||||
|
||||
std::vector<std::string> pushedFileContents = {
|
||||
@@ -846,6 +882,42 @@ test data /**/ uncomment
|
||||
test data /**/ uncomment
|
||||
/* <<< */
|
||||
)",
|
||||
|
||||
// Comment <!---->
|
||||
"<!-- >>> distro=" + placeholder + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
<!-- test data <!----> comment -->
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + distro + " hostname=" + placeholder + " user=" + username + " -->" + R"(
|
||||
<!-- test data <!----> comment -->
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + distro + " hostname=" + hostname + " user=" + placeholder + " -->" + R"(
|
||||
<!-- test data <!----> comment -->
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + placeholder + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
<!-- test data <!----> comment -->
|
||||
<!-- <<< -->
|
||||
)",
|
||||
|
||||
// Uncomment <!---->
|
||||
"<!-- >>> distro=" + distro + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
test data <!----> uncomment
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + distro + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
test data <!----> uncomment
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + distro + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
test data <!----> uncomment
|
||||
<!-- <<< -->
|
||||
)",
|
||||
" <!-- >>> distro=" + distro + " hostname=" + hostname + " user=" + username + " -->" + R"(
|
||||
test data <!----> uncomment
|
||||
<!-- <<< -->
|
||||
)",
|
||||
};
|
||||
|
||||
createTestDotfiles(fileNames, fileContents);
|
||||
|
||||
Reference in New Issue
Block a user