WordPress.org

Make WordPress Core

Ticket #19861: test_db.php

File test_db.php, 1.5 KB (added by kurtpayne, 3 years ago)

Unit test

Line 
1<?php
2
3/**
4 * Test WPDB methods
5 */
6class TestWPDB extends _WPEmptyBlog {
7
8        /**
9         * Query log
10         * @var array
11         */
12        protected $_queries = array();
13       
14        /**
15         * Set up the test fixture
16         */
17        public function setUp() {
18                parent::setUp();
19                $this->_queries = array();
20                add_filter( 'query', array( $this, 'query_filter' ) );
21        }
22
23        /**
24         * Tear down the test fixture
25         */
26        public function tearDown() {
27                parent::tearDown();
28                remove_filter( 'query', array( $this, 'query_filter' ) );
29        }
30
31        /**
32         * Log each query
33         * @param string $sql
34         * @return string
35         */
36        public function query_filter( $sql ) {
37                $this->_queries[] = $sql;
38                return $sql;
39        }
40
41        /**
42         * Test that floats formatted as "0,700" get sanitized properly by wpdb
43         * @global mixed $wpdb
44         */
45        public function test_locale_floats() {
46                global $wpdb;
47
48                $this->knownWPBug( 19861 );
49
50                // Save the current locale
51                $current_locale = setlocale( LC_ALL, NULL );
52               
53                // Switch to Russian
54                setlocale( LC_ALL, 'ru_RU.utf8', 'rus' );
55               
56                // Try an update query
57                $wpdb->update( 
58                        'test_table', 
59                        array( 'float_column' => 0.7 ), 
60                        array( 'meta_id' => 5 ), 
61                        array( '%f' ), 
62                        array( '%d' ) 
63                );
64               
65                // Ensure the float isn't 0,700
66                $this->assertContains( '0.700', array_pop( $this->_queries ) );
67
68                // Try a prepare
69                $sql = $wpdb->prepare( "UPDATE test_table SET float_column = %f AND meta_id = %d", 0.7, 5 );
70                $this->assertContains( '0.700', $sql );
71
72                // Restore locale
73                setlocale( LC_ALL, $current_locale );
74        }
75}