mirror of
https://github.com/MaskRay/ccls.git
synced 2025-04-20 23:53:05 +00:00
[test] Use system 'diff' on POSIX.
This commit is contained in:
parent
70bbe6c64c
commit
45b57bd729
37
src/test.cc
37
src/test.cc
@ -6,8 +6,15 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
// The 'diff' utility is available and we can use dprintf(3).
|
||||||
|
#if _POSIX_C_SOURCE >= 200809L
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
void Write(const std::vector<std::string>& strs) {
|
void Write(const std::vector<std::string>& strs) {
|
||||||
for (const std::string& str : strs)
|
for (const std::string& str : strs)
|
||||||
std::cout << str << std::endl;
|
std::cout << str << std::endl;
|
||||||
@ -31,14 +38,38 @@ void DiffDocuments(std::string path,
|
|||||||
rapidjson::Document& expected,
|
rapidjson::Document& expected,
|
||||||
rapidjson::Document& actual) {
|
rapidjson::Document& actual) {
|
||||||
std::string joined_actual_output = ToString(actual);
|
std::string joined_actual_output = ToString(actual);
|
||||||
|
std::string joined_expected_output = ToString(expected);
|
||||||
|
std::cout << "[FAILED] " << path << " (section " << path_section << ")"
|
||||||
|
<< std::endl;
|
||||||
|
|
||||||
|
#if _POSIX_C_SOURCE >= 200809L
|
||||||
|
char expected_file[] = "/tmp/cquery.expected.XXXXXX";
|
||||||
|
char actual_file[] = "/tmp/cquery.actual.XXXXXX";
|
||||||
|
int expected_fd = mkstemp(expected_file);
|
||||||
|
int actual_fd = mkstemp(actual_file);
|
||||||
|
dprintf(expected_fd, "%s", joined_expected_output.c_str());
|
||||||
|
dprintf(actual_fd, "%s", joined_actual_output.c_str());
|
||||||
|
close(expected_fd);
|
||||||
|
close(actual_fd);
|
||||||
|
pid_t child = fork();
|
||||||
|
if (child == 0) {
|
||||||
|
execlp("diff", "diff", "-U", "3", expected_file, actual_file, NULL);
|
||||||
|
_Exit(127);
|
||||||
|
} else {
|
||||||
|
int status;
|
||||||
|
waitpid(child, &status, 0);
|
||||||
|
unlink(expected_file);
|
||||||
|
unlink(actual_file);
|
||||||
|
// 'diff' returns 0 or 1 if exitted normaly.
|
||||||
|
if (WEXITSTATUS(status) <= 1)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
std::vector<std::string> actual_output =
|
std::vector<std::string> actual_output =
|
||||||
SplitString(joined_actual_output, "\n");
|
SplitString(joined_actual_output, "\n");
|
||||||
std::string joined_expected_output = ToString(expected);
|
|
||||||
std::vector<std::string> expected_output =
|
std::vector<std::string> expected_output =
|
||||||
SplitString(joined_expected_output, "\n");
|
SplitString(joined_expected_output, "\n");
|
||||||
|
|
||||||
std::cout << "[FAILED] " << path << " (section " << path_section << ")"
|
|
||||||
<< std::endl;
|
|
||||||
std::cout << "Expected output for " << path << " (section " << path_section
|
std::cout << "Expected output for " << path << " (section " << path_section
|
||||||
<< "):" << std::endl;
|
<< "):" << std::endl;
|
||||||
std::cout << joined_expected_output << std::endl;
|
std::cout << joined_expected_output << std::endl;
|
||||||
|
Loading…
Reference in New Issue
Block a user