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')); }); }); }