@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class QueryFormattingTestCase extends PhabricatorTestCase {
4
5 public function testQueryFormatting() {
6 $conn = id(new PhabricatorUser())->establishConnection('r');
7
8 $this->assertEqual(
9 'NULL',
10 (string)qsprintf($conn, '%nd', null));
11
12 $this->assertEqual(
13 '0',
14 (string)qsprintf($conn, '%nd', 0));
15
16 $this->assertEqual(
17 '0',
18 (string)qsprintf($conn, '%d', 0));
19
20 $raised = null;
21 try {
22 qsprintf($conn, '%d', 'derp');
23 } catch (Exception $ex) {
24 $raised = $ex;
25 }
26 $this->assertTrue(
27 (bool)$raised,
28 pht('%s should raise exception for invalid %%d conversion.', 'qsprintf'));
29
30 $this->assertEqual(
31 "'<S>'",
32 (string)qsprintf($conn, '%s', null));
33
34 $this->assertEqual(
35 'NULL',
36 (string)qsprintf($conn, '%ns', null));
37
38 $this->assertEqual(
39 "'<S>', '<S>'",
40 (string)qsprintf($conn, '%Ls', array('x', 'y')));
41
42 $this->assertEqual(
43 "'<B>'",
44 (string)qsprintf($conn, '%B', null));
45
46 $this->assertEqual(
47 'NULL',
48 (string)qsprintf($conn, '%nB', null));
49
50 $this->assertEqual(
51 "'<B>', '<B>'",
52 (string)qsprintf($conn, '%LB', array('x', 'y')));
53
54 $this->assertEqual(
55 '<C>',
56 (string)qsprintf($conn, '%T', 'x'));
57
58 $this->assertEqual(
59 '<C>',
60 (string)qsprintf($conn, '%C', 'y'));
61
62 $this->assertEqual(
63 '<C>.<C>',
64 (string)qsprintf($conn, '%R', new AphrontDatabaseTableRef('x', 'y')));
65
66 }
67
68
69}