import 'package:test/test.dart'; import 'package:word_count/word_count.dart'; void main() { final wordCount = WordCount(); group('WordCount', () { test('count one word', () { final result = wordCount.countWords('word'); expect(result, equals({'word': 1})); }, skip: false); test('count one of each word', () { final result = wordCount.countWords('one of each'); expect(result, equals({'one': 1, 'of': 1, 'each': 1})); }, skip: false); test('multiple occurrences of a word', () { final result = wordCount.countWords('one fish two fish red fish blue fish'); expect( result, equals({ 'one': 1, 'fish': 4, 'two': 1, 'red': 1, 'blue': 1 })); }, skip: false); test('handles cramped lists', () { final result = wordCount.countWords('one,two,three'); expect(result, equals({'one': 1, 'two': 1, 'three': 1})); }, skip: false); test('handles expanded lists', () { final result = wordCount.countWords('one,\ntwo,\nthree'); expect(result, equals({'one': 1, 'two': 1, 'three': 1})); }, skip: false); test('ignore punctuation', () { final result = wordCount.countWords('car: carpet as java: javascript!!&@\$%^&'); expect( result, equals({ 'car': 1, 'carpet': 1, 'as': 1, 'java': 1, 'javascript': 1 })); }, skip: false); test('include numbers', () { final result = wordCount.countWords('testing, 1, 2 testing'); expect(result, equals({'testing': 2, '1': 1, '2': 1})); }, skip: false); test('normalize case', () { final result = wordCount.countWords('go Go GO Stop stop'); expect(result, equals({'go': 3, 'stop': 2})); }, skip: false); test('with apostrophes', () { final result = wordCount.countWords( '\'First: don\'t laugh. Then: don\'t cry. You\'re getting it.\''); expect( result, equals({ 'first': 1, 'don\'t': 2, 'laugh': 1, 'then': 1, 'cry': 1, 'you\'re': 1, 'getting': 1, 'it': 1 })); }, skip: false); test('with quotations', () { final result = wordCount.countWords('Joe can\'t tell between \'large\' and large.'); expect( result, equals({ 'joe': 1, 'can\'t': 1, 'tell': 1, 'between': 1, 'large': 2, 'and': 1 })); }, skip: false); test('substrings from the beginning', () { final result = wordCount.countWords('Joe can\'t tell between app, apple and a.'); expect( result, equals({ 'joe': 1, 'can\'t': 1, 'tell': 1, 'between': 1, 'app': 1, 'apple': 1, 'and': 1, 'a': 1 })); }, skip: false); test('multiple spaces not detected as a word', () { final result = wordCount.countWords(' multiple whitespaces'); expect(result, equals({'multiple': 1, 'whitespaces': 1})); }, skip: false); test('alternating word separators not detected as a word', () { final result = wordCount.countWords(',\n,one,\n ,two \n \'three\''); expect(result, equals({'one': 1, 'two': 1, 'three': 1})); }, skip: false); test('quotation for word with apostrophe', () { final result = wordCount.countWords('can, can\'t, \'can\'t\''); expect(result, equals({'can': 1, 'can\'t': 2})); }, skip: false); }); }