platform/packages/support/test/pluralizer_test.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'));
});
});
}