#include "libjsonnet++.h"
#include <fstream>
#include <streambuf>
#include <string>
#include "gtest/gtest.h"
namespace jsonnet {
std::string readFile(const std::string& filename)
{
std::ifstream in(filename);
if (!in.good()){
ADD_FAILURE() << "Could not open: " << filename;
return "";
}
return std::string(std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>());
}
TEST(JsonnetTest, TestEvaluateSnippet)
{
const std::string input = readFile("cpp/testdata/example.jsonnet");
const std::string expected = readFile("cpp/testdata/example_golden.json");
Jsonnet jsonnet;
ASSERT_TRUE(jsonnet.init());
std::string output;
EXPECT_TRUE(jsonnet.evaluateSnippet("snippet", input, &output));
EXPECT_EQ(expected, output);
EXPECT_EQ("", jsonnet.lastError());
}
TEST(JsonnetTest, TestEvaluateInvalidSnippet)
{
const std::string input = readFile("cpp/testdata/invalid.jsonnet");
const std::string error = readFile("cpp/testdata/invalid.out");
Jsonnet jsonnet;
ASSERT_TRUE(jsonnet.init());
std::string output;
EXPECT_FALSE(jsonnet.evaluateSnippet("cpp/testdata/invalid.jsonnet", input, &output));
EXPECT_EQ("", output);
EXPECT_EQ(error, jsonnet.lastError());
}
TEST(JsonnetTest, TestEvaluateFile)
{
const std::string expected = readFile("cpp/testdata/example_golden.json");
Jsonnet jsonnet;
ASSERT_TRUE(jsonnet.init());
std::string output;
EXPECT_TRUE(jsonnet.evaluateFile("cpp/testdata/example.jsonnet", &output));
EXPECT_EQ(expected, output);
EXPECT_EQ("", jsonnet.lastError());
}
TEST(JsonnetTest, TestEvaluateInvalidFile)
{
const std::string expected = readFile("cpp/testdata/invalid.out");
Jsonnet jsonnet;
ASSERT_TRUE(jsonnet.init());
std::string output;
EXPECT_FALSE(jsonnet.evaluateFile("cpp/testdata/invalid.jsonnet", &output));
EXPECT_EQ("", output);
EXPECT_EQ(expected, jsonnet.lastError());
}
TEST(JsonnetTest, TestAddImportPath)
{
const std::string expected = readFile("cpp/testdata/importing_golden.json");
Jsonnet jsonnet;
ASSERT_TRUE(jsonnet.init());
jsonnet.addImportPath("cpp/testdata");
std::string output;
EXPECT_TRUE(jsonnet.evaluateFile("cpp/testdata/importing.jsonnet", &output));
EXPECT_EQ(expected, output);
EXPECT_EQ("", jsonnet.lastError());
}
}