File: ResultIndex.php

package info (click to toggle)
roundcube 1.6.13%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 44,888 kB
  • sloc: javascript: 195,591; php: 76,917; sql: 3,150; sh: 2,882; pascal: 1,079; makefile: 234; xml: 93; perl: 73; ansic: 48; python: 21
file content (131 lines) | stat: -rw-r--r-- 6,416 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php

namespace Roundcube\Tests\Framework;

use PHPUnit\Framework\TestCase;

/**
 * Test class to test rcube_result_index class
 */
class Framework_ResultIndex extends TestCase
{

    /**
     * Class constructor
     */
    function test_class()
    {
        $object = new \rcube_result_index();

        $this->assertInstanceOf(\rcube_result_index::class, $object, "Class constructor");
    }

    /**
     * SORT result parsing test
     */
    function test_parse_sort()
    {
        $text = "* SORT 2001 2002 2035 2036 2037 2038 2044 2046 2043 2045 2226 2225 2224 2223";
        $object = new \rcube_result_index('INBOX', $text);

        $this->assertSame(false, $object->is_empty(), "Object is empty");
        $this->assertSame(false, $object->is_error(), "Object is error");
        $this->assertSame(2226, $object->max(), "Max message UID");
        $this->assertSame(2001, $object->min(), "Min message UID");
        $this->assertSame(14, $object->count_messages(), "Messages count");
        $this->assertSame(14, $object->count(), "Messages count");
        $this->assertSame(1, $object->exists(2002, true), "Message exists");
        $this->assertSame(true, $object->exists(2002), "Message exists (bool)");
        $this->assertSame(2001, $object->get_element('FIRST'), "Get first element");
        $this->assertSame(2223, $object->get_element('LAST'), "Get last element");
        $this->assertSame(2035, $object->get_element(2), "Get specified element");
        $this->assertSame("2001:2002,2035:2038,2043:2046,2223:2226", $object->get_compressed(), "Get compressed index");
        $this->assertSame('INBOX', $object->get_parameters('MAILBOX'), "Get parameter");

        $clone = clone $object;
        $clone->filter([2035, 2002]);

        $this->assertSame(2, $clone->count(), "Messages count (filtered)");
        $this->assertSame(2002, $clone->get_element('FIRST'), "Get first element (filtered)");

        $clone = clone $object;
        $clone->revert();

        $this->assertSame(14, $clone->count(), "Messages count (reverted)");
        $this->assertSame(12, $clone->exists(2002, true), "Message exists (reverted)");
        $this->assertSame(true, $clone->exists(2002), "Message exists (bool) (reverted)");
        $this->assertSame(2223, $clone->get_element('FIRST'), "Get first element (reverted)");
        $this->assertSame(2001, $clone->get_element('LAST'), "Get last element (reverted)");
        $this->assertSame(2225, $clone->get_element(2), "Get specified element (reverted)");

        $clone = clone $object;
        $clone->slice(2, 3);

        $this->assertSame(3, $clone->count(), "Messages count (sliced)");
        $this->assertSame(2035, $clone->get_element('FIRST'), "Get first element (sliced)");
        $this->assertSame(2037, $clone->get_element('LAST'), "Get last element (sliced)");
    }

    /**
     * ESEARCH result parsing test
     */
    function test_parse_esearch()
    {
        $text = "* ESEARCH (TAG \"A282\") MIN 2 COUNT 3 ALL 2,10:11";
        $object = new \rcube_result_index('INBOX', $text);

        $this->assertSame(false, $object->is_empty(), "Object is empty");
        $this->assertSame(false, $object->is_error(), "Object is error");
        $this->assertSame(11, $object->max(), "Max message UID");
        $this->assertSame(2, $object->min(), "Min message UID");
        $this->assertSame(3, $object->count_messages(), "Messages count");
        $this->assertSame(3, $object->count(), "Messages count");
        $this->assertSame(1, $object->exists(10, true), "Message exists");
        $this->assertSame(true, $object->exists(10), "Message exists (bool)");
        $this->assertSame(2, $object->get_element('FIRST'), "Get first element");
        $this->assertSame(11, $object->get_element('LAST'), "Get last element");
        $this->assertSame(10, $object->get_element(1), "Get specified element");
        $this->assertSame("2,10:11", $object->get_compressed(), "Get compressed index");
        $this->assertSame('INBOX', $object->get_parameters('MAILBOX'), "Get parameter");

        // A case without 'ALL' response
        $text = "* ESEARCH (TAG \"A282\") UID MAX 721 COUNT 3";
        $object = new \rcube_result_index('INBOX', $text);

        $this->assertSame(false, $object->is_empty(), "Object is empty");
        $this->assertSame(false, $object->is_error(), "Object is error");
        $this->assertSame(721, $object->max(), "Max message UID");
        $this->assertSame(null, $object->min(), "Min message UID");
        $this->assertSame(3, $object->count_messages(), "Messages count");
        $this->assertSame(3, $object->count(), "Messages count");
        $this->assertSame(false, $object->exists(10, true), "Message exists");
        $this->assertSame(false, $object->exists(10), "Message exists (bool)");
        $this->assertSame(null, $object->get_element('FIRST'), "Get first element");
        $this->assertSame(null, $object->get_element('LAST'), "Get last element");
        $this->assertSame(null, $object->get_element(1), "Get specified element");
        $this->assertSame('', $object->get_compressed(), "Get compressed index");
        $this->assertSame('INBOX', $object->get_parameters('MAILBOX'), "Get parameter");
    }

    /**
     * Empty SORT result parsing test
     */
    function test_parse_empty()
    {
        $object = new \rcube_result_index('INBOX', "* SORT");

        $this->assertSame(true, $object->is_empty(), "Object is empty");
        $this->assertSame(false, $object->is_error(), "Object is error");
        $this->assertSame(null, $object->max(), "Max message UID");
        $this->assertSame(null, $object->min(), "Min message UID");
        $this->assertSame(0, $object->count_messages(), "Messages count");
        $this->assertSame(0, $object->count(), "Messages count");
        $this->assertSame(false, $object->exists(10, true), "Message exists");
        $this->assertSame(false, $object->exists(10), "Message exists (bool)");
        $this->assertSame(null, $object->get_element('FIRST'), "Get first element");
        $this->assertSame(null, $object->get_element('LAST'), "Get last element");
        $this->assertSame(null, $object->get_element(1), "Get specified element");
        $this->assertSame("", $object->get_compressed(), "Get compressed index");
        $this->assertSame('INBOX', $object->get_parameters('MAILBOX'), "Get parameter");
    }
}