Skip to content

Commit 49d5e14

Browse files
Refactor translator test script to streamline CMake and source generation
1 parent 039c014 commit 49d5e14

1 file changed

Lines changed: 17 additions & 83 deletions

File tree

tests/translator/trans.t

Lines changed: 17 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#!/usr/bin/perl
22
use strict;
33
use warnings;
4-
use File::Path qw(make_path);
4+
use lib "../test_lib";
5+
use test_lib qw(gen_cmake gen_base_dir run_test tool_check);
56

6-
sub gen_cpp_test {
7-
my ($cpp_file_path) = @_;
7+
# Test name.
8+
my $test_name = "translator";
89

9-
my $cpp_source = <<END;
10-
/*
11-
* Auto generate Test base.
12-
*/
10+
# Auto generate base translator test if 'main.cc' is not exists.
11+
my $cpp_source = <<END;
12+
// Auto generate Test base.
1313
#include "../../../src/language/include/language.hpp"
1414
#include <iostream>
1515
using namespace zclipboard::language;
@@ -20,15 +20,10 @@ int main() {
2020
return 0;
2121
}
2222
END
23-
print $cpp_file_path "$cpp_source";
24-
}
25-
26-
sub write_cmake {
27-
my ($cmakeFile, $test_name) = @_;
2823

29-
my $cmake_source = <<"END";
24+
my $cmake_base = <<'END';
3025
cmake_minimum_required(VERSION 3.19)
31-
project($test_name)
26+
project(translator)
3227
3328
set(CMAKE_CXX_STANDARD 17)
3429
set(CXX_SOURCE)
@@ -37,85 +32,24 @@ set(CXX_HEADER)
3732
file(GLOB_RECURSE SOURCES "src/*.cc")
3833
file(GLOB_RECURSE HEADER_SOURCES "src/*.hpp")
3934
40-
foreach(SOURCE_FILE \${SOURCES})
41-
list(APPEND CXX_SOURCE \${SOURCE_FILE})
35+
foreach(SOURCE_FILE ${SOURCES})
36+
list(APPEND CXX_SOURCE ${SOURCE_FILE})
4237
endforeach()
4338
44-
foreach(HEADER_FILE \${HEADER_SOURCES})
45-
list(APPEND CXX_HEADER \${HEADER_FILE})
39+
foreach(HEADER_FILE ${HEADER_SOURCES})
40+
list(APPEND CXX_HEADER ${HEADER_FILE})
4641
endforeach()
4742
48-
add_executable(\${PROJECT_NAME} \${CXX_SOURCE} \${CXX_HEADER} \${ASSETS})
43+
add_executable(${PROJECT_NAME} ${CXX_SOURCE} ${CXX_HEADER} ${ASSETS})
4944
END
5045

51-
print $cmakeFile "$cmake_source";
52-
}
53-
54-
sub gen_cmake {
55-
my $test_name="translator";
56-
my $fileName = "CMakeLists.txt";
57-
58-
if(! -e $fileName) {
59-
print("[WARN] Could not find $fileName. Generate new now.\n");
60-
open(my $cmakeFile, ">", "$fileName") or die "[ERR] Could not generate CMake with error: $!\n";
61-
62-
write_cmake($cmakeFile, $test_name);
63-
close($cmakeFile);
64-
65-
print("\n[INFO] Generate $fileName successfully.\n");
66-
}
67-
}
68-
69-
sub gen_basedir() {
70-
my $base_dir = "src";
71-
my $build_dir = "$base_dir/build";
72-
my $cpp_main = "$base_dir/main.cc";
73-
74-
if(! -d $base_dir) {
75-
print "Could not find $base_dir. Generate now...";
76-
make_path($build_dir) or die "Could not generate $base_dir & $build_dir $!\n";
77-
78-
open(my $cpp_file, ">", $cpp_main) or die "[ERR] Could not generate C++ source with error: $!\n";
79-
gen_cpp_test($cpp_file);
80-
print "Generate C++ Test base successfully.\n";
81-
close($cpp_file);
82-
83-
return $build_dir;
84-
}
85-
86-
return $build_dir;
87-
}
88-
89-
sub run_test {
90-
my $test_name="translator";
91-
my ($build_dir) = @_;
92-
93-
chdir $build_dir or die "Could not change directory to: $build_dir with error: $!\n";
94-
95-
my $cmake_rc = system("cmake", "../..");
96-
die "[ERR] CMake error" if $cmake_rc != 0;
97-
98-
my $make_rc = system("make");
99-
die "[ERR] Makefile error" if $make_rc != 0;
100-
101-
my $prorgam = system("./$test_name");
102-
die "[ERR] Test FAILED" if $prorgam != 0;
103-
}
104-
105-
sub tool_check {
106-
my ($cmd) = @_;
107-
my $found = system("which $cmd > /dev/null 2>&1") == 0;
108-
109-
return $found;
110-
}
111-
11246
die "[ERR] Could not find CMake" unless tool_check("cmake");
11347
die "[ERR] Could not find Clang" unless tool_check("clang");
11448
die "[ERR] Could not find Make" unless tool_check("make");
11549

11650
# If CMakeLists.txt is not exists & base directory test is not exists.
117-
gen_cmake();
118-
my $build_dir = gen_basedir();
119-
run_test($build_dir);
51+
gen_cmake("$test_name", "$cmake_base");
52+
my $build_dir = gen_base_dir("$cpp_source");
53+
run_test("$build_dir", "$test_name");
12054

12155
print("Test passed.\n")

0 commit comments

Comments
 (0)