CalendarTest   A
last analyzed

Complexity

Total Complexity 29

Size/Duplication

Total Lines 198
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 82
c 1
b 0
f 0
dl 0
loc 198
rs 10
wmc 29

29 Methods

Rating   Name   Duplication   Size   Complexity  
A testToChinaMonth() 0 4 1
A testLunar2SolarWithLeapMonth() 0 6 1
A testLeapMonth() 0 4 1
A testDiffInMonths() 0 6 1
A setUp() 0 3 1
A testAddDays() 0 5 1
A testDateDiff() 0 4 1
A testSolar2LunarWithHour() 0 6 1
A testGanZhiYear() 0 4 1
A testLeapDays() 0 4 1
A testDiffInDays() 0 6 1
A testGetAnimal() 0 4 1
A testSubYears() 0 5 1
A testMonthsOfYear() 0 4 1
A testGetTerm() 0 4 1
A testSolarToLunar() 0 9 1
A testSubDays() 0 5 1
A testToConstellation() 0 4 1
A testAddYears() 0 5 1
A testDiffInYears() 0 6 1
A testToChinaYear() 0 4 1
A testToGanZhi() 0 4 1
A testLunarToSolar() 0 6 1
A testLunarDays() 0 4 1
A testDaysOfYear() 0 4 1
A testToChinaDay() 0 4 1
A testSolarDays() 0 4 1
A testAddMonths() 0 5 1
A testSubMonths() 0 5 1
1
<?php
2
3
use PHPUnit\Framework\TestCase;
4
use tinymeng\tools\Calendar;
5
6
class CalendarTest extends TestCase
7
{
8
    protected $calendar;
9
10
    protected function setUp(): void
11
    {
12
        $this->calendar = new Calendar();
13
    }
14
15
    public function testSolarToLunar()
16
    {
17
        $result = $this->calendar->solar(2025, 1, 1);
18
        $this->assertEquals('2025', $result['gregorian_year']);
19
        $this->assertEquals('01', $result['gregorian_month']);
20
        $this->assertEquals('01', $result['gregorian_day']);
21
        $this->assertEquals('甲辰', $result['ganzhi_year']);
22
        $this->assertEquals('腊月', $result['lunar_month_chinese']);
23
        $this->assertEquals('初二', $result['lunar_day_chinese']);
24
    }
25
26
    public function testLunarToSolar()
27
    {
28
        $result = $this->calendar->lunar(2023, 9, 1);
29
        $this->assertEquals('2023', $result['lunar_year']);
30
        $this->assertEquals('09', $result['lunar_month']);
31
        $this->assertEquals('01', $result['lunar_day']);
32
    }
33
34
    public function testDaysOfYear()
35
    {
36
        $days = $this->calendar->daysOfYear(2023);
37
        $this->assertEquals(384, $days);
38
    }
39
40
    public function testMonthsOfYear()
41
    {
42
        $months = $this->calendar->monthsOfYear(2023);
43
        $this->assertEquals(13, $months);
44
    }
45
46
    public function testLeapMonth()
47
    {
48
        $leapMonth = $this->calendar->leapMonth(2023);
49
        $this->assertEquals(2, $leapMonth);
50
    }
51
52
    public function testLeapDays()
53
    {
54
        $leapDays = $this->calendar->leapDays(2023);
55
        $this->assertEquals(29, $leapDays);
56
    }
57
58
    public function testLunarDays()
59
    {
60
        $days = $this->calendar->lunarDays(2023, 9);
61
        $this->assertEquals(29, $days);
62
    }
63
64
    public function testSolarDays()
65
    {
66
        $days = $this->calendar->solarDays(2023, 10);
67
        $this->assertEquals(31, $days);
68
    }
69
70
    public function testGanZhiYear()
71
    {
72
        $ganZhiYear = $this->calendar->ganZhiYear(2023);
73
        $this->assertEquals('癸卯', $ganZhiYear);
74
    }
75
76
    public function testToConstellation()
77
    {
78
        $constellation = $this->calendar->toConstellation(10, 1);
79
        $this->assertEquals('天秤', $constellation);
80
    }
81
82
    public function testToGanZhi()
83
    {
84
        $ganZhi = $this->calendar->toGanZhi(0);
85
        $this->assertEquals('甲子', $ganZhi);
86
    }
87
88
    public function testGetTerm()
89
    {
90
        $term = $this->calendar->getTerm(2023, 1);
91
        $this->assertEquals('5', $term);
92
    }
93
94
    public function testToChinaYear()
95
    {
96
        $chineseYear = $this->calendar->toChinaYear(2023);
97
        $this->assertEquals('二零二三', $chineseYear);
98
    }
99
100
    public function testToChinaMonth()
101
    {
102
        $chineseMonth = $this->calendar->toChinaMonth(9);
103
        $this->assertEquals('九月', $chineseMonth);
104
    }
105
106
    public function testToChinaDay()
107
    {
108
        $chineseDay = $this->calendar->toChinaDay(1);
109
        $this->assertEquals('初一', $chineseDay);
110
    }
111
112
    public function testGetAnimal()
113
    {
114
        $animal = $this->calendar->getAnimal(2023);
115
        $this->assertEquals('兔', $animal);
116
    }
117
118
    public function testSolar2LunarWithHour()
119
    {
120
        $result = $this->calendar->solar2lunar(2023, 10, 1, 23);
121
        $this->assertEquals('2023', $result['lunar_year']);
122
        $this->assertEquals('08', $result['lunar_month']);
123
        $this->assertEquals('18', $result['lunar_day']);
124
    }
125
126
    public function testLunar2SolarWithLeapMonth()
127
    {
128
        $result = $this->calendar->lunar2solar(2023, 9, 1, true);
129
        $this->assertEquals('2023', $result['solar_year']);
130
        $this->assertEquals('10', $result['solar_month']);
131
        $this->assertEquals('15', $result['solar_day']);
132
    }
133
134
    public function testDateDiff()
135
    {
136
        $diff = $this->calendar->dateDiff('2023-10-01', '2023-10-02');
137
        $this->assertEquals(1, $diff->days);
138
    }
139
140
    public function testDiffInYears()
141
    {
142
        $lunar1 = $this->calendar->solar2lunar(2023, 10, 1);
143
        $lunar2 = $this->calendar->solar2lunar(2024, 10, 1);
144
        $diff = $this->calendar->diffInYears($lunar1, $lunar2);
145
        $this->assertEquals(1, $diff);
146
    }
147
148
    public function testDiffInMonths()
149
    {
150
        $lunar1 = $this->calendar->solar2lunar(2023, 10, 1);
151
        $lunar2 = $this->calendar->solar2lunar(2023, 11, 1);
152
        $diff = $this->calendar->diffInMonths($lunar1, $lunar2);
153
        $this->assertEquals(1, $diff);
154
    }
155
156
    public function testDiffInDays()
157
    {
158
        $lunar1 = $this->calendar->solar2lunar(2023, 10, 1);
159
        $lunar2 = $this->calendar->solar2lunar(2023, 10, 2);
160
        $diff = $this->calendar->diffInDays($lunar1, $lunar2);
161
        $this->assertEquals(1, $diff);
162
    }
163
164
    public function testAddYears()
165
    {
166
        $lunar = $this->calendar->solar2lunar(2023, 10, 1);
167
        $result = $this->calendar->addYears($lunar, 1);
168
        $this->assertEquals('2024', $result['lunar_year']);
169
    }
170
171
    public function testSubYears()
172
    {
173
        $lunar = $this->calendar->solar2lunar(2023, 10, 1);
174
        $result = $this->calendar->subYears($lunar, 1);
175
        $this->assertEquals('2022', $result['lunar_year']);
176
    }
177
178
    public function testAddMonths()
179
    {
180
        $lunar = $this->calendar->solar2lunar(2023, 10, 1);
181
        $result = $this->calendar->addMonths($lunar, 1);
182
        $this->assertEquals('09', $result['lunar_month']);
183
    }
184
185
    public function testSubMonths()
186
    {
187
        $lunar = $this->calendar->solar2lunar(2023, 10, 1);
188
        $result = $this->calendar->subMonths($lunar, 1);
189
        $this->assertEquals('07', $result['lunar_month']);
190
    }
191
192
    public function testAddDays()
193
    {
194
        $lunar = $this->calendar->solar2lunar(2023, 10, 1);
195
        $result = $this->calendar->addDays($lunar, 1);
196
        $this->assertEquals('18', $result['lunar_day']);
197
    }
198
199
    public function testSubDays()
200
    {
201
        $lunar = $this->calendar->solar2lunar(2023, 10, 1);
202
        $result = $this->calendar->subDays($lunar, 1);
203
        $this->assertEquals('16', $result['lunar_day']);
204
    }
205
}