func checkFeaturesVersions()

in compliance/version.go [65:113]


func checkFeaturesVersions(t *testing.T, fs fs.FS, paths []string) {
	suite := godog.TestSuite{
		Options: &godog.Options{
			Paths:    paths,
			FS:       fs,
			TestingT: t,
			Strict:   false,
		},
	}

	features, err := suite.RetrieveFeatures()
	require.NoError(t, err)

	versionsInChangelog, err := spec.VersionsInChangelog()
	require.NoError(t, err)

	var versions []string
	for _, v := range versionsInChangelog {
		v, _ := v.SetPrerelease("")
		versions = append(versions, v.String())
	}

	validTags := func(tags []*cucumbermessages.Tag, requireTags bool) error {
		if requireTags && len(tags) == 0 {
			return fmt.Errorf("no version tags")
		}
		for _, tag := range tags {
			if tag.Name == "@skip" {
				return nil
			}
			if !slices.Contains(versions, strings.TrimLeft(tag.Name, "@")) {
				return fmt.Errorf("tag indicates an unknown spec version %s", tag.Name)
			}
		}
		return nil
	}

	for _, feature := range features {
		if err := validTags(feature.Feature.Tags, false); err != nil {
			t.Fatalf("Feature %q has an invalid tag: %s", feature.Feature.Name, err)
		}

		for _, child := range feature.Feature.Children {
			if err := validTags(child.Scenario.Tags, true); err != nil {
				t.Fatalf("Scenario %q in feature %q has an invalid tag: %s", child.Scenario.Name, feature.Feature.Name, err)
			}
		}
	}
}