|
1 | 1 | use phpantom_lsp::composer::{ |
2 | | - normalise_path, parse_autoload_classmap, parse_autoload_files, parse_composer_json, |
3 | | - parse_vendor_autoload_psr4, resolve_class_path, |
| 2 | + extract_require_once_paths, normalise_path, parse_autoload_classmap, parse_autoload_files, |
| 3 | + parse_composer_json, parse_vendor_autoload_psr4, resolve_class_path, |
4 | 4 | }; |
5 | 5 | use std::fs; |
6 | 6 | use std::path::Path; |
@@ -714,6 +714,121 @@ fn test_autoload_files_mixed_vendor_and_basedir() { |
714 | 714 | } |
715 | 715 | } |
716 | 716 |
|
| 717 | +// ─── extract_require_once_paths Tests ─────────────────────────────────────── |
| 718 | + |
| 719 | +#[test] |
| 720 | +fn test_require_once_statement_form() { |
| 721 | + let content = concat!( |
| 722 | + "<?php\n", |
| 723 | + "require_once 'Trustly/exceptions.php';\n", |
| 724 | + "require_once 'Trustly/Data/data.php';\n", |
| 725 | + ); |
| 726 | + let paths = extract_require_once_paths(content); |
| 727 | + assert_eq!(paths.len(), 2); |
| 728 | + assert_eq!(paths[0], "Trustly/exceptions.php"); |
| 729 | + assert_eq!(paths[1], "Trustly/Data/data.php"); |
| 730 | +} |
| 731 | + |
| 732 | +#[test] |
| 733 | +fn test_require_once_function_form() { |
| 734 | + let content = concat!( |
| 735 | + "<?php\n", |
| 736 | + "require_once('Trustly/exceptions.php');\n", |
| 737 | + "require_once('Trustly/Data/data.php');\n", |
| 738 | + ); |
| 739 | + let paths = extract_require_once_paths(content); |
| 740 | + assert_eq!(paths.len(), 2); |
| 741 | + assert_eq!(paths[0], "Trustly/exceptions.php"); |
| 742 | + assert_eq!(paths[1], "Trustly/Data/data.php"); |
| 743 | +} |
| 744 | + |
| 745 | +#[test] |
| 746 | +fn test_require_once_double_quotes() { |
| 747 | + let content = concat!( |
| 748 | + "<?php\n", |
| 749 | + "require_once \"Trustly/exceptions.php\";\n", |
| 750 | + "require_once(\"Trustly/Data/data.php\");\n", |
| 751 | + ); |
| 752 | + let paths = extract_require_once_paths(content); |
| 753 | + assert_eq!(paths.len(), 2); |
| 754 | + assert_eq!(paths[0], "Trustly/exceptions.php"); |
| 755 | + assert_eq!(paths[1], "Trustly/Data/data.php"); |
| 756 | +} |
| 757 | + |
| 758 | +#[test] |
| 759 | +fn test_require_once_mixed_forms() { |
| 760 | + let content = concat!( |
| 761 | + "<?php\n", |
| 762 | + "/**\n", |
| 763 | + " * Main include file for working with the trustly-client-php code.\n", |
| 764 | + " */\n", |
| 765 | + "\n", |
| 766 | + "require_once('Trustly/exceptions.php');\n", |
| 767 | + "require_once('Trustly/Data/data.php');\n", |
| 768 | + "require_once 'Trustly/Api/api.php';\n", |
| 769 | + ); |
| 770 | + let paths = extract_require_once_paths(content); |
| 771 | + assert_eq!(paths.len(), 3); |
| 772 | + assert_eq!(paths[0], "Trustly/exceptions.php"); |
| 773 | + assert_eq!(paths[1], "Trustly/Data/data.php"); |
| 774 | + assert_eq!(paths[2], "Trustly/Api/api.php"); |
| 775 | +} |
| 776 | + |
| 777 | +#[test] |
| 778 | +fn test_require_once_skips_dynamic_expressions() { |
| 779 | + let content = concat!( |
| 780 | + "<?php\n", |
| 781 | + "require_once __DIR__ . '/Trustly/exceptions.php';\n", |
| 782 | + "require_once $path;\n", |
| 783 | + "require_once 'Trustly/Data/data.php';\n", |
| 784 | + ); |
| 785 | + let paths = extract_require_once_paths(content); |
| 786 | + assert_eq!( |
| 787 | + paths.len(), |
| 788 | + 1, |
| 789 | + "Should skip dynamic expressions and only find the string literal" |
| 790 | + ); |
| 791 | + assert_eq!(paths[0], "Trustly/Data/data.php"); |
| 792 | +} |
| 793 | + |
| 794 | +#[test] |
| 795 | +fn test_require_once_ignores_other_includes() { |
| 796 | + let content = concat!( |
| 797 | + "<?php\n", |
| 798 | + "include 'config.php';\n", |
| 799 | + "include_once 'helpers.php';\n", |
| 800 | + "require 'bootstrap.php';\n", |
| 801 | + "require_once 'Trustly/exceptions.php';\n", |
| 802 | + ); |
| 803 | + let paths = extract_require_once_paths(content); |
| 804 | + assert_eq!( |
| 805 | + paths.len(), |
| 806 | + 1, |
| 807 | + "Should only extract require_once, not include/include_once/require" |
| 808 | + ); |
| 809 | + assert_eq!(paths[0], "Trustly/exceptions.php"); |
| 810 | +} |
| 811 | + |
| 812 | +#[test] |
| 813 | +fn test_require_once_empty_file() { |
| 814 | + let content = "<?php\n"; |
| 815 | + let paths = extract_require_once_paths(content); |
| 816 | + assert!(paths.is_empty()); |
| 817 | +} |
| 818 | + |
| 819 | +#[test] |
| 820 | +fn test_require_once_with_extra_whitespace() { |
| 821 | + let content = concat!( |
| 822 | + "<?php\n", |
| 823 | + " require_once ( 'Trustly/exceptions.php' ) ;\n", |
| 824 | + " require_once 'Trustly/Data/data.php' ;\n", |
| 825 | + ); |
| 826 | + let paths = extract_require_once_paths(content); |
| 827 | + assert_eq!(paths.len(), 2); |
| 828 | + assert_eq!(paths[0], "Trustly/exceptions.php"); |
| 829 | + assert_eq!(paths[1], "Trustly/Data/data.php"); |
| 830 | +} |
| 831 | + |
717 | 832 | // ─── autoload_classmap.php tests ──────────────────────────────────────────── |
718 | 833 |
|
719 | 834 | #[test] |
|
0 commit comments