mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-10-29 07:13:44 +08:00
- cbm_mkstemp: Windows implementation using _mktemp + _open - cbm_tmpdir(): portable temp directory function (replaces /tmp/) - Fix hardcoded /tmp/ paths in test_language, test_gitignore, test_store_search, test_sqlite_writer - Enlarge remaining small path buffers for Windows %TEMP% paths
753 lines
20 KiB
C
753 lines
20 KiB
C
/*
|
|
* test_language.c — Tests for language detection (filename + extension).
|
|
*
|
|
* RED phase: These tests define the expected behavior for all 64 languages.
|
|
*/
|
|
#include "../src/foundation/compat.h"
|
|
#include "test_framework.h"
|
|
#include "discover/discover.h"
|
|
|
|
/* ── Extension-based detection ─────────────────────────────────── */
|
|
|
|
TEST(lang_ext_go) {
|
|
ASSERT_EQ(cbm_language_for_extension(".go"), CBM_LANG_GO);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_python) {
|
|
ASSERT_EQ(cbm_language_for_extension(".py"), CBM_LANG_PYTHON);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_javascript) {
|
|
ASSERT_EQ(cbm_language_for_extension(".js"), CBM_LANG_JAVASCRIPT);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_jsx) {
|
|
ASSERT_EQ(cbm_language_for_extension(".jsx"), CBM_LANG_JAVASCRIPT);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_typescript) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ts"), CBM_LANG_TYPESCRIPT);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_tsx) {
|
|
ASSERT_EQ(cbm_language_for_extension(".tsx"), CBM_LANG_TSX);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_rust) {
|
|
ASSERT_EQ(cbm_language_for_extension(".rs"), CBM_LANG_RUST);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_java) {
|
|
ASSERT_EQ(cbm_language_for_extension(".java"), CBM_LANG_JAVA);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cpp) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cpp"), CBM_LANG_CPP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_hpp) {
|
|
ASSERT_EQ(cbm_language_for_extension(".hpp"), CBM_LANG_CPP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cc) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cc"), CBM_LANG_CPP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cxx) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cxx"), CBM_LANG_CPP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_hxx) {
|
|
ASSERT_EQ(cbm_language_for_extension(".hxx"), CBM_LANG_CPP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_hh) {
|
|
ASSERT_EQ(cbm_language_for_extension(".hh"), CBM_LANG_CPP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_h) {
|
|
ASSERT_EQ(cbm_language_for_extension(".h"), CBM_LANG_CPP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_ixx) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ixx"), CBM_LANG_CPP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_csharp) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cs"), CBM_LANG_CSHARP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_php) {
|
|
ASSERT_EQ(cbm_language_for_extension(".php"), CBM_LANG_PHP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_lua) {
|
|
ASSERT_EQ(cbm_language_for_extension(".lua"), CBM_LANG_LUA);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_scala) {
|
|
ASSERT_EQ(cbm_language_for_extension(".scala"), CBM_LANG_SCALA);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_sc) {
|
|
ASSERT_EQ(cbm_language_for_extension(".sc"), CBM_LANG_SCALA);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_kotlin) {
|
|
ASSERT_EQ(cbm_language_for_extension(".kt"), CBM_LANG_KOTLIN);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_kts) {
|
|
ASSERT_EQ(cbm_language_for_extension(".kts"), CBM_LANG_KOTLIN);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_ruby) {
|
|
ASSERT_EQ(cbm_language_for_extension(".rb"), CBM_LANG_RUBY);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_rake) {
|
|
ASSERT_EQ(cbm_language_for_extension(".rake"), CBM_LANG_RUBY);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_gemspec) {
|
|
ASSERT_EQ(cbm_language_for_extension(".gemspec"), CBM_LANG_RUBY);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_c) {
|
|
ASSERT_EQ(cbm_language_for_extension(".c"), CBM_LANG_C);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_bash) {
|
|
ASSERT_EQ(cbm_language_for_extension(".sh"), CBM_LANG_BASH);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_bash2) {
|
|
ASSERT_EQ(cbm_language_for_extension(".bash"), CBM_LANG_BASH);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_zig) {
|
|
ASSERT_EQ(cbm_language_for_extension(".zig"), CBM_LANG_ZIG);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_elixir) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ex"), CBM_LANG_ELIXIR);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_exs) {
|
|
ASSERT_EQ(cbm_language_for_extension(".exs"), CBM_LANG_ELIXIR);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_haskell) {
|
|
ASSERT_EQ(cbm_language_for_extension(".hs"), CBM_LANG_HASKELL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_ocaml) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ml"), CBM_LANG_OCAML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_mli) {
|
|
ASSERT_EQ(cbm_language_for_extension(".mli"), CBM_LANG_OCAML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_swift) {
|
|
ASSERT_EQ(cbm_language_for_extension(".swift"), CBM_LANG_SWIFT);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_dart) {
|
|
ASSERT_EQ(cbm_language_for_extension(".dart"), CBM_LANG_DART);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_perl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".pl"), CBM_LANG_PERL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_pm) {
|
|
ASSERT_EQ(cbm_language_for_extension(".pm"), CBM_LANG_PERL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_groovy) {
|
|
ASSERT_EQ(cbm_language_for_extension(".groovy"), CBM_LANG_GROOVY);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_gradle) {
|
|
ASSERT_EQ(cbm_language_for_extension(".gradle"), CBM_LANG_GROOVY);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_erlang) {
|
|
ASSERT_EQ(cbm_language_for_extension(".erl"), CBM_LANG_ERLANG);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_r) {
|
|
ASSERT_EQ(cbm_language_for_extension(".r"), CBM_LANG_R);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_R) {
|
|
ASSERT_EQ(cbm_language_for_extension(".R"), CBM_LANG_R);
|
|
PASS();
|
|
}
|
|
|
|
/* Tier 2 programming */
|
|
TEST(lang_ext_clojure) {
|
|
ASSERT_EQ(cbm_language_for_extension(".clj"), CBM_LANG_CLOJURE);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cljs) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cljs"), CBM_LANG_CLOJURE);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cljc) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cljc"), CBM_LANG_CLOJURE);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_fsharp) {
|
|
ASSERT_EQ(cbm_language_for_extension(".fs"), CBM_LANG_FSHARP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_fsi) {
|
|
ASSERT_EQ(cbm_language_for_extension(".fsi"), CBM_LANG_FSHARP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_fsx) {
|
|
ASSERT_EQ(cbm_language_for_extension(".fsx"), CBM_LANG_FSHARP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_julia) {
|
|
ASSERT_EQ(cbm_language_for_extension(".jl"), CBM_LANG_JULIA);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_vim) {
|
|
ASSERT_EQ(cbm_language_for_extension(".vim"), CBM_LANG_VIMSCRIPT);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_nix) {
|
|
ASSERT_EQ(cbm_language_for_extension(".nix"), CBM_LANG_NIX);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_commonlisp) {
|
|
ASSERT_EQ(cbm_language_for_extension(".lisp"), CBM_LANG_COMMONLISP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_lsp) {
|
|
ASSERT_EQ(cbm_language_for_extension(".lsp"), CBM_LANG_COMMONLISP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cl"), CBM_LANG_COMMONLISP);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_elm) {
|
|
ASSERT_EQ(cbm_language_for_extension(".elm"), CBM_LANG_ELM);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_fortran) {
|
|
ASSERT_EQ(cbm_language_for_extension(".f90"), CBM_LANG_FORTRAN);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_f95) {
|
|
ASSERT_EQ(cbm_language_for_extension(".f95"), CBM_LANG_FORTRAN);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_f03) {
|
|
ASSERT_EQ(cbm_language_for_extension(".f03"), CBM_LANG_FORTRAN);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_f08) {
|
|
ASSERT_EQ(cbm_language_for_extension(".f08"), CBM_LANG_FORTRAN);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cuda) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cu"), CBM_LANG_CUDA);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cuh) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cuh"), CBM_LANG_CUDA);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cobol) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cob"), CBM_LANG_COBOL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cbl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cbl"), CBM_LANG_COBOL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_verilog) {
|
|
ASSERT_EQ(cbm_language_for_extension(".v"), CBM_LANG_VERILOG);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_sv) {
|
|
ASSERT_EQ(cbm_language_for_extension(".sv"), CBM_LANG_VERILOG);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_emacslisp) {
|
|
ASSERT_EQ(cbm_language_for_extension(".el"), CBM_LANG_EMACSLISP);
|
|
PASS();
|
|
}
|
|
|
|
/* Scientific/math */
|
|
TEST(lang_ext_matlab) {
|
|
ASSERT_EQ(cbm_language_for_extension(".matlab"), CBM_LANG_MATLAB);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_mlx) {
|
|
ASSERT_EQ(cbm_language_for_extension(".mlx"), CBM_LANG_MATLAB);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_lean) {
|
|
ASSERT_EQ(cbm_language_for_extension(".lean"), CBM_LANG_LEAN);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_form) {
|
|
ASSERT_EQ(cbm_language_for_extension(".frm"), CBM_LANG_FORM);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_prc) {
|
|
ASSERT_EQ(cbm_language_for_extension(".prc"), CBM_LANG_FORM);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_magma) {
|
|
ASSERT_EQ(cbm_language_for_extension(".mag"), CBM_LANG_MAGMA);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_magma2) {
|
|
ASSERT_EQ(cbm_language_for_extension(".magma"), CBM_LANG_MAGMA);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_wolfram) {
|
|
ASSERT_EQ(cbm_language_for_extension(".wl"), CBM_LANG_WOLFRAM);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_wls) {
|
|
ASSERT_EQ(cbm_language_for_extension(".wls"), CBM_LANG_WOLFRAM);
|
|
PASS();
|
|
}
|
|
|
|
/* Helper languages */
|
|
TEST(lang_ext_html) {
|
|
ASSERT_EQ(cbm_language_for_extension(".html"), CBM_LANG_HTML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_htm) {
|
|
ASSERT_EQ(cbm_language_for_extension(".htm"), CBM_LANG_HTML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_css) {
|
|
ASSERT_EQ(cbm_language_for_extension(".css"), CBM_LANG_CSS);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_scss) {
|
|
ASSERT_EQ(cbm_language_for_extension(".scss"), CBM_LANG_SCSS);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_yaml) {
|
|
ASSERT_EQ(cbm_language_for_extension(".yml"), CBM_LANG_YAML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_yaml2) {
|
|
ASSERT_EQ(cbm_language_for_extension(".yaml"), CBM_LANG_YAML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_toml) {
|
|
ASSERT_EQ(cbm_language_for_extension(".toml"), CBM_LANG_TOML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_hcl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".tf"), CBM_LANG_HCL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_hcl2) {
|
|
ASSERT_EQ(cbm_language_for_extension(".hcl"), CBM_LANG_HCL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_sql) {
|
|
ASSERT_EQ(cbm_language_for_extension(".sql"), CBM_LANG_SQL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_dockerfile) {
|
|
ASSERT_EQ(cbm_language_for_extension(".dockerfile"), CBM_LANG_DOCKERFILE);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_json) {
|
|
ASSERT_EQ(cbm_language_for_extension(".json"), CBM_LANG_JSON);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_xml) {
|
|
ASSERT_EQ(cbm_language_for_extension(".xml"), CBM_LANG_XML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_xsl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".xsl"), CBM_LANG_XML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_xsd) {
|
|
ASSERT_EQ(cbm_language_for_extension(".xsd"), CBM_LANG_XML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_svg) {
|
|
ASSERT_EQ(cbm_language_for_extension(".svg"), CBM_LANG_XML);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_markdown) {
|
|
ASSERT_EQ(cbm_language_for_extension(".md"), CBM_LANG_MARKDOWN);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_mdx) {
|
|
ASSERT_EQ(cbm_language_for_extension(".mdx"), CBM_LANG_MARKDOWN);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_makefile) {
|
|
ASSERT_EQ(cbm_language_for_extension(".mk"), CBM_LANG_MAKEFILE);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cmake) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cmake"), CBM_LANG_CMAKE);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_protobuf) {
|
|
ASSERT_EQ(cbm_language_for_extension(".proto"), CBM_LANG_PROTOBUF);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_graphql) {
|
|
ASSERT_EQ(cbm_language_for_extension(".graphql"), CBM_LANG_GRAPHQL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_gql) {
|
|
ASSERT_EQ(cbm_language_for_extension(".gql"), CBM_LANG_GRAPHQL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_vue) {
|
|
ASSERT_EQ(cbm_language_for_extension(".vue"), CBM_LANG_VUE);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_svelte) {
|
|
ASSERT_EQ(cbm_language_for_extension(".svelte"), CBM_LANG_SVELTE);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_meson) {
|
|
ASSERT_EQ(cbm_language_for_extension(".meson"), CBM_LANG_MESON);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_glsl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".glsl"), CBM_LANG_GLSL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_vert) {
|
|
ASSERT_EQ(cbm_language_for_extension(".vert"), CBM_LANG_GLSL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_frag) {
|
|
ASSERT_EQ(cbm_language_for_extension(".frag"), CBM_LANG_GLSL);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_ini) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ini"), CBM_LANG_INI);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_cfg) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cfg"), CBM_LANG_INI);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_conf) {
|
|
ASSERT_EQ(cbm_language_for_extension(".conf"), CBM_LANG_INI);
|
|
PASS();
|
|
}
|
|
|
|
/* Unknown extension */
|
|
TEST(lang_ext_unknown) {
|
|
ASSERT_EQ(cbm_language_for_extension(".xyz"), CBM_LANG_COUNT);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_null) {
|
|
ASSERT_EQ(cbm_language_for_extension(""), CBM_LANG_COUNT);
|
|
PASS();
|
|
}
|
|
|
|
/* ── Filename-based detection ──────────────────────────────────── */
|
|
|
|
TEST(lang_fn_makefile) {
|
|
ASSERT_EQ(cbm_language_for_filename("Makefile"), CBM_LANG_MAKEFILE);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_gnumakefile) {
|
|
ASSERT_EQ(cbm_language_for_filename("GNUmakefile"), CBM_LANG_MAKEFILE);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_makefile_lower) {
|
|
ASSERT_EQ(cbm_language_for_filename("makefile"), CBM_LANG_MAKEFILE);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_cmake) {
|
|
ASSERT_EQ(cbm_language_for_filename("CMakeLists.txt"), CBM_LANG_CMAKE);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_dockerfile) {
|
|
ASSERT_EQ(cbm_language_for_filename("Dockerfile"), CBM_LANG_DOCKERFILE);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_meson_build) {
|
|
ASSERT_EQ(cbm_language_for_filename("meson.build"), CBM_LANG_MESON);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_meson_opts) {
|
|
ASSERT_EQ(cbm_language_for_filename("meson.options"), CBM_LANG_MESON);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_meson_opts_txt) {
|
|
ASSERT_EQ(cbm_language_for_filename("meson_options.txt"), CBM_LANG_MESON);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_vimrc) {
|
|
ASSERT_EQ(cbm_language_for_filename(".vimrc"), CBM_LANG_VIMSCRIPT);
|
|
PASS();
|
|
}
|
|
|
|
/* Filename with extension falls through to extension lookup */
|
|
TEST(lang_fn_main_go) {
|
|
ASSERT_EQ(cbm_language_for_filename("main.go"), CBM_LANG_GO);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_test_py) {
|
|
ASSERT_EQ(cbm_language_for_filename("test.py"), CBM_LANG_PYTHON);
|
|
PASS();
|
|
}
|
|
TEST(lang_fn_unknown) {
|
|
ASSERT_EQ(cbm_language_for_filename("README"), CBM_LANG_COUNT);
|
|
PASS();
|
|
}
|
|
|
|
/* ── Language name ─────────────────────────────────────────────── */
|
|
|
|
TEST(lang_name_go) {
|
|
ASSERT_STR_EQ(cbm_language_name(CBM_LANG_GO), "Go");
|
|
PASS();
|
|
}
|
|
TEST(lang_name_python) {
|
|
ASSERT_STR_EQ(cbm_language_name(CBM_LANG_PYTHON), "Python");
|
|
PASS();
|
|
}
|
|
TEST(lang_name_cpp) {
|
|
ASSERT_STR_EQ(cbm_language_name(CBM_LANG_CPP), "C++");
|
|
PASS();
|
|
}
|
|
TEST(lang_name_csharp) {
|
|
ASSERT_STR_EQ(cbm_language_name(CBM_LANG_CSHARP), "C#");
|
|
PASS();
|
|
}
|
|
TEST(lang_name_unknown) {
|
|
ASSERT_STR_EQ(cbm_language_name(CBM_LANG_COUNT), "Unknown");
|
|
PASS();
|
|
}
|
|
|
|
/* ── .m disambiguation ─────────────────────────────────────────── */
|
|
|
|
/* These tests need temp files with content markers */
|
|
TEST(lang_m_objc) {
|
|
/* Write a temp file with Objective-C markers */
|
|
char path[256]; snprintf(path, sizeof(path), "%s/test_lang_objc.m", cbm_tmpdir());
|
|
FILE *f = fopen(path, "w");
|
|
ASSERT_NOT_NULL(f);
|
|
fprintf(f, "#import <Foundation/Foundation.h>\n@interface Foo : NSObject\n@end\n");
|
|
fclose(f);
|
|
|
|
ASSERT_EQ(cbm_disambiguate_m(path), CBM_LANG_OBJC);
|
|
remove(path);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_m_magma) {
|
|
char path[256]; snprintf(path, sizeof(path), "%s/test_lang_magma.m", cbm_tmpdir());
|
|
FILE *f = fopen(path, "w");
|
|
ASSERT_NOT_NULL(f);
|
|
fprintf(f, "function MyFunc(x)\n return x^2;\nend function;\n");
|
|
fclose(f);
|
|
|
|
ASSERT_EQ(cbm_disambiguate_m(path), CBM_LANG_MAGMA);
|
|
remove(path);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_m_matlab) {
|
|
char path[256]; snprintf(path, sizeof(path), "%s/test_lang_matlab.m", cbm_tmpdir());
|
|
FILE *f = fopen(path, "w");
|
|
ASSERT_NOT_NULL(f);
|
|
fprintf(f, "function y = square(x)\n y = x.^2;\nend\n");
|
|
fclose(f);
|
|
|
|
ASSERT_EQ(cbm_disambiguate_m(path), CBM_LANG_MATLAB);
|
|
remove(path);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_m_default_on_read_fail) {
|
|
/* Non-existent file defaults to MATLAB */
|
|
ASSERT_EQ(cbm_disambiguate_m("/tmp/nonexistent_file_12345.m"), CBM_LANG_MATLAB);
|
|
PASS();
|
|
}
|
|
|
|
/* --- Ported from lang_test.go: TestForLanguage --- */
|
|
TEST(lang_all_have_names) {
|
|
/* Every language enum value from 0 to CBM_LANG_COUNT-1
|
|
* should have a non-"Unknown" name. */
|
|
for (int i = 0; i < CBM_LANG_COUNT; i++) {
|
|
const char *name = cbm_language_name((CBMLanguage)i);
|
|
ASSERT_NOT_NULL(name);
|
|
ASSERT_TRUE(strcmp(name, "Unknown") != 0);
|
|
}
|
|
PASS();
|
|
}
|
|
|
|
/* ── Suite ─────────────────────────────────────────────────────── */
|
|
|
|
SUITE(language) {
|
|
/* Extension: Tier 1 programming */
|
|
RUN_TEST(lang_ext_go);
|
|
RUN_TEST(lang_ext_python);
|
|
RUN_TEST(lang_ext_javascript);
|
|
RUN_TEST(lang_ext_jsx);
|
|
RUN_TEST(lang_ext_typescript);
|
|
RUN_TEST(lang_ext_tsx);
|
|
RUN_TEST(lang_ext_rust);
|
|
RUN_TEST(lang_ext_java);
|
|
RUN_TEST(lang_ext_cpp);
|
|
RUN_TEST(lang_ext_hpp);
|
|
RUN_TEST(lang_ext_cc);
|
|
RUN_TEST(lang_ext_cxx);
|
|
RUN_TEST(lang_ext_hxx);
|
|
RUN_TEST(lang_ext_hh);
|
|
RUN_TEST(lang_ext_h);
|
|
RUN_TEST(lang_ext_ixx);
|
|
RUN_TEST(lang_ext_csharp);
|
|
RUN_TEST(lang_ext_php);
|
|
RUN_TEST(lang_ext_lua);
|
|
RUN_TEST(lang_ext_scala);
|
|
RUN_TEST(lang_ext_sc);
|
|
RUN_TEST(lang_ext_kotlin);
|
|
RUN_TEST(lang_ext_kts);
|
|
RUN_TEST(lang_ext_ruby);
|
|
RUN_TEST(lang_ext_rake);
|
|
RUN_TEST(lang_ext_gemspec);
|
|
RUN_TEST(lang_ext_c);
|
|
RUN_TEST(lang_ext_bash);
|
|
RUN_TEST(lang_ext_bash2);
|
|
RUN_TEST(lang_ext_zig);
|
|
RUN_TEST(lang_ext_elixir);
|
|
RUN_TEST(lang_ext_exs);
|
|
RUN_TEST(lang_ext_haskell);
|
|
RUN_TEST(lang_ext_ocaml);
|
|
RUN_TEST(lang_ext_mli);
|
|
RUN_TEST(lang_ext_swift);
|
|
RUN_TEST(lang_ext_dart);
|
|
RUN_TEST(lang_ext_perl);
|
|
RUN_TEST(lang_ext_pm);
|
|
RUN_TEST(lang_ext_groovy);
|
|
RUN_TEST(lang_ext_gradle);
|
|
RUN_TEST(lang_ext_erlang);
|
|
RUN_TEST(lang_ext_r);
|
|
RUN_TEST(lang_ext_R);
|
|
|
|
/* Extension: Tier 2 programming */
|
|
RUN_TEST(lang_ext_clojure);
|
|
RUN_TEST(lang_ext_cljs);
|
|
RUN_TEST(lang_ext_cljc);
|
|
RUN_TEST(lang_ext_fsharp);
|
|
RUN_TEST(lang_ext_fsi);
|
|
RUN_TEST(lang_ext_fsx);
|
|
RUN_TEST(lang_ext_julia);
|
|
RUN_TEST(lang_ext_vim);
|
|
RUN_TEST(lang_ext_nix);
|
|
RUN_TEST(lang_ext_commonlisp);
|
|
RUN_TEST(lang_ext_lsp);
|
|
RUN_TEST(lang_ext_cl);
|
|
RUN_TEST(lang_ext_elm);
|
|
RUN_TEST(lang_ext_fortran);
|
|
RUN_TEST(lang_ext_f95);
|
|
RUN_TEST(lang_ext_f03);
|
|
RUN_TEST(lang_ext_f08);
|
|
RUN_TEST(lang_ext_cuda);
|
|
RUN_TEST(lang_ext_cuh);
|
|
RUN_TEST(lang_ext_cobol);
|
|
RUN_TEST(lang_ext_cbl);
|
|
RUN_TEST(lang_ext_verilog);
|
|
RUN_TEST(lang_ext_sv);
|
|
RUN_TEST(lang_ext_emacslisp);
|
|
|
|
/* Extension: Scientific/math */
|
|
RUN_TEST(lang_ext_matlab);
|
|
RUN_TEST(lang_ext_mlx);
|
|
RUN_TEST(lang_ext_lean);
|
|
RUN_TEST(lang_ext_form);
|
|
RUN_TEST(lang_ext_prc);
|
|
RUN_TEST(lang_ext_magma);
|
|
RUN_TEST(lang_ext_magma2);
|
|
RUN_TEST(lang_ext_wolfram);
|
|
RUN_TEST(lang_ext_wls);
|
|
|
|
/* Extension: Helper languages */
|
|
RUN_TEST(lang_ext_html);
|
|
RUN_TEST(lang_ext_htm);
|
|
RUN_TEST(lang_ext_css);
|
|
RUN_TEST(lang_ext_scss);
|
|
RUN_TEST(lang_ext_yaml);
|
|
RUN_TEST(lang_ext_yaml2);
|
|
RUN_TEST(lang_ext_toml);
|
|
RUN_TEST(lang_ext_hcl);
|
|
RUN_TEST(lang_ext_hcl2);
|
|
RUN_TEST(lang_ext_sql);
|
|
RUN_TEST(lang_ext_dockerfile);
|
|
RUN_TEST(lang_ext_json);
|
|
RUN_TEST(lang_ext_xml);
|
|
RUN_TEST(lang_ext_xsl);
|
|
RUN_TEST(lang_ext_xsd);
|
|
RUN_TEST(lang_ext_svg);
|
|
RUN_TEST(lang_ext_markdown);
|
|
RUN_TEST(lang_ext_mdx);
|
|
RUN_TEST(lang_ext_makefile);
|
|
RUN_TEST(lang_ext_cmake);
|
|
RUN_TEST(lang_ext_protobuf);
|
|
RUN_TEST(lang_ext_graphql);
|
|
RUN_TEST(lang_ext_gql);
|
|
RUN_TEST(lang_ext_vue);
|
|
RUN_TEST(lang_ext_svelte);
|
|
RUN_TEST(lang_ext_meson);
|
|
RUN_TEST(lang_ext_glsl);
|
|
RUN_TEST(lang_ext_vert);
|
|
RUN_TEST(lang_ext_frag);
|
|
RUN_TEST(lang_ext_ini);
|
|
RUN_TEST(lang_ext_cfg);
|
|
RUN_TEST(lang_ext_conf);
|
|
|
|
/* Unknown/edge cases */
|
|
RUN_TEST(lang_ext_unknown);
|
|
RUN_TEST(lang_ext_null);
|
|
|
|
/* Filename-based */
|
|
RUN_TEST(lang_fn_makefile);
|
|
RUN_TEST(lang_fn_gnumakefile);
|
|
RUN_TEST(lang_fn_makefile_lower);
|
|
RUN_TEST(lang_fn_cmake);
|
|
RUN_TEST(lang_fn_dockerfile);
|
|
RUN_TEST(lang_fn_meson_build);
|
|
RUN_TEST(lang_fn_meson_opts);
|
|
RUN_TEST(lang_fn_meson_opts_txt);
|
|
RUN_TEST(lang_fn_vimrc);
|
|
RUN_TEST(lang_fn_main_go);
|
|
RUN_TEST(lang_fn_test_py);
|
|
RUN_TEST(lang_fn_unknown);
|
|
|
|
/* Language names */
|
|
RUN_TEST(lang_name_go);
|
|
RUN_TEST(lang_name_python);
|
|
RUN_TEST(lang_name_cpp);
|
|
RUN_TEST(lang_name_csharp);
|
|
RUN_TEST(lang_name_unknown);
|
|
|
|
/* .m disambiguation */
|
|
RUN_TEST(lang_m_objc);
|
|
RUN_TEST(lang_m_magma);
|
|
RUN_TEST(lang_m_matlab);
|
|
RUN_TEST(lang_m_default_on_read_fail);
|
|
|
|
/* Go test ports */
|
|
RUN_TEST(lang_all_have_names);
|
|
}
|