Skip to content

Commit

Permalink
Merge pull request #69 from jradelmo/master
Browse files Browse the repository at this point in the history
Adicionar extensores aos tipos double e int
  • Loading branch information
rubensdemelo committed Nov 29, 2022
2 parents 865bd44 + c63bac5 commit d5873db
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 22 deletions.
1 change: 1 addition & 0 deletions lib/brasil_fields.dart
Expand Up @@ -24,3 +24,4 @@ export 'src/modelos/semana.dart';
export 'src/util/util_data.dart';
export 'src/util/util_brasil_fields.dart';
export 'src/validators/validators.dart';
export 'src/util/extensores.dart';
39 changes: 39 additions & 0 deletions lib/src/util/extensores.dart
@@ -0,0 +1,39 @@
import 'package:intl/intl.dart';

extension BrasiLFields on double {
/// Converte um valor double para centavos com o símbolo de real brasileiro
String get obterCentavos => '${this < 0 ? '-' : ''}R\$ ${(abs() * 100).toInt().toString()}';

/// Converte um valor double para centavos sem o símbolo de real brasileiro
///
String get obterCentavosSemSimbolo => obterCentavos.replaceAll('R\$ ', '');

/// Converte um valor double para real com o símbolo de real brasileiro
///
/// [fracaoDigitos] define a quantidade de casas após a vírgula
String obterReal([int fracaoDigitos = 2]) => NumberFormat.currency(locale: 'pt_BR', decimalDigits: fracaoDigitos, symbol: 'R\$').format(this);

/// Converte um valor double para real com o símbolo de real brasileiro
///
/// [fracaoDigitos] define a quantidade de casas após a vírgula
String obterRealSemSimbolo([int fracaoDigitos = 2]) => obterReal(fracaoDigitos).replaceAll('R\$ ', '');
}

extension BrasilFields on int {
/// Converte um valor inteiro para centavos com o símbolo de real brasileiro
String get obterCentavos => '${this < 0 ? '-' : ''}R\$ ${(abs() * 100).toInt().toString()}';

/// Converte um valor inteiro para centavos sem o símbolo de real brasileiro
///
String get obterCentavosSemSimbolo => obterCentavos.replaceAll('R\$ ', '');

/// Converte um valor inteiro para real
///
/// [fracaoDigitos] define a quantidade de casas após a vírgula
String obterReal([int fracaoDigitos = 2]) => NumberFormat.currency(locale: 'pt_BR', decimalDigits: fracaoDigitos, symbol: 'R\$').format(this);

/// Converte um valor inteiro para real com o símbolo de real brasileiro
///
/// [fracaoDigitos] define a quantidade de casas após a vírgula
String obterRealSemSimbolo([int fracaoDigitos = 2]) => obterReal(fracaoDigitos).replaceAll('R\$ ', '');
}
112 changes: 90 additions & 22 deletions test/util_brasil_fields_test.dart
@@ -1,3 +1,4 @@
import 'package:brasil_fields/src/util/extensores.dart';
import 'package:brasil_fields/src/util/util_brasil_fields.dart';
import 'package:brasil_fields/src/util/util_data.dart';
import 'package:flutter_test/flutter_test.dart';
Expand Down Expand Up @@ -40,7 +41,86 @@ void main() {
const centavos = 'R\$ 11.150,99';
expect(UtilBrasilFields.converterMoedaParaDouble(centavos), 11150.99);
});

