Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 11
Línea 32... Línea 32...
32
     * this is defined here to annoy devs that try to add more without any thinking,
32
     * this is defined here to annoy devs that try to add more without any thinking,
33
     * always verify that it does not collide with any existing add-on modules and subplugins!!!
33
     * always verify that it does not collide with any existing add-on modules and subplugins!!!
34
     */
34
     */
35
    const SUBSYSTEMCOUNT = 77;
35
    const SUBSYSTEMCOUNT = 77;
Línea -... Línea 36...
-
 
36
 
-
 
37
    #[\Override]
-
 
38
    public function tearDown(): void {
-
 
39
        parent::tearDown();
-
 
40
 
-
 
41
        \core_component::reset();
-
 
42
    }
36
 
43
 
37
    public function test_get_core_subsystems(): void {
44
    public function test_get_core_subsystems(): void {
Línea 38... Línea 45...
38
        global $CFG;
45
        global $CFG;
Línea 728... Línea 735...
728
        $psr4 = [
735
        $psr4 = [
729
          'psr4'      => 'lib/tests/fixtures/component/psr4',
736
          'psr4'      => 'lib/tests/fixtures/component/psr4',
730
          'overlap'   => 'lib/tests/fixtures/component/overlap',
737
          'overlap'   => 'lib/tests/fixtures/component/overlap',
731
        ];
738
        ];
732
        return [
739
        return [
733
          'PSR-0 Classloading - Root' => [
740
            'PSR-0 Classloading - Root' => [
734
              'psr0' => $psr0,
741
                'psr0' => $psr0,
735
              'psr4' => $psr4,
742
                'psr4' => $psr4,
736
              'classname' => 'psr0_main',
743
                'classname' => 'psr0_main',
737
              'includedfiles' => "{$directory}psr0/main.php",
744
                'includedfiles' => "{$directory}psr0/main.php",
738
          ],
745
            ],
739
          'PSR-0 Classloading - Sub namespace - underscores' => [
746
            'PSR-0 Classloading - Sub namespace - underscores' => [
740
              'psr0' => $psr0,
747
                'psr0' => $psr0,
741
              'psr4' => $psr4,
748
                'psr4' => $psr4,
742
              'classname' => 'psr0_subnamespace_example',
749
                'classname' => 'psr0_subnamespace_example',
743
              'includedfiles' => "{$directory}psr0/subnamespace/example.php",
750
                'includedfiles' => "{$directory}psr0/subnamespace/example.php",
744
          ],
751
            ],
745
          'PSR-0 Classloading - Sub namespace - slashes' => [
752
            'PSR-0 Classloading - Sub namespace - slashes' => [
746
              'psr0' => $psr0,
753
                'psr0' => $psr0,
747
              'psr4' => $psr4,
754
                'psr4' => $psr4,
748
              'classname' => 'psr0\\subnamespace\\slashes',
755
                'classname' => 'psr0\\subnamespace\\slashes',
749
              'includedfiles' => "{$directory}psr0/subnamespace/slashes.php",
756
                'includedfiles' => "{$directory}psr0/subnamespace/slashes.php",
750
          ],
757
            ],
751
          'PSR-4 Classloading - Root' => [
758
            'PSR-4 Classloading - Root' => [
752
              'psr0' => $psr0,
759
                'psr0' => $psr0,
753
              'psr4' => $psr4,
760
                'psr4' => $psr4,
754
              'classname' => 'psr4\\main',
761
                'classname' => 'psr4\\main',
755
              'includedfiles' => "{$directory}psr4/main.php",
762
                'includedfiles' => "{$directory}psr4/main.php",
756
          ],
763
            ],
757
          'PSR-4 Classloading - Sub namespace' => [
764
            'PSR-4 Classloading - Sub namespace' => [
758
              'psr0' => $psr0,
765
                'psr0' => $psr0,
759
              'psr4' => $psr4,
766
                'psr4' => $psr4,
760
              'classname' => 'psr4\\subnamespace\\example',
767
                'classname' => 'psr4\\subnamespace\\example',
761
              'includedfiles' => "{$directory}psr4/subnamespace/example.php",
768
                'includedfiles' => "{$directory}psr4/subnamespace/example.php",
762
          ],
769
            ],
763
          'PSR-4 Classloading - Ensure underscores are not converted to paths' => [
770
            'PSR-4 Classloading - Ensure underscores are not converted to paths' => [
764
              'psr0' => $psr0,
771
                'psr0' => $psr0,
765
              'psr4' => $psr4,
772
                'psr4' => $psr4,
766
              'classname' => 'psr4\\subnamespace\\underscore_example',
773
                'classname' => 'psr4\\subnamespace\\underscore_example',
767
              'includedfiles' => "{$directory}psr4/subnamespace/underscore_example.php",
774
                'includedfiles' => "{$directory}psr4/subnamespace/underscore_example.php",
768
          ],
775
            ],
769
          'Overlap - Ensure no unexpected problems with PSR-4 when overlapping namespaces.' => [
776
            'Overlap - Ensure no unexpected problems with PSR-4 when overlapping namespaces.' => [
770
              'psr0' => $psr0,
777
                'psr0' => $psr0,
771
              'psr4' => $psr4,
778
                'psr4' => $psr4,
772
              'classname' => 'overlap\\subnamespace\\example',
779
                'classname' => 'overlap\\subnamespace\\example',
773
              'includedfiles' => "{$directory}overlap/subnamespace/example.php",
780
                'includedfiles' => "{$directory}overlap/subnamespace/example.php",
774
          ],
781
            ],
775
          'Overlap - Ensure no unexpected problems with PSR-0 overlapping namespaces.' => [
782
            'Overlap - Ensure no unexpected problems with PSR-0 overlapping namespaces.' => [
776
              'psr0' => $psr0,
783
                'psr0' => $psr0,
777
              'psr4' => $psr4,
784
                'psr4' => $psr4,
778
              'classname' => 'overlap_subnamespace_example2',
785
                'classname' => 'overlap_subnamespace_example2',
779
              'includedfiles' => "{$directory}overlap/subnamespace/example2.php",
786
                'includedfiles' => "{$directory}overlap/subnamespace/example2.php",
780
          ],
787
            ],
781
        ];
788
        ];
782
    }
789
    }
