131 lines
5.2 KiB
Dart
131 lines
5.2 KiB
Dart
import 'package:test/test.dart';
|
|
import 'package:platform_support/platform_support.dart';
|
|
|
|
void main() {
|
|
setUp(() {
|
|
// Reset any custom rules before each test
|
|
Pluralizer.addRule('reset', 'resets');
|
|
});
|
|
|
|
group('Pluralizer', () {
|
|
test('pluralizes regular words', () {
|
|
expect(Pluralizer.plural('book'), equals('books'));
|
|
expect(Pluralizer.plural('cat'), equals('cats'));
|
|
expect(Pluralizer.plural('dog'), equals('dogs'));
|
|
});
|
|
|
|
test('handles words ending in s, ss, sh, ch, x, z', () {
|
|
expect(Pluralizer.plural('bus'), equals('buses'));
|
|
expect(Pluralizer.plural('class'), equals('classes'));
|
|
expect(Pluralizer.plural('dish'), equals('dishes'));
|
|
expect(Pluralizer.plural('watch'), equals('watches'));
|
|
expect(Pluralizer.plural('box'), equals('boxes'));
|
|
expect(Pluralizer.plural('quiz'), equals('quizzes'));
|
|
});
|
|
|
|
test('handles words ending in y', () {
|
|
expect(Pluralizer.plural('city'), equals('cities'));
|
|
expect(Pluralizer.plural('puppy'), equals('puppies'));
|
|
expect(Pluralizer.plural('boy'), equals('boys')); // y after vowel
|
|
expect(Pluralizer.plural('day'), equals('days')); // y after vowel
|
|
});
|
|
|
|
test('handles irregular plurals', () {
|
|
expect(Pluralizer.plural('child'), equals('children'));
|
|
expect(Pluralizer.plural('person'), equals('people'));
|
|
expect(Pluralizer.plural('foot'), equals('feet'));
|
|
expect(Pluralizer.plural('goose'), equals('geese'));
|
|
expect(Pluralizer.plural('criterion'), equals('criteria'));
|
|
});
|
|
|
|
test('handles uncountable words', () {
|
|
expect(Pluralizer.plural('equipment'), equals('equipment'));
|
|
expect(Pluralizer.plural('information'), equals('information'));
|
|
expect(Pluralizer.plural('rice'), equals('rice'));
|
|
expect(Pluralizer.plural('money'), equals('money'));
|
|
expect(Pluralizer.plural('species'), equals('species'));
|
|
});
|
|
|
|
test('handles count parameter', () {
|
|
expect(Pluralizer.plural('book', 1), equals('book'));
|
|
expect(Pluralizer.plural('book', 2), equals('books'));
|
|
expect(Pluralizer.plural('child', 1), equals('child'));
|
|
expect(Pluralizer.plural('child', 2), equals('children'));
|
|
});
|
|
|
|
test('singularizes regular words', () {
|
|
expect(Pluralizer.singular('books'), equals('book'));
|
|
expect(Pluralizer.singular('cats'), equals('cat'));
|
|
expect(Pluralizer.singular('dogs'), equals('dog'));
|
|
});
|
|
|
|
test('singularizes words ending in es', () {
|
|
expect(Pluralizer.singular('buses'), equals('bus'));
|
|
expect(Pluralizer.singular('classes'), equals('class'));
|
|
expect(Pluralizer.singular('dishes'), equals('dish'));
|
|
expect(Pluralizer.singular('watches'), equals('watch'));
|
|
expect(Pluralizer.singular('boxes'), equals('box'));
|
|
});
|
|
|
|
test('singularizes words ending in ies', () {
|
|
expect(Pluralizer.singular('cities'), equals('city'));
|
|
expect(Pluralizer.singular('puppies'), equals('puppy'));
|
|
});
|
|
|
|
test('singularizes irregular plurals', () {
|
|
expect(Pluralizer.singular('children'), equals('child'));
|
|
expect(Pluralizer.singular('people'), equals('person'));
|
|
expect(Pluralizer.singular('feet'), equals('foot'));
|
|
expect(Pluralizer.singular('geese'), equals('goose'));
|
|
expect(Pluralizer.singular('criteria'), equals('criterion'));
|
|
});
|
|
|
|
test('handles custom rules', () {
|
|
Pluralizer.addRule('custom', 'customs');
|
|
expect(Pluralizer.plural('custom'), equals('customs'));
|
|
expect(Pluralizer.singular('customs'), equals('custom'));
|
|
});
|
|
|
|
test('handles custom irregular words', () {
|
|
Pluralizer.addIrregular('octopus', 'octopi');
|
|
expect(Pluralizer.plural('octopus'), equals('octopi'));
|
|
expect(Pluralizer.singular('octopi'), equals('octopus'));
|
|
});
|
|
|
|
test('handles custom uncountable words', () {
|
|
Pluralizer.addUncountable('water');
|
|
expect(Pluralizer.plural('water'), equals('water'));
|
|
expect(Pluralizer.singular('water'), equals('water'));
|
|
});
|
|
|
|
test('preserves case', () {
|
|
expect(Pluralizer.plural('Book'), equals('Books'));
|
|
expect(Pluralizer.plural('BOOK'), equals('BOOKS'));
|
|
expect(Pluralizer.singular('Books'), equals('Book'));
|
|
expect(Pluralizer.singular('BOOKS'), equals('BOOK'));
|
|
});
|
|
|
|
test('detects plural words', () {
|
|
expect(Pluralizer.isPlural('books'), isTrue);
|
|
expect(Pluralizer.isPlural('children'), isTrue);
|
|
expect(Pluralizer.isPlural('book'), isFalse);
|
|
expect(Pluralizer.isPlural('child'), isFalse);
|
|
});
|
|
|
|
test('detects singular words', () {
|
|
expect(Pluralizer.isSingular('book'), isTrue);
|
|
expect(Pluralizer.isSingular('child'), isTrue);
|
|
expect(Pluralizer.isSingular('books'), isFalse);
|
|
expect(Pluralizer.isSingular('children'), isFalse);
|
|
});
|
|
|
|
test('handles academic words', () {
|
|
expect(Pluralizer.plural('analysis'), equals('analyses'));
|
|
expect(Pluralizer.plural('datum'), equals('data'));
|
|
expect(Pluralizer.plural('thesis'), equals('theses'));
|
|
expect(Pluralizer.singular('analyses'), equals('analysis'));
|
|
expect(Pluralizer.singular('data'), equals('datum'));
|
|
expect(Pluralizer.singular('theses'), equals('thesis'));
|
|
});
|
|
});
|
|
}
|