1299 lines
34 KiB
C
1299 lines
34 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();
|
|
}
|
|
/* Issue #197: .mjs (ES modules) / .cjs (CommonJS) were unmapped, so those
|
|
* files were never indexed or searchable. */
|
|
TEST(lang_ext_mjs_cjs) {
|
|
ASSERT_EQ(cbm_language_for_extension(".mjs"), CBM_LANG_JAVASCRIPT);
|
|
ASSERT_EQ(cbm_language_for_extension(".cjs"), CBM_LANG_JAVASCRIPT);
|
|
PASS();
|
|
}
|
|
TEST(lang_ext_mts_cts) {
|
|
ASSERT_EQ(cbm_language_for_extension(".mts"), CBM_LANG_TYPESCRIPT);
|
|
ASSERT_EQ(cbm_language_for_extension(".cts"), CBM_LANG_TYPESCRIPT);
|
|
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();
|
|
}
|
|
|
|
/* issue #258: .blade.php is a built-in compound extension → Blade by default
|
|
* (previously fell through to the single-extension lookup and was mis-typed as
|
|
* PHP). Plain .php still maps to PHP. */
|
|
TEST(lang_fn_blade_php_compound_issue258) {
|
|
ASSERT_EQ(cbm_language_for_filename("login.blade.php"), CBM_LANG_BLADE);
|
|
ASSERT_EQ(cbm_language_for_filename("alert.blade.php"), CBM_LANG_BLADE);
|
|
ASSERT_EQ(cbm_language_for_filename("index.php"), CBM_LANG_PHP);
|
|
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();
|
|
}
|
|
|
|
/* --- New languages (auto-generated) --- */
|
|
TEST(lang_ext_solidity) {
|
|
ASSERT_EQ(cbm_language_for_extension(".sol"), CBM_LANG_SOLIDITY);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_typst) {
|
|
ASSERT_EQ(cbm_language_for_extension(".typ"), CBM_LANG_TYPST);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_gdscript) {
|
|
ASSERT_EQ(cbm_language_for_extension(".gd"), CBM_LANG_GDSCRIPT);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_gleam) {
|
|
ASSERT_EQ(cbm_language_for_extension(".gleam"), CBM_LANG_GLEAM);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_powershell) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ps1"), CBM_LANG_POWERSHELL);
|
|
ASSERT_EQ(cbm_language_for_extension(".psm1"), CBM_LANG_POWERSHELL);
|
|
ASSERT_EQ(cbm_language_for_extension(".psd1"), CBM_LANG_POWERSHELL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_pascal) {
|
|
ASSERT_EQ(cbm_language_for_extension(".pas"), CBM_LANG_PASCAL);
|
|
ASSERT_EQ(cbm_language_for_extension(".lpr"), CBM_LANG_PASCAL);
|
|
ASSERT_EQ(cbm_language_for_extension(".dpr"), CBM_LANG_PASCAL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_d) {
|
|
ASSERT_EQ(cbm_language_for_extension(".d"), CBM_LANG_DLANG);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_nim) {
|
|
/* nim grammar removed — .nim/.nims no longer map to a language */
|
|
ASSERT_EQ(cbm_language_for_extension(".nim"), CBM_LANG_COUNT);
|
|
ASSERT_EQ(cbm_language_for_extension(".nims"), CBM_LANG_COUNT);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_scheme) {
|
|
ASSERT_EQ(cbm_language_for_extension(".scm"), CBM_LANG_SCHEME);
|
|
ASSERT_EQ(cbm_language_for_extension(".ss"), CBM_LANG_SCHEME);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_fennel) {
|
|
ASSERT_EQ(cbm_language_for_extension(".fnl"), CBM_LANG_FENNEL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_fish) {
|
|
ASSERT_EQ(cbm_language_for_extension(".fish"), CBM_LANG_FISH);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_awk) {
|
|
ASSERT_EQ(cbm_language_for_extension(".awk"), CBM_LANG_AWK);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_zsh) {
|
|
ASSERT_EQ(cbm_language_for_extension(".zsh"), CBM_LANG_ZSH);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_tcl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".tcl"), CBM_LANG_TCL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_ada) {
|
|
ASSERT_EQ(cbm_language_for_extension(".adb"), CBM_LANG_ADA);
|
|
ASSERT_EQ(cbm_language_for_extension(".ads"), CBM_LANG_ADA);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_agda) {
|
|
ASSERT_EQ(cbm_language_for_extension(".agda"), CBM_LANG_AGDA);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_racket) {
|
|
ASSERT_EQ(cbm_language_for_extension(".rkt"), CBM_LANG_RACKET);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_odin) {
|
|
ASSERT_EQ(cbm_language_for_extension(".odin"), CBM_LANG_ODIN);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_rescript) {
|
|
ASSERT_EQ(cbm_language_for_extension(".res"), CBM_LANG_RESCRIPT);
|
|
ASSERT_EQ(cbm_language_for_extension(".resi"), CBM_LANG_RESCRIPT);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_purescript) {
|
|
ASSERT_EQ(cbm_language_for_extension(".purs"), CBM_LANG_PURESCRIPT);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_nickel) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ncl"), CBM_LANG_NICKEL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_crystal) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cr"), CBM_LANG_CRYSTAL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_teal) {
|
|
ASSERT_EQ(cbm_language_for_extension(".tl"), CBM_LANG_TEAL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_hare) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ha"), CBM_LANG_HARE);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_pony) {
|
|
ASSERT_EQ(cbm_language_for_extension(".pony"), CBM_LANG_PONY);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_luau) {
|
|
ASSERT_EQ(cbm_language_for_extension(".luau"), CBM_LANG_LUAU);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_qml) {
|
|
ASSERT_EQ(cbm_language_for_extension(".qml"), CBM_LANG_QML);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_cfml) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cfc"), CBM_LANG_CFSCRIPT);
|
|
ASSERT_EQ(cbm_language_for_extension(".cfm"), CBM_LANG_CFML);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_helm_tpl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".tpl"), CBM_LANG_GOTEMPLATE);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_janet) {
|
|
ASSERT_EQ(cbm_language_for_extension(".janet"), CBM_LANG_JANET);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_sway) {
|
|
ASSERT_EQ(cbm_language_for_extension(".sw"), CBM_LANG_SWAY);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_nasm) {
|
|
ASSERT_EQ(cbm_language_for_extension(".nasm"), CBM_LANG_NASM);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_assembly) {
|
|
ASSERT_EQ(cbm_language_for_extension(".s"), CBM_LANG_ASSEMBLY);
|
|
ASSERT_EQ(cbm_language_for_extension(".S"), CBM_LANG_ASSEMBLY);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_astro) {
|
|
ASSERT_EQ(cbm_language_for_extension(".astro"), CBM_LANG_ASTRO);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_gotemplate) {
|
|
ASSERT_EQ(cbm_language_for_extension(".tmpl"), CBM_LANG_GOTEMPLATE);
|
|
ASSERT_EQ(cbm_language_for_extension(".gotmpl"), CBM_LANG_GOTEMPLATE);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_templ) {
|
|
ASSERT_EQ(cbm_language_for_extension(".templ"), CBM_LANG_TEMPL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_liquid) {
|
|
ASSERT_EQ(cbm_language_for_extension(".liquid"), CBM_LANG_LIQUID);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_jinja2) {
|
|
ASSERT_EQ(cbm_language_for_extension(".j2"), CBM_LANG_JINJA2);
|
|
ASSERT_EQ(cbm_language_for_extension(".jinja2"), CBM_LANG_JINJA2);
|
|
ASSERT_EQ(cbm_language_for_extension(".jinja"), CBM_LANG_JINJA2);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_prisma) {
|
|
ASSERT_EQ(cbm_language_for_extension(".prisma"), CBM_LANG_PRISMA);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_hyprlang) {
|
|
ASSERT_EQ(cbm_language_for_extension(".hl"), CBM_LANG_HYPRLANG);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_diff) {
|
|
ASSERT_EQ(cbm_language_for_extension(".diff"), CBM_LANG_DIFF);
|
|
ASSERT_EQ(cbm_language_for_extension(".patch"), CBM_LANG_DIFF);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_wgsl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".wgsl"), CBM_LANG_WGSL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_kdl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".kdl"), CBM_LANG_KDL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_json5) {
|
|
ASSERT_EQ(cbm_language_for_extension(".json5"), CBM_LANG_JSON5);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_jsonnet) {
|
|
ASSERT_EQ(cbm_language_for_extension(".jsonnet"), CBM_LANG_JSONNET);
|
|
ASSERT_EQ(cbm_language_for_extension(".libsonnet"), CBM_LANG_JSONNET);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_ron) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ron"), CBM_LANG_RON);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_thrift) {
|
|
ASSERT_EQ(cbm_language_for_extension(".thrift"), CBM_LANG_THRIFT);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_capnp) {
|
|
ASSERT_EQ(cbm_language_for_extension(".capnp"), CBM_LANG_CAPNP);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_properties) {
|
|
ASSERT_EQ(cbm_language_for_extension(".properties"), CBM_LANG_PROPERTIES);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_bibtex) {
|
|
ASSERT_EQ(cbm_language_for_extension(".bib"), CBM_LANG_BIBTEX);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_starlark) {
|
|
ASSERT_EQ(cbm_language_for_extension(".star"), CBM_LANG_STARLARK);
|
|
ASSERT_EQ(cbm_language_for_extension(".bzl"), CBM_LANG_STARLARK);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_bicep) {
|
|
ASSERT_EQ(cbm_language_for_extension(".bicep"), CBM_LANG_BICEP);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_csv) {
|
|
ASSERT_EQ(cbm_language_for_extension(".csv"), CBM_LANG_CSV);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_hlsl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".hlsl"), CBM_LANG_HLSL);
|
|
ASSERT_EQ(cbm_language_for_extension(".hlsli"), CBM_LANG_HLSL);
|
|
ASSERT_EQ(cbm_language_for_extension(".fx"), CBM_LANG_HLSL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_vhdl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".vhd"), CBM_LANG_VHDL);
|
|
ASSERT_EQ(cbm_language_for_extension(".vhdl"), CBM_LANG_VHDL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_devicetree) {
|
|
ASSERT_EQ(cbm_language_for_extension(".dts"), CBM_LANG_DEVICETREE);
|
|
ASSERT_EQ(cbm_language_for_extension(".dtsi"), CBM_LANG_DEVICETREE);
|
|
ASSERT_EQ(cbm_language_for_extension(".overlay"), CBM_LANG_DEVICETREE);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_linkerscript) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ld"), CBM_LANG_LINKERSCRIPT);
|
|
ASSERT_EQ(cbm_language_for_extension(".lds"), CBM_LANG_LINKERSCRIPT);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_gn) {
|
|
ASSERT_EQ(cbm_language_for_extension(".gn"), CBM_LANG_GN);
|
|
ASSERT_EQ(cbm_language_for_extension(".gni"), CBM_LANG_GN);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_bitbake) {
|
|
ASSERT_EQ(cbm_language_for_extension(".bb"), CBM_LANG_BITBAKE);
|
|
ASSERT_EQ(cbm_language_for_extension(".bbclass"), CBM_LANG_BITBAKE);
|
|
ASSERT_EQ(cbm_language_for_extension(".bbappend"), CBM_LANG_BITBAKE);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_smali) {
|
|
ASSERT_EQ(cbm_language_for_extension(".smali"), CBM_LANG_SMALI);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_tablegen) {
|
|
ASSERT_EQ(cbm_language_for_extension(".td"), CBM_LANG_TABLEGEN);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_ispc) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ispc"), CBM_LANG_ISPC);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_cairo) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cairo"), CBM_LANG_CAIRO);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_move) {
|
|
ASSERT_EQ(cbm_language_for_extension(".move"), CBM_LANG_MOVE);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_mojo) {
|
|
ASSERT_EQ(cbm_language_for_extension(".mojo"), CBM_LANG_MOJO);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_squirrel) {
|
|
ASSERT_EQ(cbm_language_for_extension(".nut"), CBM_LANG_SQUIRREL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_func) {
|
|
ASSERT_EQ(cbm_language_for_extension(".fc"), CBM_LANG_FUNC);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_rst) {
|
|
ASSERT_EQ(cbm_language_for_extension(".rst"), CBM_LANG_RST);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_beancount) {
|
|
ASSERT_EQ(cbm_language_for_extension(".beancount"), CBM_LANG_BEANCOUNT);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_mermaid) {
|
|
ASSERT_EQ(cbm_language_for_extension(".mmd"), CBM_LANG_MERMAID);
|
|
ASSERT_EQ(cbm_language_for_extension(".mermaid"), CBM_LANG_MERMAID);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_puppet) {
|
|
ASSERT_EQ(cbm_language_for_extension(".pp"), CBM_LANG_PUPPET);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_po) {
|
|
ASSERT_EQ(cbm_language_for_extension(".po"), CBM_LANG_PO);
|
|
ASSERT_EQ(cbm_language_for_extension(".pot"), CBM_LANG_PO);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_slang) {
|
|
ASSERT_EQ(cbm_language_for_extension(".slang"), CBM_LANG_SLANG);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_llvm) {
|
|
ASSERT_EQ(cbm_language_for_extension(".ll"), CBM_LANG_LLVM_IR);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_smithy) {
|
|
ASSERT_EQ(cbm_language_for_extension(".smithy"), CBM_LANG_SMITHY);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_wit) {
|
|
ASSERT_EQ(cbm_language_for_extension(".wit"), CBM_LANG_WIT);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_tlaplus) {
|
|
ASSERT_EQ(cbm_language_for_extension(".tla"), CBM_LANG_TLAPLUS);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_pkl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".pkl"), CBM_LANG_PKL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_apex) {
|
|
ASSERT_EQ(cbm_language_for_extension(".cls"), CBM_LANG_APEX);
|
|
ASSERT_EQ(cbm_language_for_extension(".trigger"), CBM_LANG_APEX);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_soql) {
|
|
ASSERT_EQ(cbm_language_for_extension(".soql"), CBM_LANG_SOQL);
|
|
PASS();
|
|
}
|
|
|
|
TEST(lang_ext_sosl) {
|
|
ASSERT_EQ(cbm_language_for_extension(".sosl"), CBM_LANG_SOSL);
|
|
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_mjs_cjs);
|
|
RUN_TEST(lang_ext_mts_cts);
|
|
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_blade_php_compound_issue258);
|
|
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 */
|
|
/* New languages */
|
|
RUN_TEST(lang_ext_solidity);
|
|
RUN_TEST(lang_ext_typst);
|
|
RUN_TEST(lang_ext_gdscript);
|
|
RUN_TEST(lang_ext_gleam);
|
|
RUN_TEST(lang_ext_powershell);
|
|
RUN_TEST(lang_ext_pascal);
|
|
RUN_TEST(lang_ext_d);
|
|
RUN_TEST(lang_ext_nim);
|
|
RUN_TEST(lang_ext_scheme);
|
|
RUN_TEST(lang_ext_fennel);
|
|
RUN_TEST(lang_ext_fish);
|
|
RUN_TEST(lang_ext_awk);
|
|
RUN_TEST(lang_ext_zsh);
|
|
RUN_TEST(lang_ext_tcl);
|
|
RUN_TEST(lang_ext_ada);
|
|
RUN_TEST(lang_ext_agda);
|
|
RUN_TEST(lang_ext_racket);
|
|
RUN_TEST(lang_ext_odin);
|
|
RUN_TEST(lang_ext_rescript);
|
|
RUN_TEST(lang_ext_purescript);
|
|
RUN_TEST(lang_ext_nickel);
|
|
RUN_TEST(lang_ext_crystal);
|
|
RUN_TEST(lang_ext_teal);
|
|
RUN_TEST(lang_ext_hare);
|
|
RUN_TEST(lang_ext_pony);
|
|
RUN_TEST(lang_ext_luau);
|
|
RUN_TEST(lang_ext_qml);
|
|
RUN_TEST(lang_ext_cfml);
|
|
RUN_TEST(lang_ext_helm_tpl);
|
|
RUN_TEST(lang_ext_janet);
|
|
RUN_TEST(lang_ext_sway);
|
|
RUN_TEST(lang_ext_nasm);
|
|
RUN_TEST(lang_ext_assembly);
|
|
RUN_TEST(lang_ext_astro);
|
|
RUN_TEST(lang_ext_gotemplate);
|
|
RUN_TEST(lang_ext_templ);
|
|
RUN_TEST(lang_ext_liquid);
|
|
RUN_TEST(lang_ext_jinja2);
|
|
RUN_TEST(lang_ext_prisma);
|
|
RUN_TEST(lang_ext_hyprlang);
|
|
RUN_TEST(lang_ext_diff);
|
|
RUN_TEST(lang_ext_wgsl);
|
|
RUN_TEST(lang_ext_kdl);
|
|
RUN_TEST(lang_ext_json5);
|
|
RUN_TEST(lang_ext_jsonnet);
|
|
RUN_TEST(lang_ext_ron);
|
|
RUN_TEST(lang_ext_thrift);
|
|
RUN_TEST(lang_ext_capnp);
|
|
RUN_TEST(lang_ext_properties);
|
|
RUN_TEST(lang_ext_bibtex);
|
|
RUN_TEST(lang_ext_starlark);
|
|
RUN_TEST(lang_ext_bicep);
|
|
RUN_TEST(lang_ext_csv);
|
|
RUN_TEST(lang_ext_hlsl);
|
|
RUN_TEST(lang_ext_vhdl);
|
|
RUN_TEST(lang_ext_devicetree);
|
|
RUN_TEST(lang_ext_linkerscript);
|
|
RUN_TEST(lang_ext_gn);
|
|
RUN_TEST(lang_ext_bitbake);
|
|
RUN_TEST(lang_ext_smali);
|
|
RUN_TEST(lang_ext_tablegen);
|
|
RUN_TEST(lang_ext_ispc);
|
|
RUN_TEST(lang_ext_cairo);
|
|
RUN_TEST(lang_ext_move);
|
|
RUN_TEST(lang_ext_mojo);
|
|
RUN_TEST(lang_ext_squirrel);
|
|
RUN_TEST(lang_ext_func);
|
|
RUN_TEST(lang_ext_rst);
|
|
RUN_TEST(lang_ext_beancount);
|
|
RUN_TEST(lang_ext_mermaid);
|
|
RUN_TEST(lang_ext_puppet);
|
|
RUN_TEST(lang_ext_po);
|
|
RUN_TEST(lang_ext_slang);
|
|
RUN_TEST(lang_ext_llvm);
|
|
RUN_TEST(lang_ext_smithy);
|
|
RUN_TEST(lang_ext_wit);
|
|
RUN_TEST(lang_ext_tlaplus);
|
|
RUN_TEST(lang_ext_pkl);
|
|
RUN_TEST(lang_ext_apex);
|
|
RUN_TEST(lang_ext_soql);
|
|
RUN_TEST(lang_ext_sosl);
|
|
|
|
RUN_TEST(lang_all_have_names);
|
|
}
|