Línea 783... Línea 790...
783
 
790
 
784
    /**
791
    /**
Línea 827... Línea 834...
827
        $psr4 = [
834
        $psr4 = [
828
          'psr4'      => 'lib/tests/fixtures/component/psr4',
835
          'psr4'      => 'lib/tests/fixtures/component/psr4',
829
          'overlap'   => 'lib/tests/fixtures/component/overlap',
836
          'overlap'   => 'lib/tests/fixtures/component/overlap',
830
        ];
837
        ];
831
        return [
838
        return [
832
          'PSR-0 Classloading - Root' => [
839
            'PSR-0 Classloading - Root' => [
833
              'psr0' => $psr0,
840
                'psr0' => $psr0,
834
              'psr4' => $psr4,
841
                'psr4' => $psr4,
835
              'classname' => 'psr0_main',
842
                'classname' => 'psr0_main',
836
              'file' => "{$directory}psr0/main.php",
843
                'file' => "{$directory}psr0/main.php",
837
          ],
844
            ],
838
          'PSR-0 Classloading - Sub namespace - underscores' => [
845
            'PSR-0 Classloading - Sub namespace - underscores' => [
839
              'psr0' => $psr0,
846
                'psr0' => $psr0,
840
              'psr4' => $psr4,
847
                'psr4' => $psr4,
841
              'classname' => 'psr0_subnamespace_example',
848
                'classname' => 'psr0_subnamespace_example',
842
              'file' => "{$directory}psr0/subnamespace/example.php",
849
                'file' => "{$directory}psr0/subnamespace/example.php",
843
          ],
850
            ],
844
          'PSR-0 Classloading - Sub namespace - slashes' => [
851
            'PSR-0 Classloading - Sub namespace - slashes' => [
845
              'psr0' => $psr0,
852
                'psr0' => $psr0,
846
              'psr4' => $psr4,
853
                'psr4' => $psr4,
847
              'classname' => 'psr0\\subnamespace\\slashes',
854
                'classname' => 'psr0\\subnamespace\\slashes',
848
              'file' => "{$directory}psr0/subnamespace/slashes.php",
855
                'file' => "{$directory}psr0/subnamespace/slashes.php",
849
          ],
856
            ],
850
          'PSR-0 Classloading - non-existent file' => [
857
            'PSR-0 Classloading - non-existent file' => [
851
              'psr0' => $psr0,
858
                'psr0' => $psr0,
852
              'psr4' => $psr4,
859
                'psr4' => $psr4,
853
              'classname' => 'psr0_subnamespace_nonexistent_file',
860
                'classname' => 'psr0_subnamespace_nonexistent_file',
854
              'file' => false,
861
                'file' => false,
855
          ],
862
            ],
856
          'PSR-4 Classloading - Root' => [
863
            'PSR-4 Classloading - Root' => [
857
              'psr0' => $psr0,
864
                'psr0' => $psr0,
858
              'psr4' => $psr4,
865
                'psr4' => $psr4,
859
              'classname' => 'psr4\\main',
866
                'classname' => 'psr4\\main',
860
              'file' => "{$directory}psr4/main.php",
867
                'file' => "{$directory}psr4/main.php",
861
          ],
868
            ],
862
          'PSR-4 Classloading - Sub namespace' => [
869
            'PSR-4 Classloading - Sub namespace' => [
863
              'psr0' => $psr0,
870
                'psr0' => $psr0,
864
              'psr4' => $psr4,
871
                'psr4' => $psr4,
865
              'classname' => 'psr4\\subnamespace\\example',
872
                'classname' => 'psr4\\subnamespace\\example',
866
              'file' => "{$directory}psr4/subnamespace/example.php",
873
                'file' => "{$directory}psr4/subnamespace/example.php",
867
          ],
874
            ],
868
          'PSR-4 Classloading - Ensure underscores are not converted to paths' => [
875
            'PSR-4 Classloading - Ensure underscores are not converted to paths' => [
869
              'psr0' => $psr0,
876
                'psr0' => $psr0,
870
              'psr4' => $psr4,
877
                'psr4' => $psr4,
871
              'classname' => 'psr4\\subnamespace\\underscore_example',
878
                'classname' => 'psr4\\subnamespace\\underscore_example',
872
              'file' => "{$directory}psr4/subnamespace/underscore_example.php",
879
                'file' => "{$directory}psr4/subnamespace/underscore_example.php",
873
          ],
880
            ],
874
          'PSR-4 Classloading - non-existent file' => [
881
            'PSR-4 Classloading - non-existent file' => [
875
              'psr0' => $psr0,
882
                'psr0' => $psr0,
876
              'psr4' => $psr4,
883
                'psr4' => $psr4,
877
              'classname' => 'psr4\\subnamespace\\nonexistent',
884
                'classname' => 'psr4\\subnamespace\\nonexistent',
878
              'file' => false,
885
                'file' => false,
879
          ],
886
            ],
880
          'Overlap - Ensure no unexpected problems with PSR-4 when overlapping namespaces.' => [
887
            'Overlap - Ensure no unexpected problems with PSR-4 when overlapping namespaces.' => [
881
              'psr0' => $psr0,
888
                'psr0' => $psr0,
882
              'psr4' => $psr4,
889
                'psr4' => $psr4,
883
              'classname' => 'overlap\\subnamespace\\example',
890
                'classname' => 'overlap\\subnamespace\\example',
884
              'file' => "{$directory}overlap/subnamespace/example.php",
891
                'file' => "{$directory}overlap/subnamespace/example.php",
885
          ],
892
            ],
886
          'Overlap - Ensure no unexpected problems with PSR-0 overlapping namespaces.' => [
893
            'Overlap - Ensure no unexpected problems with PSR-0 overlapping namespaces.' => [
887
              'psr0' => $psr0,
894
                'psr0' => $psr0,
888
              'psr4' => $psr4,
895
                'psr4' => $psr4,
889
              'classname' => 'overlap_subnamespace_example2',
896
                'classname' => 'overlap_subnamespace_example2',
890
              'file' => "{$directory}overlap/subnamespace/example2.php",
897
                'file' => "{$directory}overlap/subnamespace/example2.php",
891
          ],
898
            ],
892
            'PSR-4 namespaces can come from multiple sources - first source' => [
899
            'PSR-4 namespaces can come from multiple sources - first source' => [
893
                'psr0' => $psr0,
900
                'psr0' => $psr0,
894
                'psr4' => [
901
                'psr4' => [
895
                    'Psr\\Http\\Message' => [
902
                    'Psr\\Http\\Message' => [
896
                        'lib/psr/http-message/src',
903
                        'lib/psr/http-message/src',
Línea 913... Línea 920...
913
            ],
920
            ],
914
        ];
921
        ];
915
    }
922
    }
Línea 916... Línea 923...
916
 
923
 
-
 
924
    /**
-
 
925
     * Test that the classloader can load from the test namespaces.
-
 
926
     */
