Skip to content

Commit 1093164

Browse files
Added test cases
1 parent 7e9e11a commit 1093164

File tree

7 files changed

+473
-32
lines changed

7 files changed

+473
-32
lines changed

src/Facades/N2W.php renamed to src/N2WFacade.php

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66
* @license [MIT](https://opensource.org/licenses/MIT)
77
*/
88

9-
namespace PHPViet\Laravel\NumberToWords\Facades;
9+
namespace PHPViet\Laravel\NumberToWords;
1010

1111
use InvalidArgumentException;
12-
use PHPViet\NumberToWords\Transformer;
1312
use Illuminate\Support\Facades\Facade;
1413
use PHPViet\NumberToWords\DictionaryInterface;
1514

@@ -20,7 +19,7 @@
2019
* @author Vuong Minh <vuongxuongminh@gmail.com>
2120
* @since 1.0.0
2221
*/
23-
class N2W extends Facade
22+
class N2WFacade extends Facade
2423
{
2524
/**
2625
* Từ điển hiện tại.
@@ -29,30 +28,23 @@ class N2W extends Facade
2928
*/
3029
public static $dictionary;
3130

32-
/**
33-
* Cache data của các từ điển.
34-
*
35-
* @var array|DictionaryInterface[]
36-
*/
37-
protected static $dictionaries = [];
38-
3931
/**
4032
* @inheritDoc
4133
*/
4234
protected static function getFacadeAccessor(): Transformer
4335
{
4436
$dictionary = static::$dictionary ?? static::getDefaultDictionary();
45-
$dictionary = static::getDictionaryInstance($dictionary);
37+
$dictionary = static::makeDictionary($dictionary);
4638

47-
return app('n2w', [$dictionary]);
39+
return app('n2w', compact('dictionary'));
4840
}
4941

5042
/**
5143
* Trả về từ điển mặc định trong config.
5244
*
53-
* @return DictionaryInterface
45+
* @return string
5446
*/
55-
public static function getDefaultDictionary(): DictionaryInterface
47+
protected static function getDefaultDictionary(): string
5648
{
5749
return config('n2w.defaults.dictionary');
5850
}
@@ -63,17 +55,13 @@ public static function getDefaultDictionary(): DictionaryInterface
6355
* @param string $dictionary
6456
* @return DictionaryInterface
6557
*/
66-
protected static function getDictionaryInstance(string $dictionary): DictionaryInterface
58+
protected static function makeDictionary(string $dictionary): DictionaryInterface
6759
{
6860
if (!$dictionaryClass = config("n2w.dictionaries.{$dictionary}")) {
6961
throw new InvalidArgumentException(sprintf('Dictionary (%s) is not defined!', $dictionary));
7062
}
7163

72-
if (!isset(static::$dictionaries[$dictionaryClass])) {
73-
return static::$dictionaries[$dictionaryClass] = app()->make($dictionaryClass);
74-
}
75-
76-
return static::$dictionaries[$dictionaryClass];
64+
return app()->make($dictionaryClass);
7765
}
7866

7967

src/ServiceProvider.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88

99
namespace PHPViet\Laravel\NumberToWords;
1010

11-
use PHPViet\NumberToWords\Transformer;
11+
use PHPViet\NumberToWords\Dictionary;
12+
use PHPViet\NumberToWords\SouthDictionary;
13+
use PHPViet\NumberToWords\DictionaryInterface;
1214
use Illuminate\Contracts\Support\DeferrableProvider;
1315
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
1416

@@ -23,6 +25,12 @@ class ServiceProvider extends BaseServiceProvider implements DeferrableProvider
2325
'n2w' => Transformer::class
2426
];
2527

28+
public $singletons = [
29+
Dictionary::class => Dictionary::class,
30+
DictionaryInterface::class => Dictionary::class,
31+
SouthDictionary::class => SouthDictionary::class
32+
];
33+
2634
public function boot(): void
2735
{
2836
$this->publishes([

src/helpers.php

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
<?php
22

3-
use PHPViet\Laravel\NumberToWords\Facades\N2W;
3+
use PHPViet\Laravel\NumberToWords\N2WFacade;
44

55
if (!function_exists('n2w')) {
66

77
/**
88
* Hàm hổ trợ chuyển đổi số sang chữ số.
99
*
10-
* @param $number
10+
* @param int|float $number
1111
* @param string|null $dictionary
1212
* @return string
1313
*/
1414
function n2w($number, string $dictionary = null): string
1515
{
16-
$currentDictionary = N2W::$dictionary;
17-
N2W::$dictionary = $dictionary;
18-
$result = N2W::toWords($number);
19-
N2W::$dictionary = $currentDictionary;
16+
$currentDictionary = N2WFacade::$dictionary;
17+
N2WFacade::$dictionary = $dictionary;
18+
$result = N2WFacade::toWords($number);
19+
N2WFacade::$dictionary = $currentDictionary;
2020

2121
return $result;
2222
}
@@ -33,12 +33,12 @@ function n2w($number, string $dictionary = null): string
3333
* @param null|string|array $unit
3434
* @return string
3535
*/
36-
function n2c($number, $unit = null, string $dictionary = null): string
36+
function n2c($number, $unit = 'đồng', string $dictionary = null): string
3737
{
38-
$currentDictionary = N2W::$dictionary;
39-
N2W::$dictionary = $dictionary;
40-
$result = N2W::toCurrency($number, $unit);
41-
N2W::$dictionary = $currentDictionary;
38+
$currentDictionary = N2WFacade::$dictionary;
39+
N2WFacade::$dictionary = $dictionary;
40+
$result = N2WFacade::toCurrency($number, $unit);
41+
N2WFacade::$dictionary = $currentDictionary;
4242

4343
return $result;
4444
}

tests/ChangeDictionaryTest.php

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<?php
2+
/**
3+
* @link https://github.com/phpviet/laravel-number-to-words
4+
*
5+
* @copyright (c) PHP Viet
6+
* @license [MIT](https://opensource.org/licenses/MIT)
7+
*/
8+
9+
namespace PHPViet\Laravel\NumberToWords\Tests;
10+
11+
/**
12+
* @author Vuong Minh <vuongxuongminh@gmail.com>
13+
* @since 1.0.0
14+
*/
15+
class ChangeDictionaryTest extends TestCase
16+
{
17+
/**
18+
* @dataProvider dataProvider
19+
*/
20+
public function testTransform($expect, $number)
21+
{
22+
$this->assertEquals($expect, n2w($number, 'south'));
23+
}
24+
25+
26+
public function dataProvider(): array
27+
{
28+
return [
29+
['chín trăm sáu mươi ngàn bốn trăm chín mươi lăm', 960495],
30+
['bảy mươi mốt ngàn năm trăm hai mươi mốt', 71521],
31+
['ba mươi bảy ngàn bảy trăm bảy mươi', 37770],
32+
['bảy trăm mười ngàn chín trăm năm mươi', 710950],
33+
['bốn mươi bảy ngàn một trăm mười tám', 47118],
34+
['chín mươi tám ngàn hai trăm bốn mươi bảy', 98247],
35+
['chín mươi lăm ngàn năm trăm hai mươi hai', 95522],
36+
['sáu trăm sáu mươi ngàn một trăm hai mươi bốn', 660124],
37+
['mười chín ngàn sáu trăm lẻ chín', 19609],
38+
['hai mươi mốt ngàn một trăm năm mươi bảy', 21157],
39+
['ba mươi ngàn sáu trăm năm mươi bốn', 30654],
40+
['bảy trăm ba mươi ngàn năm trăm sáu mươi ba', 730563],
41+
['chín mươi bảy ngàn chín trăm chín mươi mốt', 97991],
42+
['sáu trăm bảy mươi ngàn bảy trăm sáu mươi tám', 670768],
43+
['sáu mươi chín ngàn bảy trăm năm mươi sáu', 69756],
44+
['năm mươi mốt ngàn một trăm hai mươi sáu', 51126],
45+
['ba mươi tám ngàn năm trăm năm mươi ba', 38553],
46+
['hai trăm ba mươi ngàn một trăm năm mươi mốt', 230151],
47+
['hai mươi ba ngàn chín trăm tám mươi tám', 23988],
48+
['ba trăm hai mươi ngàn ba trăm bảy mươi hai', 320372],
49+
['chín mươi ngàn năm trăm sáu mươi sáu', 90566],
50+
['một trăm bốn mươi ngàn hai trăm chín mươi bảy', 140297],
51+
['hai mươi ngàn một trăm sáu mươi sáu', 20166],
52+
['sáu mươi chín ngàn chín trăm bốn mươi sáu', 69946],
53+
['tám trăm bốn mươi ngàn một trăm bốn mươi bảy', 840147],
54+
['bảy trăm bảy mươi ngàn hai trăm mười tám', 770218],
55+
['bảy mươi sáu ngàn tám trăm tám mươi sáu', 76886],
56+
['tám trăm bốn mươi ngàn năm trăm năm mươi tám', 840558],
57+
['ba trăm bảy mươi ngàn bảy trăm lẻ sáu', 370706],
58+
['năm mươi ngàn bảy trăm', 50700],
59+
['chín trăm chín mươi ngàn hai trăm sáu mươi mốt', 990261],
60+
['tám mươi hai ngàn sáu trăm chín mươi bảy', 82697],
61+
['tám mươi hai ngàn hai trăm hai mươi bảy', 82227],
62+
['hai mươi lăm ngàn sáu trăm chín mươi tám', 25698],
63+
['tám mươi ba ngàn tám trăm bảy mươi bảy', 83877],
64+
['ba trăm ngàn hai trăm tám mươi sáu', 300286],
65+
['chín trăm hai mươi ngàn chín trăm sáu mươi mốt', 920961],
66+
['năm trăm mười ngàn sáu trăm tám mươi bốn', 510684],
67+
['sáu trăm sáu mươi ngàn sáu trăm sáu mươi tám', 660668],
68+
['một trăm năm mươi ngàn bảy trăm ba mươi', 150730],
69+
['bảy mươi lăm ngàn một trăm tám mươi tám', 75188],
70+
['năm mươi ngàn ba trăm năm mươi mốt', 50351],
71+
['tám mươi ba ngàn hai trăm bảy mươi', 83270],
72+
['ba mươi sáu ngàn năm trăm bảy mươi lăm', 36575],
73+
['một triệu năm trăm chín mươi chín', 1000599],
74+
['bảy mươi ngàn ba trăm chín mươi tám', 70398],
75+
['chín mươi tám ngàn năm trăm bốn mươi bốn', 98544],
76+
['hai mươi ngàn bảy trăm ba mươi', 20730],
77+
['bảy mươi ngàn bảy trăm sáu mươi chín', 70769],
78+
['năm trăm bốn mươi ngàn năm trăm năm mươi chín', 540559],
79+
['hai ngàn năm trăm tám mươi ba', 2583],
80+
['ba mươi lăm ngàn bảy trăm tám mươi ba', 35783],
81+
['bốn trăm hai mươi ngàn hai trăm tám mươi sáu', 420286],
82+
['sáu trăm bốn mươi ngàn ba trăm chín mươi tám', 640398],
83+
['một trăm chín mươi ngàn một trăm năm mươi bốn', 190154],
84+
['năm mươi lăm ngàn một trăm mười lăm', 55115],
85+
['tám mươi bảy ngàn một trăm bảy mươi sáu', 87176],
86+
['ba trăm bảy mươi ngàn chín trăm chín mươi', 370990],
87+
['hai trăm ba mươi ngàn tám trăm lẻ một', 230801],
88+
['chín mươi ba ngàn ba trăm sáu mươi lăm', 93365],
89+
['hai mươi hai ngàn ba trăm chín mươi sáu', 22396],
90+
['chín mươi bảy ngàn chín trăm hai mươi tám', 97928],
91+
['bảy mươi hai ngàn một trăm tám mươi mốt', 72181],
92+
['sáu trăm ba mươi ngàn bảy trăm chín mươi ba', 630793],
93+
['năm trăm ngàn năm trăm sáu mươi bảy', 500567],
94+
['bảy mươi ngàn ba trăm sáu mươi chín', 70369],
95+
['bảy trăm ba mươi ngàn hai trăm hai mươi chín', 730229],
96+
['tám trăm mười ngàn ba trăm bảy mươi ba', 810373],
97+
['ba mươi mốt ngàn năm trăm ba mươi', 31530],
98+
['tám trăm sáu mươi ngàn ba trăm ba mươi mốt', 860331],
99+
['năm mươi ba ngàn bốn trăm chín mươi ba', 53493],
100+
['bảy trăm sáu mươi ngàn bảy trăm bảy mươi', 760770],
101+
['chín trăm mười ngàn hai trăm mười chín', 910219],
102+
['tám trăm chín mươi ngàn bốn trăm tám mươi', 890480],
103+
['một trăm bốn mươi ngàn năm trăm bốn mươi bảy', 140547],
104+
['một ngàn bảy trăm sáu mươi mốt', 1761],
105+
['tám ngàn hai trăm tám mươi chín', 8289],
106+
['hai trăm sáu mươi ngàn năm trăm hai mươi lăm', 260525],
107+
['hai mươi lăm ngàn ba trăm sáu mươi', 25360],
108+
['bốn mươi tám ngàn bốn trăm lẻ một', 48401],
109+
['năm trăm chín mươi ngàn hai trăm năm mươi bảy', 590257],
110+
['sáu trăm ngàn ba trăm tám mươi bảy', 600387],
111+
['tám trăm chín mươi ngàn sáu trăm tám mươi sáu', 890686],
112+
['năm mươi ngàn hai trăm tám mươi bốn', 50284],
113+
['năm trăm ngàn sáu trăm hai mươi lăm', 500625],
114+
['tám trăm chín mươi ngàn năm trăm sáu mươi chín', 890569],
115+
['hai trăm ngàn chín trăm bốn mươi lăm', 200945],
116+
['bảy trăm bảy mươi ngàn năm trăm hai mươi lăm', 770525],
117+
['sáu mươi bốn ngàn năm trăm mười bảy', 64517],
118+
['sáu mươi ngàn ba trăm mười một', 60311],
119+
['bảy trăm bốn mươi ngàn sáu trăm năm mươi chín', 740659],
120+
['ba trăm mười ngàn bảy trăm sáu mươi bảy', 310767],
121+
['chín mươi hai ngàn ba trăm ba mươi hai', 92332],
122+
['mười ngàn ba trăm ba mươi hai', 10332],
123+
['mười ba ngàn ba trăm mười lăm', 13315],
124+
['bốn trăm tám mươi ngàn tám trăm tám mươi hai', 480882],
125+
['sáu mươi ngàn năm trăm lẻ ba', 60503],
126+
['ba mươi lăm ngàn hai trăm chín mươi bốn', 35294],
127+
['tám mươi tám ngàn bốn trăm hai mươi bảy', 88427],
128+
['sáu trăm năm mươi ngàn sáu trăm bảy mươi ba', 650673],
129+
];
130+
}
131+
132+
}

tests/FacadeTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
/**
3+
* @link https://github.com/phpviet/laravel-number-to-words
4+
*
5+
* @copyright (c) PHP Viet
6+
* @license [MIT](https://opensource.org/licenses/MIT)
7+
*/
8+
9+
namespace PHPViet\Laravel\NumberToWords\Tests;
10+
11+
use N2W;
12+
13+
/**
14+
* @author Vuong Minh <vuongxuongminh@gmail.com>
15+
* @since 1.0.0
16+
*/
17+
class FacadeTest extends TestCase
18+
{
19+
20+
/**
21+
* @dataProvider dataProvider
22+
*/
23+
public function testTransform($expect, $number)
24+
{
25+
$this->assertEquals($expect, N2W::toWords($number));
26+
}
27+
28+
/**
29+
* @dataProvider currencyDataProvider
30+
*/
31+
public function testCurrencyTransform($expect, $number)
32+
{
33+
$this->assertEquals($expect, N2W::toCurrency($number));
34+
}
35+
36+
}

tests/HelpersTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
/**
3+
* @link https://github.com/phpviet/laravel-number-to-words
4+
*
5+
* @copyright (c) PHP Viet
6+
* @license [MIT](https://opensource.org/licenses/MIT)
7+
*/
8+
9+
namespace PHPViet\Laravel\NumberToWords\Tests;
10+
11+
/**
12+
* @author Vuong Minh <vuongxuongminh@gmail.com>
13+
* @since 1.0.0
14+
*/
15+
class HelpersTest extends TestCase
16+
{
17+
18+
/**
19+
* @dataProvider dataProvider
20+
*/
21+
public function testTransform($expect, $number)
22+
{
23+
$this->assertEquals($expect,n2w($number));
24+
}
25+
26+
/**
27+
* @dataProvider currencyDataProvider
28+
*/
29+
public function testCurrencyTransform($expect, $number)
30+
{
31+
$this->assertEquals($expect, n2c($number));
32+
}
33+
34+
}

0 commit comments

Comments
 (0)