212 lines
6.6 KiB
Dart
212 lines
6.6 KiB
Dart
import 'package:test/test.dart';
|
|
import 'package:platform_support/platform_support.dart';
|
|
|
|
void main() {
|
|
group('Stringable', () {
|
|
late Stringable str;
|
|
|
|
setUp(() {
|
|
str = Stringable('hello world');
|
|
});
|
|
|
|
test('creates instance from string', () {
|
|
expect(str.toString(), equals('hello world'));
|
|
});
|
|
|
|
test('converts to camel case', () {
|
|
str = Stringable('hello_world');
|
|
expect(str.camel().toString(), equals('helloWorld'));
|
|
});
|
|
|
|
test('converts to studly case', () {
|
|
str = Stringable('hello_world');
|
|
expect(str.studly().toString(), equals('HelloWorld'));
|
|
});
|
|
|
|
test('converts to snake case', () {
|
|
str = Stringable('helloWorld');
|
|
expect(str.snake().toString(), equals('hello_world'));
|
|
expect(str.snake('-').toString(), equals('hello-world'));
|
|
});
|
|
|
|
test('converts to kebab case', () {
|
|
str = Stringable('helloWorld');
|
|
expect(str.kebab().toString(), equals('hello-world'));
|
|
});
|
|
|
|
test('converts to title case', () {
|
|
expect(str.title().toString(), equals('Hello World'));
|
|
});
|
|
|
|
test('converts to lower case', () {
|
|
str = Stringable('HELLO WORLD');
|
|
expect(str.lower().toString(), equals('hello world'));
|
|
});
|
|
|
|
test('converts to upper case', () {
|
|
expect(str.upper().toString(), equals('HELLO WORLD'));
|
|
});
|
|
|
|
test('generates slug', () {
|
|
str = Stringable('Hello World!');
|
|
expect(str.slug().toString(), equals('hello-world'));
|
|
expect(str.slug('_').toString(), equals('hello_world'));
|
|
});
|
|
|
|
test('converts to ASCII', () {
|
|
str = Stringable('café');
|
|
expect(str.ascii().toString(), equals('cafe'));
|
|
});
|
|
|
|
test('checks if string starts with', () {
|
|
expect(str.startsWith('hello'), isTrue);
|
|
expect(str.startsWith('world'), isFalse);
|
|
});
|
|
|
|
test('checks if string ends with', () {
|
|
expect(str.endsWith('world'), isTrue);
|
|
expect(str.endsWith('hello'), isFalse);
|
|
});
|
|
|
|
test('finishes string with value', () {
|
|
str = Stringable('hello');
|
|
expect(str.finish('!').toString(), equals('hello!'));
|
|
expect(str.finish('!').finish('!').toString(), equals('hello!'));
|
|
});
|
|
|
|
test('starts string with value', () {
|
|
str = Stringable('world');
|
|
expect(str.start('hello ').toString(), equals('hello world'));
|
|
expect(str.start('hello ').start('hello ').toString(),
|
|
equals('hello world'));
|
|
});
|
|
|
|
test('checks if string contains value', () {
|
|
expect(str.contains('hello'), isTrue);
|
|
expect(str.contains('goodbye'), isFalse);
|
|
});
|
|
|
|
test('gets string length', () {
|
|
str = Stringable('hello');
|
|
expect(str.getLength(), equals(5));
|
|
});
|
|
|
|
test('limits string length', () {
|
|
expect(str.limit(5).toString(), equals('hello...'));
|
|
expect(str.limit(5, '!').toString(), equals('hello!'));
|
|
});
|
|
|
|
test('converts to and from base64', () {
|
|
final base64 = str.toBase64();
|
|
expect(base64.fromBase64().toString(), equals('hello world'));
|
|
});
|
|
|
|
test('parses callback string', () {
|
|
str = Stringable('Class@method');
|
|
expect(str.parseCallback(), equals(['Class', 'method']));
|
|
expect(str.parseCallback('#'), isNull);
|
|
});
|
|
|
|
test('masks string', () {
|
|
expect(str.mask(5).toString(), equals('hello******'));
|
|
str = Stringable('hello world');
|
|
expect(str.mask(5, 3, '#').toString(), equals('hello###rld'));
|
|
});
|
|
|
|
test('pads string', () {
|
|
str = Stringable('hello');
|
|
var padded = str.padRight(6);
|
|
expect(padded.toString(), equals('hello '));
|
|
str = Stringable('hello');
|
|
padded = str.padLeft(6);
|
|
expect(padded.toString(), equals(' hello'));
|
|
str = Stringable('hello');
|
|
padded = str.padBoth(7);
|
|
expect(padded.toString(), equals(' hello '));
|
|
});
|
|
|
|
test('splits string', () {
|
|
expect(str.split(' '), equals(['hello', 'world']));
|
|
});
|
|
|
|
test('gets substring', () {
|
|
expect(str.substr(0, 5).toString(), equals('hello'));
|
|
str = Stringable('hello world');
|
|
expect(str.substr(6).toString(), equals('world'));
|
|
});
|
|
|
|
test('replaces string', () {
|
|
expect(str.replace('hello', 'hi').toString(), equals('hi world'));
|
|
expect(str.replaceFirst('o', 'a').toString(), equals('hi warld'));
|
|
expect(str.replaceLast('o', 'a').toString(), equals('hi warld'));
|
|
});
|
|
|
|
test('converts to boolean', () {
|
|
expect(Stringable('true').toBoolean(), isTrue);
|
|
expect(Stringable('1').toBoolean(), isTrue);
|
|
expect(Stringable('yes').toBoolean(), isTrue);
|
|
expect(Stringable('on').toBoolean(), isTrue);
|
|
expect(Stringable('false').toBoolean(), isFalse);
|
|
expect(Stringable('0').toBoolean(), isFalse);
|
|
expect(Stringable('no').toBoolean(), isFalse);
|
|
expect(Stringable('off').toBoolean(), isFalse);
|
|
});
|
|
|
|
test('trims string', () {
|
|
str = Stringable(' hello ');
|
|
expect(str.trim().toString(), equals('hello'));
|
|
expect(str.trimChars(' h').toString(), equals('ello'));
|
|
});
|
|
|
|
test('gets string between delimiters', () {
|
|
str = Stringable('[hello] world');
|
|
expect(str.between('[', ']').toString(), equals('hello'));
|
|
});
|
|
|
|
test('gets string before and after', () {
|
|
expect(Stringable('hello world').before(' ').toString(), equals('hello'));
|
|
expect(Stringable('hello world').after(' ').toString(), equals('world'));
|
|
expect(Stringable('hello').beforeLast('o').toString(), equals('hell'));
|
|
expect(
|
|
Stringable('hello world').afterLast('o').toString(), equals('rld'));
|
|
});
|
|
|
|
test('checks if string matches pattern', () {
|
|
expect(str.matches(RegExp(r'hello \w+')), isTrue);
|
|
expect(str.matches(RegExp(r'goodbye \w+')), isFalse);
|
|
});
|
|
|
|
test('supports method chaining', () {
|
|
final result = str.upper().replace(' ', '-').limit(7);
|
|
expect(result.toString(), equals('HELLO-W...'));
|
|
});
|
|
|
|
test('supports tap for side effects', () {
|
|
var sideEffect = '';
|
|
str = Stringable('hello')
|
|
..tap((s) => sideEffect = s.toString())
|
|
..upper();
|
|
|
|
expect(sideEffect, equals('hello'));
|
|
expect(str.toString(), equals('HELLO'));
|
|
});
|
|
|
|
test('supports when/unless conditions', () {
|
|
str = Stringable('hello');
|
|
|
|
str.when(true, (self, _) => self.upper());
|
|
expect(str.toString(), equals('HELLO'));
|
|
|
|
str.unless(true, (self, _) => self.lower());
|
|
expect(str.toString(), equals('HELLO'));
|
|
|
|
str.unless(false, (self, _) => self.lower());
|
|
expect(str.toString(), equals('hello'));
|
|
});
|
|
|
|
test('supports dump and dd', () {
|
|
expect(() => str.dump(), returnsNormally);
|
|
expect(() => str.dd(), throwsException);
|
|
});
|
|
});
|
|
}
|