github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/shared/web_features_test.go (about) 1 // Copyright 2024 The WPT Dashboard Project. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 //go:build small 6 7 package shared 8 9 import ( 10 "context" 11 "errors" 12 "io" 13 "strings" 14 "testing" 15 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func TestWebFeaturesData_TestMatchesWithWebFeature(t *testing.T) { 20 // Test cases for TestMatchesWithWebFeature 21 tests := []struct { 22 name string 23 data WebFeaturesData 24 test string 25 webFeature string 26 expected bool 27 }{ 28 { 29 name: "test matches with web feature", 30 data: WebFeaturesData{"test1": map[string]interface{}{"feature1": nil, "feature2": nil}}, 31 test: "test1", 32 webFeature: "feature1", 33 expected: true, 34 }, 35 { 36 name: "test doesn't match with web feature", 37 data: WebFeaturesData{"test1": map[string]interface{}{"feature1": nil, "feature2": nil}}, 38 test: "test1", 39 webFeature: "feature3", 40 expected: false, 41 }, 42 { 43 name: "test not present in data", 44 data: WebFeaturesData{}, 45 test: "test1", 46 webFeature: "feature1", 47 expected: false, 48 }, 49 } 50 51 for _, tc := range tests { 52 t.Run(tc.name, func(t *testing.T) { 53 result := tc.data.TestMatchesWithWebFeature(tc.test, tc.webFeature) 54 assert.Equal(t, result, tc.expected) 55 }) 56 } 57 } 58 59 func TestWebFeaturesManifestJSONParser_Parse(t *testing.T) { 60 // Test cases for Parse 61 tests := []struct { 62 name string 63 inputJSON string 64 expectedData WebFeaturesData 65 expectedError error 66 }{ 67 { 68 name: "valid manifest version 1", 69 inputJSON: `{"version": 1, "data": {"feature1": ["/test1", "/test2"], "feature2": ["/test1", "/test3"]}}`, 70 expectedData: WebFeaturesData{ 71 "/test1": map[string]interface{}{ 72 "feature1": nil, 73 "feature2": nil, 74 }, 75 "/test2": map[string]interface{}{ 76 "feature1": nil, 77 }, 78 "/test3": map[string]interface{}{ 79 "feature2": nil, 80 }, 81 }, 82 expectedError: nil, 83 }, 84 { 85 name: "invalid manifest JSON", 86 inputJSON: `{"version": 1, "data": invalid}`, 87 expectedData: nil, 88 expectedError: errBadWebFeaturesManifestJSON, 89 }, 90 { 91 name: "invalid manifest v1 JSON", 92 inputJSON: `{"version": 1, "data": "invalid"}`, 93 expectedData: nil, 94 expectedError: errUnexpectedWebFeaturesManifestV1Format, 95 }, 96 { 97 name: "unknown manifest version", 98 inputJSON: `{"version": 2}`, 99 expectedData: nil, 100 expectedError: errUnknownWebFeaturesManifestVersion, 101 }, 102 } 103 104 for _, tc := range tests { 105 t.Run(tc.name, func(t *testing.T) { 106 parser := webFeaturesManifestJSONParser{} 107 r := io.NopCloser(strings.NewReader(tc.inputJSON)) 108 data, err := parser.Parse(context.Background(), r) 109 if !errors.Is(err, tc.expectedError) { 110 t.Errorf("Parse() returned unexpected error: (%v). expected error: (%v).", err, tc.expectedError) 111 } 112 assert.Equal(t, tc.expectedData, data) 113 }) 114 } 115 } 116 117 func TestWebFeaturesManifestV1Data_prepareTestWebFeatureFilter(t *testing.T) { 118 // Test cases for prepareTestWebFeatureFilter 119 data := webFeaturesManifestV1Data{ 120 "feature1": []string{ 121 "/test1", 122 "/test2", 123 }, 124 "feature2": []string{ 125 "/test2", 126 }} 127 expectedResult := WebFeaturesData{ 128 "/test1": {"feature1": nil}, 129 "/test2": {"feature1": nil, "feature2": nil}, 130 } 131 result := data.prepareTestWebFeatureFilter() 132 assert.Equal(t, expectedResult, result) 133 }