test('Obter centavos de um double', () {
double valor = 1590.9;
String valorConvertido = valor.obterCentavos;
expect(valorConvertido, 'R\$ 159090');
});
test('Obter centavos de um double sem o símbolo de real', () {
double valor = 1590.9;
String valorConvertido = valor.obterCentavosSemSimbolo;
expect(valorConvertido, '159090');
});
test('Obter centavos de um double sem o símbolo de real onde o valor é menor que 1', () {
double valor = 0.1;
String valorConvertido = valor.obterCentavosSemSimbolo;
expect(valorConvertido, '10');
});
test('Obter centavos de um double sem o símbolo de real onde o valor é negativos', () {
double valor = -10.5;
String valorConvertido = valor.obterCentavosSemSimbolo;
expect(valorConvertido, '-1050');
});
test('Obter centavos de um double com o símbolo de real onde o valor é negativos', () {
double valor = -10.5;
String valorConvertido = valor.obterCentavos;
expect(valorConvertido, '-R\$ 1050');
});
test('Obter real de um double', () {
double valor = 1590.9;
String valorConvertido = valor.obterReal();
expect(valorConvertido, 'R\$${String.fromCharCode(160)}1.590,90');
});
test('Obter real de um double onde o valor é menor que 100', () {
double valor = 60.0;
String valorConvertido = valor.obterReal();
expect(valorConvertido, 'R\$${String.fromCharCode(160)}60,00');
});
test('Obter real sem símbolo de um double onde o valor é menor que 100', () {
double valor = 60.0;
String valorConvertido = valor.obterRealSemSimbolo();
expect(valorConvertido, '60,00');
});
test('Obter real com tres casas decimais sem símbolo, proveniente de um double', () {
double valor = 2563.55;
String valorConvertido = valor.obterRealSemSimbolo(3);
expect(valorConvertido, '2.563,550');
});
test('Obter real com tres casas decimais de um double', () {
double valor = 560.9;
String valorConvertido = valor.obterReal(3);
expect(valorConvertido, 'R\$${String.fromCharCode(160)}560,900');
});
test('Obter real com tres casas decimais e valor negativo de um double', () {
double valor = -560.9;
String valorConvertido = valor.obterReal(3);
expect(valorConvertido, '-R\$${String.fromCharCode(160)}560,900');
});
test('Obter real com duas casas decimais de um inteiro', () {
int valor = 350000;
String valorConvertido = valor.obterReal(2);
expect(valorConvertido, 'R\$${String.fromCharCode(160)}350.000,00');
});
test('Obter real com tres casas decimais de um inteiro', () {
int valor = 560;
String valorConvertido = valor.obterReal(3);
expect(valorConvertido, 'R\$${String.fromCharCode(160)}560,000');
});
test('Obter centavos com tres casas decimais e sem símbolo de real de um inteiro', () {
int valor = 560;
String valorConvertido = valor.obterCentavosSemSimbolo;
expect(valorConvertido, '56000');
});
test('Obter centavos de um inteiro negativo sem símbolo de real', () {
int valor = -105;
String valorConvertido = valor.obterCentavosSemSimbolo;
expect(valorConvertido, '-10500');
});
test('Obter real de um inteiro negativo sem símbolo de real', () {
int valor = -10900;
String valorConvertido = valor.obterRealSemSimbolo(3);
expect(valorConvertido, '-10.900,000');
});
test('Obter DDD', () {
const telefone = '(99) 8888-7777';
expect(UtilBrasilFields.obterDDD(telefone), '99');
Expand Down Expand Up @@ -149,15 +229,13 @@ void main() {
const real = 85437107.04;
const realFormatado = '85.437.107';

expect(UtilBrasilFields.obterReal(real, moeda: false, decimal: 0),
realFormatado);
expect(UtilBrasilFields.obterReal(real, moeda: false, decimal: 0), realFormatado);
});
test('decimal: 1', () {
const real = 85437107.04;
const realFormatado = '85.437.107,0';

expect(UtilBrasilFields.obterReal(real, moeda: false, decimal: 1),
realFormatado);
expect(UtilBrasilFields.obterReal(real, moeda: false, decimal: 1), realFormatado);
});
});

Expand All @@ -179,15 +257,13 @@ void main() {
const real = -287.04;
const realFormatado = '-287';

expect(UtilBrasilFields.obterReal(real, moeda: false, decimal: 0),
realFormatado);
expect(UtilBrasilFields.obterReal(real, moeda: false, decimal: 0), realFormatado);
});
test('negativo decimal: 1', () {
const real = -287.04;
const realFormatado = '-287,0';

expect(UtilBrasilFields.obterReal(real, moeda: false, decimal: 1),
realFormatado);
expect(UtilBrasilFields.obterReal(real, moeda: false, decimal: 1), realFormatado);
});
});

Expand All @@ -205,28 +281,21 @@ void main() {
group('Obter Telefone', () {
group('com DDD', () {
test('com mascara', () {
expect(
UtilBrasilFields.obterTelefone('00999998877'), '(00) 99999-8877');
expect(UtilBrasilFields.obterTelefone('00999998877'), '(00) 99999-8877');
});

test('sem mascara', () {
expect(
UtilBrasilFields.obterTelefone('(00) 99999-8877', mascara: false),
'00999998877');
expect(UtilBrasilFields.obterTelefone('(00) 99999-8877', mascara: false), '00999998877');
});
});

group('sem DDD', () {
test('com mascara', () {
expect(UtilBrasilFields.obterTelefone('999998877', ddd: false),
'99999-8877');
expect(UtilBrasilFields.obterTelefone('999998877', ddd: false), '99999-8877');
});

test('sem mascara', () {
expect(
UtilBrasilFields.obterTelefone('99999-8877',
ddd: false, mascara: false),
'999998877');
expect(UtilBrasilFields.obterTelefone('99999-8877', ddd: false, mascara: false), '999998877');
});
});
});
Expand All @@ -245,8 +314,7 @@ void main() {
});

test('sem cifrão e 4 casas decimais', () {
expect(UtilBrasilFields.obterReal(50000, moeda: false, decimal: 4),
'50.000,0000');
expect(UtilBrasilFields.obterReal(50000, moeda: false, decimal: 4), '50.000,0000');
});
});

Expand Down

0 comments on commit d5873db

Please sign in to comment.