119 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package phonenumber
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| type testCase struct {
 | |
| 	input     string
 | |
| 	expected  string
 | |
| 	expectErr bool
 | |
| }
 | |
| 
 | |
| var numberTests = []testCase{
 | |
| 	{"(123) 456-7890", "1234567890", false},
 | |
| 	{"123.456.7890", "1234567890", false},
 | |
| 	{"1234567890", "1234567890", false},
 | |
| 	{"12345678901234567", "", true},
 | |
| 	{"21234567890", "", true},
 | |
| 	{"123456789", "", true},
 | |
| }
 | |
| 
 | |
| func TestNumber(t *testing.T) {
 | |
| 	for _, test := range numberTests {
 | |
| 		actual, actualErr := Number(test.input)
 | |
| 		if actual != test.expected {
 | |
| 			t.Errorf("Number(%s): expected [%s], actual: [%s]", test.input, test.expected, actual)
 | |
| 		}
 | |
| 		// if we expect an error and there isn't one
 | |
| 		if test.expectErr && actualErr == nil {
 | |
| 			t.Errorf("Number(%s): expected an error, but error is nil", test.input)
 | |
| 		}
 | |
| 		// if we don't expect an error and there is one
 | |
| 		if !test.expectErr && actualErr != nil {
 | |
| 			t.Errorf("Number(%s): expected no error, but error is: %s", test.input, actualErr)
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkNumber(b *testing.B) {
 | |
| 	b.StopTimer()
 | |
| 	for _, test := range numberTests {
 | |
| 		b.StartTimer()
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			Number(test.input)
 | |
| 		}
 | |
| 		b.StopTimer()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| var areaCodeTests = []testCase{
 | |
| 	{"1234567890", "123", false},
 | |
| 	{"213.456.7890", "213", false},
 | |
| 	{"213.456.7890.2345", "", true},
 | |
| 	{"213.456", "", true},
 | |
| }
 | |
| 
 | |
| func TestAreaCode(t *testing.T) {
 | |
| 	for _, test := range areaCodeTests {
 | |
| 		actual, actualErr := AreaCode(test.input)
 | |
| 		if actual != test.expected {
 | |
| 			t.Errorf("AreaCode(%s): expected [%s], actual: [%s]", test.input, test.expected, actual)
 | |
| 		}
 | |
| 		// if we expect an error and there isn't one
 | |
| 		if test.expectErr && actualErr == nil {
 | |
| 			t.Errorf("AreaCode(%s): expected an error, but error is nil", test.input)
 | |
| 		}
 | |
| 		// if we don't expect an error and there is one
 | |
| 		if !test.expectErr && actualErr != nil {
 | |
| 			t.Errorf("AreaCode(%s): expected no error, but error is: %s", test.input, actualErr)
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAreaCode(b *testing.B) {
 | |
| 	b.StopTimer()
 | |
| 	for _, test := range areaCodeTests {
 | |
| 		b.StartTimer()
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			AreaCode(test.input)
 | |
| 		}
 | |
| 		b.StopTimer()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| var formatTests = []testCase{
 | |
| 	{"1234567890", "(123) 456-7890", false},
 | |
| 	{"11234567890", "(123) 456-7890", false},
 | |
| 	{"112345", "", true},
 | |
| 	{"11234590870986", "", true},
 | |
| }
 | |
| 
 | |
| func TestFormat(t *testing.T) {
 | |
| 	for _, test := range formatTests {
 | |
| 		actual, actualErr := Format(test.input)
 | |
| 		if actual != test.expected {
 | |
| 			t.Errorf("Format(%s): expected [%s], actual: [%s]", test.input, test.expected, actual)
 | |
| 		}
 | |
| 		// if we expect an error and there isn't one
 | |
| 		if test.expectErr && actualErr == nil {
 | |
| 			t.Errorf("Format(%s): expected an error, but error is nil", test.input)
 | |
| 		}
 | |
| 		// if we don't expect an error and there is one
 | |
| 		if !test.expectErr && actualErr != nil {
 | |
| 			t.Errorf("Format(%s): expected no error, but error is: %s", test.input, actualErr)
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkFormat(b *testing.B) {
 | |
| 	b.StopTimer()
 | |
| 	for _, test := range areaCodeTests {
 | |
| 		b.StartTimer()
 | |
| 		for i := 0; i < b.N; i++ {
 | |
| 			Format(test.input)
 | |
| 		}
 | |
| 		b.StopTimer()
 | |
| 	}
 | |
| }
 |