diff --git a/tools/protovalidate-conformance/internal/cases/cases_strings.go b/tools/protovalidate-conformance/internal/cases/cases_strings.go index 681d0dc..0470fc2 100644 --- a/tools/protovalidate-conformance/internal/cases/cases_strings.go +++ b/tools/protovalidate-conformance/internal/cases/cases_strings.go @@ -1034,10 +1034,14 @@ func stringSuite() suites.Suite { }, ), }, - "uri/valid": { + "uri/valid/url": { Message: &cases.StringURI{Val: "https://example.com/foo/bar?baz=quux"}, Expected: results.Success(true), }, + "uri/valid/urn": { + Message: &cases.StringURI{Val: "urn:isbn:0451450523"}, + Expected: results.Success(true), + }, "uri/invalid/empty": { Message: &cases.StringURI{Val: ""}, Expected: results.Violations( @@ -1048,8 +1052,18 @@ func stringSuite() suites.Suite { }, ), }, - "uri/invalid/encoding": { - Message: &cases.StringURI{Val: "http://example.com/foo/bar?baz=%x"}, + "uri/invalid/urn/encoding": { + Message: &cases.StringURI{Val: "urn:isbn:0451450523?baz=%x"}, + Expected: results.Violations( + &validate.Violation{ + Field: results.FieldPath("val"), + Rule: results.FieldPath("string.uri"), + ConstraintId: proto.String("string.uri"), + }, + ), + }, + "uri/invalid/urn/no_scheme": { + Message: &cases.StringURI{Val: ":isbn:0451450523"}, Expected: results.Violations( &validate.Violation{ Field: results.FieldPath("val"), @@ -1076,7 +1090,7 @@ func stringSuite() suites.Suite { }, ), }, - "uri/invalid/relative": { + "uri/invalid/url/relative": { Message: &cases.StringURI{Val: "/foo/bar?baz=quux"}, Expected: results.Violations( &validate.Violation{ @@ -1086,7 +1100,7 @@ func stringSuite() suites.Suite { }, ), }, - "uri/invalid/absolute/encoding": { + "uri/invalid/url/absolute/encoding": { Message: &cases.StringURI{Val: "https://example.com/foo/bar?baz=%x"}, Expected: results.Violations( &validate.Violation{ @@ -1096,7 +1110,7 @@ func stringSuite() suites.Suite { }, ), }, - "uri/invalid/relative/encoding": { + "uri/invalid/url/relative/encoding": { Message: &cases.StringURI{Val: "/foo/bar?baz=%x"}, Expected: results.Violations( &validate.Violation{ @@ -1106,15 +1120,19 @@ func stringSuite() suites.Suite { }, ), }, - "uri_ref/valid/absolute": { + "uri_ref/valid/urn": { + Message: &cases.StringURI{Val: "urn:isbn:0451450523"}, + Expected: results.Success(true), + }, + "uri_ref/valid/url/absolute": { Message: &cases.StringURIRef{Val: "https://example.com/foo/bar?baz=quux"}, Expected: results.Success(true), }, - "uri_ref/valid/relative": { + "uri_ref/valid/url/relative": { Message: &cases.StringURIRef{Val: "/foo/bar?baz=quux"}, Expected: results.Success(true), }, - "uri_ref/invalid": { + "uri_ref/invalid/url": { Message: &cases.StringURIRef{Val: "!@#$%^&*"}, Expected: results.Violations( &validate.Violation{ @@ -1124,6 +1142,26 @@ func stringSuite() suites.Suite { }, ), }, + "uri_ref/invalid/urn/encoding": { + Message: &cases.StringURI{Val: "urn:isbn:0451450523?baz=%x"}, + Expected: results.Violations( + &validate.Violation{ + Field: results.FieldPath("val"), + Rule: results.FieldPath("string.uri"), + ConstraintId: proto.String("string.uri"), + }, + ), + }, + "uri_ref/invalid/urn/no_scheme": { + Message: &cases.StringURI{Val: ":isbn:0451450523"}, + Expected: results.Violations( + &validate.Violation{ + Field: results.FieldPath("val"), + Rule: results.FieldPath("string.uri"), + ConstraintId: proto.String("string.uri"), + }, + ), + }, "uri_ref/invalid/not_checked/empty": { Message: &cases.StringNotURIRef{Val: ""}, Expected: results.Success(true),