11# !/usr/bin/perl
22use strict;
33use 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>
1515using namespace zclipboard::language;
@@ -20,15 +20,10 @@ int main() {
2020 return 0;
2121}
2222END
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' ;
3025cmake_minimum_required(VERSION 3.19)
31- project($test_name )
26+ project(translator )
3227
3328set(CMAKE_CXX_STANDARD 17)
3429set(CXX_SOURCE)
@@ -37,85 +32,24 @@ set(CXX_HEADER)
3732file(GLOB_RECURSE SOURCES "src/*.cc")
3833file(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})
4237endforeach()
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})
4641endforeach()
4742
48- add_executable(\ $ {PROJECT_NAME} \ $ {CXX_SOURCE} \ $ {CXX_HEADER} \ $ {ASSETS})
43+ add_executable(${PROJECT_NAME} ${CXX_SOURCE} ${CXX_HEADER} ${ASSETS})
4944END
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-
11246die " [ERR] Could not find CMake" unless tool_check(" cmake" );
11347die " [ERR] Could not find Clang" unless tool_check(" clang" );
11448die " [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
12155print (" Test passed.\n " )
0 commit comments