# frozen_string_literal: true require "minitest/autorun" require "dhall/resolve" require "dhall/normalize" class TestResolvers < Minitest::Test def test_default_resolver_path resolver = Dhall::Resolvers::Default.new( path_reader: lambda do |sources| sources.map { |source| Promise.resolve(source) } end ) source = Dhall::Import::AbsolutePath.new("dhall", "common", "x.dhall") promise = source.resolve(resolver) resolver.finish! assert_equal source, promise.sync end def test_default_resolver_path_from_env ENV["__DHALL_IMPORT_TEST"] = "/dhall/common/x.dhall" resolver = Dhall::Resolvers::Default.new( path_reader: lambda do |sources| sources.map { |source| Promise.resolve(source) } end ) source = Dhall::Import::EnvironmentVariable.new("__DHALL_IMPORT_TEST") promise = source.resolve(resolver) resolver.finish! expected = Dhall::Import::AbsolutePath.new("dhall", "common", "x.dhall") assert_equal expected, promise.sync end def test_default_resolver_http resolver = Dhall::Resolvers::Default.new( http_reader: lambda do |sources| sources.map { |source| Promise.resolve(source) } end ) source = Dhall::Import::Http.new(nil, "example.com", "x.dhall", nil) promise = source.resolve(resolver) resolver.finish! assert_equal source, promise.sync end def test_default_resolver_https resolver = Dhall::Resolvers::Default.new( https_reader: lambda do |sources| sources.map { |source| Promise.resolve(source) } end ) source = Dhall::Import::Https.new(nil, "example.com", "x.dhall", nil) promise = source.resolve(resolver) resolver.finish! assert_equal source, promise.sync end def test_default_resolver_https_uses_http resolver = Dhall::Resolvers::Default.new( http_reader: lambda do |sources| sources.map { |source| Promise.resolve(source) } end ) source = Dhall::Import::Https.new(nil, "example.com", "x.dhall", nil) promise = source.resolve(resolver) resolver.finish! assert_equal source, promise.sync end def test_local_only_resolver_rejects_http resolver = Dhall::Resolvers::LocalOnly.new source = Dhall::Import::Http.new(nil, "example.com", "x.dhall", nil) promise = source.resolve(resolver) resolver.finish! assert_raises Dhall::ImportBannedException do promise.sync end end def test_none_resolver_rejects_local resolver = Dhall::Resolvers::None.new source = Dhall::Import::AbsolutePath.new("dhall", "common", "x.dhall") promise = source.resolve(resolver) resolver.finish! assert_raises Dhall::ImportBannedException do promise.sync end end end