blob: c8b2c525ba0ef9f3749c52083c9072bc12682acd [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package bufpluginexec
import (
"testing"
)
import (
"github.com/stretchr/testify/assert"
"google.golang.org/protobuf/types/pluginpb"
)
func TestVersionString(t *testing.T) {
t.Parallel()
assert.Equal(t, "3.11.1-buf", versionString(newVersion(3, 11, 1, "buf")))
assert.Equal(t, "3.15.0", versionString(newVersion(3, 15, 0, "")))
assert.Equal(t, "21.0", versionString(newVersion(21, 0, 0, "")))
assert.Equal(t, "21.1", versionString(newVersion(21, 1, 0, "")))
assert.Equal(t, "21.1-rc-1", versionString(newVersion(21, 1, 0, "rc-1")))
assert.Equal(t, "21.1.1", versionString(newVersion(21, 1, 1, "")))
assert.Equal(t, "21.1.1-rc-1", versionString(newVersion(21, 1, 1, "rc-1")))
}
func TestGetSetExperimentalAllowProto3OptionalFlag(t *testing.T) {
t.Parallel()
assert.False(t, getSetExperimentalAllowProto3OptionalFlag(newVersion(2, 12, 4, "")))
assert.False(t, getSetExperimentalAllowProto3OptionalFlag(newVersion(3, 11, 1, "buf")))
assert.False(t, getSetExperimentalAllowProto3OptionalFlag(newVersion(3, 11, 4, "")))
assert.True(t, getSetExperimentalAllowProto3OptionalFlag(newVersion(3, 12, 1, "")))
assert.True(t, getSetExperimentalAllowProto3OptionalFlag(newVersion(3, 14, 1, "")))
assert.False(t, getSetExperimentalAllowProto3OptionalFlag(newVersion(3, 14, 1, "buf")))
assert.False(t, getSetExperimentalAllowProto3OptionalFlag(newVersion(3, 15, 0, "")))
assert.False(t, getSetExperimentalAllowProto3OptionalFlag(newVersion(21, 0, 0, "")))
}
func TestGetFeatureProto3OptionalSupported(t *testing.T) {
t.Parallel()
assert.False(t, getFeatureProto3OptionalSupported(newVersion(2, 12, 4, "")))
assert.False(t, getFeatureProto3OptionalSupported(newVersion(3, 11, 4, "")))
assert.True(t, getFeatureProto3OptionalSupported(newVersion(3, 11, 1, "buf")))
assert.True(t, getFeatureProto3OptionalSupported(newVersion(3, 12, 1, "")))
assert.True(t, getFeatureProto3OptionalSupported(newVersion(3, 14, 1, "")))
assert.True(t, getFeatureProto3OptionalSupported(newVersion(3, 15, 0, "")))
assert.True(t, getFeatureProto3OptionalSupported(newVersion(21, 0, 0, "")))
}
func TestGetKotlinSupportedAsBuiltin(t *testing.T) {
t.Parallel()
assert.True(t, getKotlinSupportedAsBuiltin(newVersion(3, 11, 1, "buf")))
assert.True(t, getKotlinSupportedAsBuiltin(newVersion(3, 17, 4, "")))
assert.True(t, getKotlinSupportedAsBuiltin(newVersion(21, 1, 0, "")))
assert.True(t, getKotlinSupportedAsBuiltin(newVersion(21, 1, 0, "buf")))
assert.False(t, getKotlinSupportedAsBuiltin(newVersion(3, 12, 1, "")))
assert.False(t, getKotlinSupportedAsBuiltin(newVersion(3, 14, 1, "")))
}
func TestGetJSSupportedAsBuiltin(t *testing.T) {
t.Parallel()
assert.False(t, getJSSupportedAsBuiltin(newVersion(2, 11, 1, "")))
assert.True(t, getJSSupportedAsBuiltin(newVersion(3, 11, 1, "buf")))
assert.True(t, getJSSupportedAsBuiltin(newVersion(3, 17, 4, "")))
assert.True(t, getJSSupportedAsBuiltin(newVersion(3, 20, 1, "")))
assert.False(t, getJSSupportedAsBuiltin(newVersion(3, 21, 1, "")))
assert.False(t, getJSSupportedAsBuiltin(newVersion(3, 22, 1, "")))
assert.False(t, getJSSupportedAsBuiltin(newVersion(21, 1, 0, "")))
assert.True(t, getJSSupportedAsBuiltin(newVersion(21, 1, 0, "buf")))
}
func TestParseVersionForCLIVersion(t *testing.T) {
t.Parallel()
testParseVersionForCLIVersionSuccess(t, "libprotoc 3.14.0", newVersion(3, 14, 0, ""))
testParseVersionForCLIVersionSuccess(t, "libprotoc 3.14.0-rc1", newVersion(3, 14, 0, "rc1"))
testParseVersionForCLIVersionSuccess(t, "libprotoc 3.14.0-rc-1", newVersion(3, 14, 0, "rc-1"))
testParseVersionForCLIVersionSuccess(t, "3.14.0", newVersion(3, 14, 0, ""))
testParseVersionForCLIVersionSuccess(t, "3.14.0-rc1", newVersion(3, 14, 0, "rc1"))
testParseVersionForCLIVersionSuccess(t, "3.14.0-buf", newVersion(3, 14, 0, "buf"))
testParseVersionForCLIVersionSuccess(t, "libprotoc 21.1", newVersion(21, 1, 0, ""))
testParseVersionForCLIVersionSuccess(t, "libprotoc 21.1-rc1", newVersion(21, 1, 0, "rc1"))
testParseVersionForCLIVersionSuccess(t, "libprotoc 21.1-rc-1", newVersion(21, 1, 0, "rc-1"))
testParseVersionForCLIVersionSuccess(t, "21.1", newVersion(21, 1, 0, ""))
testParseVersionForCLIVersionSuccess(t, "21.1-rc1", newVersion(21, 1, 0, "rc1"))
testParseVersionForCLIVersionSuccess(t, "21.1-rc-1", newVersion(21, 1, 0, "rc-1"))
testParseVersionForCLIVersionSuccess(t, "21.1-buf", newVersion(21, 1, 0, "buf"))
testParseVersionForCLIVersionError(t, "libprotoc3.14.0")
testParseVersionForCLIVersionError(t, "libprotoc 3.14.0.1")
}
func testParseVersionForCLIVersionSuccess(
t *testing.T,
value string,
expectedVersion *pluginpb.Version,
) {
version, err := parseVersionForCLIVersion(value)
assert.NoError(t, err)
if err == nil {
assert.Equal(t, expectedVersion, version)
}
}
func testParseVersionForCLIVersionError(
t *testing.T,
value string,
) {
_, err := parseVersionForCLIVersion(value)
assert.Error(t, err)
}