mirror of https://github.com/pulumi/pulumi.git
104 lines
3.2 KiB
Go
104 lines
3.2 KiB
Go
// Copyright 2022-2024, Pulumi Corporation.
|
|
//
|
|
// Licensed 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 report_test
|
|
|
|
import (
|
|
"bytes"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/pulumi/pulumi/pkg/v3/codegen/dotnet"
|
|
"github.com/pulumi/pulumi/pkg/v3/codegen/hcl2/syntax"
|
|
"github.com/pulumi/pulumi/pkg/v3/codegen/nodejs"
|
|
"github.com/pulumi/pulumi/pkg/v3/codegen/pcl"
|
|
"github.com/pulumi/pulumi/pkg/v3/codegen/report"
|
|
"github.com/pulumi/pulumi/pkg/v3/codegen/testing/utils"
|
|
"github.com/pulumi/pulumi/pkg/v3/version"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var testdataPath = filepath.Join("..", "testing", "test", "testdata")
|
|
|
|
func TestReportExample(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
reporter := report.New("example", version.Version)
|
|
defer reporter.Close()
|
|
|
|
examples := []struct {
|
|
title string
|
|
body string
|
|
}{
|
|
{"Our basic bucket", `resource bucket "aws:s3:BucketV2" { }`},
|
|
{"A resource group", `resource group "azure:core:ResourceGroup" { location: "westus2" }`},
|
|
{"Might not bind", `resource foo "not:a:Resource" { foo: "bar" }`},
|
|
}
|
|
for _, example := range examples {
|
|
parser := syntax.NewParser()
|
|
err := parser.ParseFile(bytes.NewReader([]byte(example.body)), example.title)
|
|
require.NoError(t, err, "parse failed")
|
|
program, diags, err := pcl.BindProgram(parser.Files, pcl.PluginHost(utils.NewHost(testdataPath)))
|
|
if err != nil || diags.HasErrors() {
|
|
reporter.Report(example.title, "", parser.Files, diags, err)
|
|
continue
|
|
}
|
|
|
|
langs := []string{"dotnet", "nodejs"}
|
|
for i, genFn := range []report.GenerateProgramFn{dotnet.GenerateProgram, nodejs.GenerateProgram} {
|
|
program, diags, err := report.WrapGen(reporter, example.title, langs[i], parser.Files, genFn)(program)
|
|
handleAsNormal(program, diags, err)
|
|
}
|
|
}
|
|
|
|
assert.Equal(t, report.Summary{
|
|
Name: "example",
|
|
Stats: report.Stats{
|
|
NumConversions: 5,
|
|
Successes: 4,
|
|
},
|
|
Languages: map[string]*report.Language{
|
|
"": {
|
|
Stats: report.Stats{
|
|
NumConversions: 1,
|
|
Successes: 0,
|
|
},
|
|
GoErrors: map[string]string{
|
|
"Might not bind": "error: could not locate a compatible plugin in " +
|
|
"deploytest, the makefile and & constructor of the plugin host " +
|
|
"must define the location of the schema",
|
|
},
|
|
Files: map[string][]report.File{
|
|
"Might not bind": {{Name: "Might not bind", Body: "resource foo \"not:a:Resource\" { foo: \"bar\" }"}},
|
|
},
|
|
},
|
|
"dotnet": {
|
|
Stats: report.Stats{
|
|
NumConversions: 2,
|
|
Successes: 2,
|
|
},
|
|
},
|
|
"nodejs": {
|
|
Stats: report.Stats{
|
|
NumConversions: 2,
|
|
Successes: 2,
|
|
},
|
|
},
|
|
},
|
|
}, reporter.Summary())
|
|
}
|
|
|
|
func handleAsNormal(args ...interface{}) {}
|