-
 
927
    public function test_classloader_tests_namespace(): void {
-
 
928
        global $CFG;
-
 
929
 
-
 
930
        $this->resetAfterTest();
-
 
931
 
-
 
932
        $getclassfilecontent = function (string $classname, ?string $namespace): string {
-
 
933
            if ($namespace) {
-
 
934
                $content = "<?php\nnamespace $namespace;\nclass $classname {}";
-
 
935
            } else {
-
 
936
                $content = "<?php\nclass $classname {}";
-
 
937
            }
-
 
938
            return $content;
-
 
939
        };
-
 
940
 
-
 
941
        $vfileroot = \org\bovigo\vfs\vfsStream::setup('root', null, [
-
 
942
            'lib' => [
-
 
943
                'classes' => [
-
 
944
                    'example.php' => $getclassfilecontent('example', 'core'),
-
 
945
                ],
-
 
946
                'tests' => [
-
 
947
                    'classes' => [
-
 
948
                        'example_classname.php' => $getclassfilecontent('example_classname', \core\tests::class),
-
 
949
                    ],
-
 
950
                    'behat' => [
-
 
951
                        'example_classname.php' => $getclassfilecontent('example_classname', \core\behat::class),
-
 
952
                    ],
-
 
953
                ],
-
 
954
            ],
-
 
955
        ]);
-
 
956
 
-
 
957
        // Note: This is pretty hacky, but it's the only way to test the classloader.
-
 
958
        // We have to override the dirroot and libdir, and then reset the plugintypes property.
-
 
959
        $CFG->dirroot = $vfileroot->url();
-
 
960
        $CFG->libdir = $vfileroot->url() . '/lib';
-
 
961
        \core_component::reset();
-
 
962
 
-
 
963
        // Existing classes do not break.
-
 
964
        $this->assertTrue(
-
 
965
            class_exists(\core\example::class),
-
 
966
        );
-
 
967
 
-
 
968
        // Test and behat classes work.
-
 
969
        $this->assertTrue(
-
 
970
            class_exists(\core\tests\example_classname::class),
-
 
971
        );
-
 
972
        $this->assertTrue(
-
 
973
            class_exists(\core\behat\example_classname::class),
-
 
974
        );
-
 
975
 
-
 
976
        // Non-existent classes do not do anything.
-
 
977
        $this->assertFalse(
-
 
978
            class_exists(\core\tests\example_classname_not_found::class),
-
 
979
        );
-
 
980
    }
-
 
981
 
917
    /**
982
    /**
918
     * Test the PSR classloader.
983
     * Test the PSR classloader.
919
     *
984
     *
920
     * @dataProvider psr_classloader_provider
985
     * @dataProvider psr_classloader_provider
921
     * @param array $psr0 The PSR-0 namespaces to be used in the test.
986
     * @param array $psr0 The PSR-0 namespaces to be used in the test.