Translate extension for MediaWiki
 
Loading...
Searching...
No Matches
yaml-tests.php
Go to the documentation of this file.
1<?php
13
14// Standard boilerplate to define $IP
15if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
16 $IP = getenv( 'MW_INSTALL_PATH' );
17} else {
18 $dir = __DIR__;
19 $IP = "$dir/../../..";
20}
21require_once "$IP/maintenance/Maintenance.php";
22
23class YamlTests extends Maintenance {
24 public function __construct() {
25 parent::__construct();
26 $this->addDescription( 'Script for comparing supported YAML parser implementations.' );
27 $this->requireExtension( 'Translate' );
28 }
29
30 public function execute() {
31 global $wgTranslateGroupFiles, $wgTranslateYamlLibrary;
32 $documents = [];
33 $times = [];
34 $mems = [];
35 $mempeaks = [];
36
37 foreach ( [ 'spyc', 'phpyaml' ] as $driver ) {
38 $mempeaks[$driver] = -memory_get_peak_usage( true );
39 $mems[$driver] = -memory_get_usage( true );
40 $times[$driver] = -microtime( true );
41 $wgTranslateYamlLibrary = $driver;
42 $documents[$driver] = [];
43 foreach ( $wgTranslateGroupFiles as $file ) {
44 foreach ( self::parseGroupFile( $file ) as $id => $docu ) {
45 $documents[$driver]["$file-$id"] = $docu;
46 }
47 }
48
49 $times[$driver] += microtime( true );
50 $mems[$driver] += memory_get_usage( true );
51 $mempeaks[$driver] += memory_get_peak_usage( true );
52
53 self::sortNestedArrayAssoc( $documents[$driver] );
54 file_put_contents( "yaml-test-$driver.txt", var_export( $documents[$driver], true ) );
55 file_put_contents( "yaml-output-$driver.txt", TranslateYaml::dump( $documents[$driver] ) );
56 }
57 var_dump( $times );
58 var_dump( $mems );
59 var_dump( $mempeaks );
60 }
61
62 public static function parseGroupFile( $filename ) {
63 $data = file_get_contents( $filename );
64 $documents = preg_split( "/^---$/m", $data, -1, PREG_SPLIT_NO_EMPTY );
65 $groups = [];
66 $template = false;
67 foreach ( $documents as $document ) {
68 $document = TranslateYaml::loadString( $document );
69 if ( isset( $document['TEMPLATE'] ) ) {
70 $template = $document['TEMPLATE'];
71 } else {
72 if ( !isset( $document['BASIC']['id'] ) ) {
73 trigger_error( 'No path ./BASIC/id (group id not defined) ' .
74 "in yaml document located in $filename" );
75 continue;
76 }
77 $groups[$document['BASIC']['id']] = $document;
78 }
79 }
80
81 return array_map( static function ( array $group ) use ( $template ): array {
82 return MessageGroupConfigurationParser::mergeTemplate( $template, $group );
83 }, $groups );
84 }
85
86 public static function sortNestedArrayAssoc( &$a ) {
87 ksort( $a );
88 foreach ( $a as &$value ) {
89 if ( is_array( $value ) ) {
90 self::sortNestedArrayAssoc( $value );
91 }
92 }
93 }
94}
95
96$maintClass = YamlTests::class;
97require_once RUN_MAINTENANCE_IF_MAIN;