1+ use std:: path:: PathBuf ;
2+
3+ use lsp_types:: { DiagnosticSeverity , NumberOrString } ;
4+ use odoo_ls_server:: { S , utils:: PathSanitizer } ;
5+
6+ use crate :: { setup:: setup:: * , test_utils:: { diag_on_line, verify_diagnostics_against_doc} } ;
7+
8+ #[ test]
9+ fn test_ols05000_2_3_py_file ( ) {
10+ let ( mut odoo, config) = setup_server ( true ) ;
11+ let mut session = create_init_session ( & mut odoo, config) ;
12+ let test_addons_path = PathBuf :: from ( env ! ( "CARGO_MANIFEST_DIR" ) ) . join ( "tests" ) . join ( "data" ) . join ( "addons" ) ;
13+ let bikes_py_path = test_addons_path. join ( "module_for_diagnostics" ) . join ( "models" ) . join ( "bike_parts_wheel.py" ) ;
14+ assert ! ( PathBuf :: from( & bikes_py_path) . exists( ) , "Test file does not exist: {}" , bikes_py_path. display( ) ) ;
15+ let bikes_py_diagnostics = get_diagnostics_for_path ( & mut session, & bikes_py_path. sanitize ( ) ) ;
16+ let doc_diags = get_diagnostics_test_comments ( & mut session, & bikes_py_path. sanitize ( ) ) ;
17+ verify_diagnostics_against_doc ( bikes_py_diagnostics, doc_diags) ; // OLS05002 & OLS05003 & OLS05051
18+ }
19+
20+ #[ test]
21+ fn test_ols05000s_xml_file ( ) {
22+ let ( mut odoo, config) = setup_server ( true ) ;
23+ let mut session = create_init_session ( & mut odoo, config) ;
24+ let test_addons_path = PathBuf :: from ( env ! ( "CARGO_MANIFEST_DIR" ) ) . join ( "tests" ) . join ( "data" ) . join ( "addons" ) ;
25+ let bikes_xml_path = test_addons_path. join ( "module_for_diagnostics" ) . join ( "data" ) . join ( "bikes.xml" ) ;
26+ assert ! ( PathBuf :: from( & bikes_xml_path) . exists( ) , "Test file does not exist: {}" , bikes_xml_path. display( ) ) ;
27+ let bikes_xml_diagnostics = get_diagnostics_for_path ( & mut session, & bikes_xml_path. sanitize ( ) ) ;
28+ let check_xml_diag = |ols_code : & str , line : u32 |{
29+ let line_diagnostics = diag_on_line ( & bikes_xml_diagnostics, line) ;
30+ assert_eq ! ( line_diagnostics. len( ) , 1 ) ;
31+ let diag = & line_diagnostics[ 0 ] ;
32+ assert ! ( diag. code. is_some( ) ) ;
33+ let code = match & diag. code {
34+ Some ( NumberOrString :: String ( code) ) => code,
35+ Some ( NumberOrString :: Number ( num) ) => panic ! ( "Unexpected numeric code: {}" , num) ,
36+ None => panic ! ( "Diagnostic code is None" ) ,
37+ } ;
38+ assert ! ( code == & S !( ols_code) ) ;
39+ assert ! ( diag. severity. is_some_and( |s| s == DiagnosticSeverity :: ERROR ) ) ;
40+ } ;
41+ // OLS05001 - Disabled TODO: Re-enable when OLS05001 is implemented
42+ check_xml_diag ( "OLS05003" , 25 ) ;
43+ check_xml_diag ( "OLS05004" , 36 ) ;
44+ check_xml_diag ( "OLS05005" , 38 ) ;
45+ check_xml_diag ( "OLS05006" , 39 ) ;
46+ check_xml_diag ( "OLS05007" , 40 ) ;
47+ check_xml_diag ( "OLS05008" , 41 ) ;
48+ check_xml_diag ( "OLS05009" , 43 ) ;
49+ check_xml_diag ( "OLS05010" , 42 ) ;
50+ check_xml_diag ( "OLS05011" , 45 ) ;
51+ check_xml_diag ( "OLS05012" , 48 ) ;
52+ check_xml_diag ( "OLS05013" , 50 ) ;
53+ check_xml_diag ( "OLS05014" , 51 ) ;
54+ check_xml_diag ( "OLS05015" , 53 ) ;
55+ check_xml_diag ( "OLS05016" , 54 ) ;
56+ check_xml_diag ( "OLS05017" , 55 ) ;
57+ check_xml_diag ( "OLS05018" , 56 ) ;
58+ check_xml_diag ( "OLS05019" , 57 ) ;
59+ check_xml_diag ( "OLS05020" , 58 ) ;
60+ check_xml_diag ( "OLS05021" , 59 ) ;
61+ check_xml_diag ( "OLS05022" , 60 ) ;
62+ check_xml_diag ( "OLS05023" , 61 ) ;
63+ check_xml_diag ( "OLS05024" , 62 ) ;
64+ check_xml_diag ( "OLS05025" , 63 ) ;
65+ check_xml_diag ( "OLS05026" , 64 ) ;
66+ check_xml_diag ( "OLS05027" , 65 ) ;
67+ check_xml_diag ( "OLS05028" , 66 ) ;
68+ check_xml_diag ( "OLS05029" , 67 ) ;
69+ check_xml_diag ( "OLS05030" , 68 ) ;
70+ check_xml_diag ( "OLS05031" , 69 ) ;
71+ check_xml_diag ( "OLS05032" , 70 ) ;
72+ check_xml_diag ( "OLS05036" , 71 ) ;
73+ check_xml_diag ( "OLS05037" , 72 ) ;
74+ check_xml_diag ( "OLS05033" , 74 ) ;
75+ check_xml_diag ( "OLS05034" , 75 ) ;
76+ check_xml_diag ( "OLS05035" , 76 ) ;
77+ // OLS05040 - OLS05043 are never used (removed/replaced)
78+ check_xml_diag ( "OLS05044" , 77 ) ;
79+ check_xml_diag ( "OLS05044" , 78 ) ;
80+ check_xml_diag ( "OLS05045" , 79 ) ;
81+ check_xml_diag ( "OLS05046" , 80 ) ;
82+ check_xml_diag ( "OLS05047" , 81 ) ;
83+ check_xml_diag ( "OLS05038" , 82 ) ;
84+ check_xml_diag ( "OLS05048" , 83 ) ;
85+ check_xml_diag ( "OLS05039" , 84 ) ;
86+ check_xml_diag ( "OLS05051" , 85 ) ;
87+ check_xml_diag ( "OLS05052" , 86 ) ;
88+ check_xml_diag ( "OLS05053" , 87 ) ;
89+ check_xml_diag ( "OLS05054" , 88 ) ;
90+ check_xml_diag ( "OLS05055" , 89 ) ;
91+ check_xml_diag ( "OLS05056" , 90 ) ;
92+ check_xml_diag ( "OLS05057" , 91 ) ;
93+ check_xml_diag ( "OLS05055" , 92 ) ;
94+ check_xml_diag ( "OLS05056" , 93 ) ;
95+ }
96+
97+ #[ test]
98+ fn test_ols05000s_manifest ( ) {
99+ let ( mut odoo, config) = setup_server ( true ) ;
100+ let mut session = create_init_session ( & mut odoo, config) ;
101+ let test_addons_path = PathBuf :: from ( env ! ( "CARGO_MANIFEST_DIR" ) ) . join ( "tests" ) . join ( "data" ) . join ( "addons" ) ;
102+ let bikes_py_path = test_addons_path. join ( "module_for_diagnostics" ) . join ( "__manifest__.py" ) ;
103+ assert ! ( PathBuf :: from( & bikes_py_path) . exists( ) , "Test file does not exist: {}" , bikes_py_path. display( ) ) ;
104+ let bikes_py_diagnostics = get_diagnostics_for_path ( & mut session, & bikes_py_path. sanitize ( ) ) ;
105+ let doc_diags = get_diagnostics_test_comments ( & mut session, & bikes_py_path. sanitize ( ) ) ;
106+ verify_diagnostics_against_doc ( bikes_py_diagnostics, doc_diags) ; // OLS05049 & OLS05050
107+ }
0 commit comments