summaryrefslogtreecommitdiff
path: root/dhall/tests
diff options
context:
space:
mode:
authorNadrieril Feneanar2020-03-05 16:20:07 +0000
committerGitHub2020-03-05 16:20:07 +0000
commit3f9194f47185fe30c9e410aa7c5e651df9694b3f (patch)
tree6d24b2e824822134da4976b65b413dc09ca4e567 /dhall/tests
parent2ca97e97f1718141d826a78ab3da8197b2d55c69 (diff)
parent8e6b020ba1426c215382a81395b809b688fa7726 (diff)
Merge pull request #139 from Nadrieril/missing-features
Implement a bunch of missing features
Diffstat (limited to '')
-rw-r--r--dhall/tests/import/data/cycle.dhall1
-rw-r--r--dhall/tests/import/data/doesNotTypecheck.dhall1
-rw-r--r--dhall/tests/import/data/example.txt1
-rw-r--r--dhall/tests/import/data/fieldOrder/1.dhall1
-rw-r--r--dhall/tests/import/data/fieldOrder/2.dhall1
-rw-r--r--dhall/tests/import/data/importBoundary.dhall3
-rw-r--r--dhall/tests/import/data/nested.dhall1
-rw-r--r--dhall/tests/import/data/referentiallyOpaque.dhall18
-rw-r--r--dhall/tests/import/data/simple.dhall1
-rw-r--r--dhall/tests/import/data/simpleLocation.dhall1
-rw-r--r--dhall/tests/import/failure/alternativeEnv.txt1
-rw-r--r--dhall/tests/import/failure/alternativeEnvMissing.txt1
-rw-r--r--dhall/tests/import/failure/cycle.txt2
-rw-r--r--dhall/tests/import/failure/missing.txt1
-rw-r--r--dhall/tests/import/failure/referentiallyInsane.txt1
-rw-r--r--dhall/tests/import/failure/unit/EnvUnset.dhall1
-rw-r--r--dhall/tests/import/failure/unit/EnvUnset.txt1
-rw-r--r--dhall/tests/import/failure/unit/EnvUnsetAsText.dhall1
-rw-r--r--dhall/tests/import/failure/unit/EnvUnsetAsText.txt1
-rw-r--r--dhall/tests/import/success/unit/AlternativeChain1A.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeChain1B.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeChain2A.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeChain2B.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeEnvA.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeEnvB.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeHashMismatchA.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeHashMismatchB.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeImportErrorA.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeImportErrorB.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeNestedImportErrorA.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeNestedImportErrorB.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeNoError1A.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeNoError1B.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeNoError2A.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeNoError2B.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeNoError3A.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeNoError3B.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeParseErrorA.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeParseErrorB.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeSubExprA.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeSubExprB.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeTypeErrorA.dhall1
-rw-r--r--dhall/tests/import/success/unit/AlternativeTypeErrorB.dhall1
-rw-r--r--dhall/tests/import/success/unit/AsTextA.dhall1
-rw-r--r--dhall/tests/import/success/unit/AsTextB.dhall3
-rw-r--r--dhall/tests/import/success/unit/EnvSetA.dhall1
-rw-r--r--dhall/tests/import/success/unit/EnvSetAsTextA.dhall1
-rw-r--r--dhall/tests/import/success/unit/EnvSetAsTextB.dhall1
-rw-r--r--dhall/tests/import/success/unit/EnvSetB.dhall1
-rw-r--r--dhall/tests/import/success/unit/NormalizeA.dhall1
-rw-r--r--dhall/tests/import/success/unit/NormalizeB.dhall1
-rw-r--r--dhall/tests/import/success/unit/RemoteAsTextA.dhall1
-rw-r--r--dhall/tests/import/success/unit/RemoteAsTextB.dhall3
-rw-r--r--dhall/tests/import/success/unit/SimpleA.dhall1
-rw-r--r--dhall/tests/import/success/unit/SimpleB.dhall1
-rw-r--r--dhall/tests/import/success/unit/SimpleRemoteA.dhall1
-rw-r--r--dhall/tests/import/success/unit/SimpleRemoteB.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/AbsoluteA.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/AbsoluteB.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize1A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize1B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize2A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize2B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize3A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize3B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize4A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize4B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize5A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Canonicalize5B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/Chain1A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Chain1B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/Chain2A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Chain2B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/Chain3A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Chain3B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/DontTryResolvingA.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/DontTryResolvingB.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/EnvA.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/EnvB.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/HashA.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/HashB.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/HomeA.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/HomeB.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/MissingA.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/MissingB.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Relative1A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Relative1B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/Relative2A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/Relative2B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteA.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteB.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteCanonicalize1A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteCanonicalize1B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteCanonicalize2A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteCanonicalize2B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteCanonicalize3A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteCanonicalize3B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteCanonicalize4A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteCanonicalize4B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteChain1A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteChain1B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteChain2A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteChain2B.dhall2
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteChain3A.dhall1
-rw-r--r--dhall/tests/import/success/unit/asLocation/RemoteChain3B.dhall2
-rw-r--r--dhall/tests/normalization/success/regression/NaturalFoldExtraArgA.dhall1
-rw-r--r--dhall/tests/normalization/success/regression/NaturalFoldExtraArgB.dhall1
-rw-r--r--dhall/tests/normalization/success/regression/TrickyBinderIdentityA.dhall1
-rw-r--r--dhall/tests/normalization/success/regression/TrickyBinderIdentityB.dhall1
-rw-r--r--dhall/tests/normalization/success/unit/TextLitNested1A.dhall1
-rw-r--r--dhall/tests/normalization/success/unit/TextLitNested1B.dhall1
-rw-r--r--dhall/tests/normalization/success/unit/TextLitNested2A.dhall1
-rw-r--r--dhall/tests/normalization/success/unit/TextLitNested2B.dhall1
-rw-r--r--dhall/tests/normalization/success/unit/TextLitNested3A.dhall1
-rw-r--r--dhall/tests/normalization/success/unit/TextLitNested3B.dhall1
-rw-r--r--dhall/tests/normalization/success/unit/TextShowEmptyA.dhall1
-rw-r--r--dhall/tests/normalization/success/unit/TextShowEmptyB.dhall1
-rw-r--r--dhall/tests/parser/failure/assertBinding.txt6
-rw-r--r--dhall/tests/parser/failure/spacing/AssertNoSpace.txt6
-rw-r--r--dhall/tests/parser/failure/unit/AssertNoAnnotation.dhall1
-rw-r--r--dhall/tests/parser/failure/unit/AssertNoAnnotation.txt6
-rw-r--r--dhall/tests/parser/success/unit/EmptyRecordLiteralA.dhall1
-rw-r--r--dhall/tests/parser/success/unit/EmptyRecordLiteralB.dhallb1
-rw-r--r--dhall/tests/parser/success/unit/EmptyRecordLiteralB.diag1
-rw-r--r--dhall/tests/parser/success/unit/LetAnnotA.dhall1
-rw-r--r--dhall/tests/parser/success/unit/LetAnnotB.dhallbbin0 -> 17 bytes
-rw-r--r--dhall/tests/parser/success/unit/LetAnnotB.diag1
-rw-r--r--dhall/tests/parser/success/unit/LetNoAnnotA.dhall1
-rw-r--r--dhall/tests/parser/success/unit/LetNoAnnotB.dhallbbin0 -> 14 bytes
-rw-r--r--dhall/tests/parser/success/unit/LetNoAnnotB.diag1
-rw-r--r--dhall/tests/parser/success/unit/ToMapA.dhall1
-rw-r--r--dhall/tests/parser/success/unit/ToMapAnnotA.dhall1
-rw-r--r--dhall/tests/parser/success/unit/ToMapAnnotB.dhallbbin0 -> 11 bytes
-rw-r--r--dhall/tests/parser/success/unit/ToMapAnnotB.diag1
-rw-r--r--dhall/tests/parser/success/unit/ToMapB.dhallbbin0 -> 7 bytes
-rw-r--r--dhall/tests/parser/success/unit/ToMapB.diag1
-rw-r--r--dhall/tests/parser/success/unit/VariableQuotedWithSpaceA.dhall1
-rw-r--r--dhall/tests/parser/success/unit/VariableQuotedWithSpaceB.dhallbbin0 -> 6 bytes
-rw-r--r--dhall/tests/parser/success/unit/VariableQuotedWithSpaceB.diag1
-rw-r--r--dhall/tests/type-inference/failure/unit/FunctionTypeOutputTypeNotAType.dhall1
-rw-r--r--dhall/tests/type-inference/failure/unit/FunctionTypeOutputTypeNotAType.txt7
-rw-r--r--dhall/tests/type-inference/failure/unit/LetInSort.dhall1
-rw-r--r--dhall/tests/type-inference/failure/unit/LetInSort.txt6
-rw-r--r--dhall/tests/type-inference/failure/unit/MergeBool.dhall1
-rw-r--r--dhall/tests/type-inference/failure/unit/MergeBool.txt6
-rw-r--r--dhall/tests/type-inference/failure/unit/NestedAnnotInnerWrong.dhall1
-rw-r--r--dhall/tests/type-inference/failure/unit/NestedAnnotInnerWrong.txt6
-rw-r--r--dhall/tests/type-inference/failure/unit/NestedAnnotOuterWrong.dhall1
-rw-r--r--dhall/tests/type-inference/failure/unit/NestedAnnotOuterWrong.txt6
-rw-r--r--dhall/tests/type-inference/success/CacheImportsA.dhall6
-rw-r--r--dhall/tests/type-inference/success/CacheImportsB.dhall1
-rw-r--r--dhall/tests/type-inference/success/CacheImportsCanonicalizeA.dhall5
-rw-r--r--dhall/tests/type-inference/success/CacheImportsCanonicalizeB.dhall1
-rw-r--r--dhall/tests/type-inference/success/regression/LambdaInLetScoping1A.dhall1
-rw-r--r--dhall/tests/type-inference/success/regression/LambdaInLetScoping1B.dhall1
-rw-r--r--dhall/tests/type-inference/success/regression/LambdaInLetScoping2A.dhall1
-rw-r--r--dhall/tests/type-inference/success/regression/LambdaInLetScoping2B.dhall1
-rw-r--r--dhall/tests/type-inference/success/regression/RecursiveRecordTypeMergeTripleCollisionA.dhall1
-rw-r--r--dhall/tests/type-inference/success/regression/RecursiveRecordTypeMergeTripleCollisionB.dhall1
-rw-r--r--dhall/tests/type-inference/success/regression/TodoA.dhall1
-rw-r--r--dhall/tests/type-inference/success/regression/TodoB.dhall1
161 files changed, 248 insertions, 4 deletions
diff --git a/dhall/tests/import/data/cycle.dhall b/dhall/tests/import/data/cycle.dhall
new file mode 100644
index 0000000..c370a8d
--- /dev/null
+++ b/dhall/tests/import/data/cycle.dhall
@@ -0,0 +1 @@
+../failure/cycle.dhall
diff --git a/dhall/tests/import/data/doesNotTypecheck.dhall b/dhall/tests/import/data/doesNotTypecheck.dhall
new file mode 100644
index 0000000..b748e2d
--- /dev/null
+++ b/dhall/tests/import/data/doesNotTypecheck.dhall
@@ -0,0 +1 @@
+0 0
diff --git a/dhall/tests/import/data/example.txt b/dhall/tests/import/data/example.txt
new file mode 100644
index 0000000..af5626b
--- /dev/null
+++ b/dhall/tests/import/data/example.txt
@@ -0,0 +1 @@
+Hello, world!
diff --git a/dhall/tests/import/data/fieldOrder/1.dhall b/dhall/tests/import/data/fieldOrder/1.dhall
new file mode 100644
index 0000000..797e071
--- /dev/null
+++ b/dhall/tests/import/data/fieldOrder/1.dhall
@@ -0,0 +1 @@
+{ foo = 1, bar = True }
diff --git a/dhall/tests/import/data/fieldOrder/2.dhall b/dhall/tests/import/data/fieldOrder/2.dhall
new file mode 100644
index 0000000..c16b568
--- /dev/null
+++ b/dhall/tests/import/data/fieldOrder/2.dhall
@@ -0,0 +1 @@
+{ bar = True, foo = 1 }
diff --git a/dhall/tests/import/data/importBoundary.dhall b/dhall/tests/import/data/importBoundary.dhall
new file mode 100644
index 0000000..e6f1074
--- /dev/null
+++ b/dhall/tests/import/data/importBoundary.dhall
@@ -0,0 +1,3 @@
+-- This file contains a free variable. This should be a type error, even if the variable
+-- is in scope in the importing expression
+x
diff --git a/dhall/tests/import/data/nested.dhall b/dhall/tests/import/data/nested.dhall
new file mode 100644
index 0000000..bf88f65
--- /dev/null
+++ b/dhall/tests/import/data/nested.dhall
@@ -0,0 +1 @@
+{ x = ./simple.dhall sha256:15f52ecf91c94c1baac02d5a4964b2ed8fa401641a2c8a95e8306ec7c1e3b8d2 }
diff --git a/dhall/tests/import/data/referentiallyOpaque.dhall b/dhall/tests/import/data/referentiallyOpaque.dhall
new file mode 100644
index 0000000..ff33765
--- /dev/null
+++ b/dhall/tests/import/data/referentiallyOpaque.dhall
@@ -0,0 +1,18 @@
+{- This is a "referentially opaque" import (i.e. an import that is not
+ globally addressable), which cannot be imported by a "referentially
+ transparent" import (i.e. an import that is globally addressable).
+
+ This test file is used in a failing test to verify that referentially
+ transparent imports cannot import referentially opaque imports. In the test
+ suite this file is actually imported via its GitHub URL (not its local file
+ path), so it plays the role of the referentially transparent import. Then,
+ this file attempts to import a referentially opaque import (an environment
+ variable in this case) to verify that the import fails.
+
+ For this test file we need to select a referentially opaque import that
+ would succeed if imported on its own, so that a non-compliant implementation
+ doesn't fail this test for the wrong reason (i.e. due to the import not
+ being present). We thus use the `DHALL_TEST_VAR` environment variable, that
+ is expected to be set when running import tests.
+-}
+env:DHALL_TEST_VAR as Text
diff --git a/dhall/tests/import/data/simple.dhall b/dhall/tests/import/data/simple.dhall
new file mode 100644
index 0000000..00750ed
--- /dev/null
+++ b/dhall/tests/import/data/simple.dhall
@@ -0,0 +1 @@
+3
diff --git a/dhall/tests/import/data/simpleLocation.dhall b/dhall/tests/import/data/simpleLocation.dhall
new file mode 100644
index 0000000..1d3e43b
--- /dev/null
+++ b/dhall/tests/import/data/simpleLocation.dhall
@@ -0,0 +1 @@
+./simple.dhall as Location
diff --git a/dhall/tests/import/failure/alternativeEnv.txt b/dhall/tests/import/failure/alternativeEnv.txt
new file mode 100644
index 0000000..482b68c
--- /dev/null
+++ b/dhall/tests/import/failure/alternativeEnv.txt
@@ -0,0 +1 @@
+MissingEnvVar
diff --git a/dhall/tests/import/failure/alternativeEnvMissing.txt b/dhall/tests/import/failure/alternativeEnvMissing.txt
new file mode 100644
index 0000000..4666330
--- /dev/null
+++ b/dhall/tests/import/failure/alternativeEnvMissing.txt
@@ -0,0 +1 @@
+Missing
diff --git a/dhall/tests/import/failure/cycle.txt b/dhall/tests/import/failure/cycle.txt
index 4e9488e..f5a1abf 100644
--- a/dhall/tests/import/failure/cycle.txt
+++ b/dhall/tests/import/failure/cycle.txt
@@ -1 +1 @@
-ImportCycle([Import { mode: Code, location: Local(Parent, FilePath { file_path: ["data", "cycle.dhall"] }), hash: None }, Import { mode: Code, location: Local(Parent, FilePath { file_path: ["failure", "cycle.dhall"] }), hash: None }], Import { mode: Code, location: Local(Parent, FilePath { file_path: ["data", "cycle.dhall"] }), hash: None })
+ImportCycle([Local("./dhall-lang/tests/import/data/cycle.dhall"), Local("./dhall-lang/tests/import/failure/cycle.dhall")], Local("./dhall-lang/tests/import/data/cycle.dhall"))
diff --git a/dhall/tests/import/failure/missing.txt b/dhall/tests/import/failure/missing.txt
new file mode 100644
index 0000000..4666330
--- /dev/null
+++ b/dhall/tests/import/failure/missing.txt
@@ -0,0 +1 @@
+Missing
diff --git a/dhall/tests/import/failure/referentiallyInsane.txt b/dhall/tests/import/failure/referentiallyInsane.txt
new file mode 100644
index 0000000..9b5fe91
--- /dev/null
+++ b/dhall/tests/import/failure/referentiallyInsane.txt
@@ -0,0 +1 @@
+SanityCheck
diff --git a/dhall/tests/import/failure/unit/EnvUnset.dhall b/dhall/tests/import/failure/unit/EnvUnset.dhall
new file mode 100644
index 0000000..af77cce
--- /dev/null
+++ b/dhall/tests/import/failure/unit/EnvUnset.dhall
@@ -0,0 +1 @@
+env:DHALL_TEST_UNSET
diff --git a/dhall/tests/import/failure/unit/EnvUnset.txt b/dhall/tests/import/failure/unit/EnvUnset.txt
new file mode 100644
index 0000000..482b68c
--- /dev/null
+++ b/dhall/tests/import/failure/unit/EnvUnset.txt
@@ -0,0 +1 @@
+MissingEnvVar
diff --git a/dhall/tests/import/failure/unit/EnvUnsetAsText.dhall b/dhall/tests/import/failure/unit/EnvUnsetAsText.dhall
new file mode 100644
index 0000000..9a9db6d
--- /dev/null
+++ b/dhall/tests/import/failure/unit/EnvUnsetAsText.dhall
@@ -0,0 +1 @@
+env:DHALL_TEST_UNSET as Text
diff --git a/dhall/tests/import/failure/unit/EnvUnsetAsText.txt b/dhall/tests/import/failure/unit/EnvUnsetAsText.txt
new file mode 100644
index 0000000..482b68c
--- /dev/null
+++ b/dhall/tests/import/failure/unit/EnvUnsetAsText.txt
@@ -0,0 +1 @@
+MissingEnvVar
diff --git a/dhall/tests/import/success/unit/AlternativeChain1A.dhall b/dhall/tests/import/success/unit/AlternativeChain1A.dhall
new file mode 100644
index 0000000..15fbf4b
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeChain1A.dhall
@@ -0,0 +1 @@
+missing ? missing ? 42
diff --git a/dhall/tests/import/success/unit/AlternativeChain1B.dhall b/dhall/tests/import/success/unit/AlternativeChain1B.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeChain1B.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeChain2A.dhall b/dhall/tests/import/success/unit/AlternativeChain2A.dhall
new file mode 100644
index 0000000..f3ba4b5
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeChain2A.dhall
@@ -0,0 +1 @@
+missing ? 42 ? 10
diff --git a/dhall/tests/import/success/unit/AlternativeChain2B.dhall b/dhall/tests/import/success/unit/AlternativeChain2B.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeChain2B.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeEnvA.dhall b/dhall/tests/import/success/unit/AlternativeEnvA.dhall
new file mode 100644
index 0000000..1807534
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeEnvA.dhall
@@ -0,0 +1 @@
+env:DHALL_TEST_UNSET ? 42
diff --git a/dhall/tests/import/success/unit/AlternativeEnvB.dhall b/dhall/tests/import/success/unit/AlternativeEnvB.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeEnvB.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeHashMismatchA.dhall b/dhall/tests/import/success/unit/AlternativeHashMismatchA.dhall
new file mode 100644
index 0000000..8f7fb02
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeHashMismatchA.dhall
@@ -0,0 +1 @@
+../../data/simple.dhall sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ? 42
diff --git a/dhall/tests/import/success/unit/AlternativeHashMismatchB.dhall b/dhall/tests/import/success/unit/AlternativeHashMismatchB.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeHashMismatchB.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeImportErrorA.dhall b/dhall/tests/import/success/unit/AlternativeImportErrorA.dhall
new file mode 100644
index 0000000..9ecc640
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeImportErrorA.dhall
@@ -0,0 +1 @@
+missing ? 42
diff --git a/dhall/tests/import/success/unit/AlternativeImportErrorB.dhall b/dhall/tests/import/success/unit/AlternativeImportErrorB.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeImportErrorB.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeNestedImportErrorA.dhall b/dhall/tests/import/success/unit/AlternativeNestedImportErrorA.dhall
new file mode 100644
index 0000000..d681287
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeNestedImportErrorA.dhall
@@ -0,0 +1 @@
+../../failure/missing.dhall ? 42
diff --git a/dhall/tests/import/success/unit/AlternativeNestedImportErrorB.dhall b/dhall/tests/import/success/unit/AlternativeNestedImportErrorB.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeNestedImportErrorB.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeNoError1A.dhall b/dhall/tests/import/success/unit/AlternativeNoError1A.dhall
new file mode 100644
index 0000000..f7c9caf
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeNoError1A.dhall
@@ -0,0 +1 @@
+42 ? 10
diff --git a/dhall/tests/import/success/unit/AlternativeNoError1B.dhall b/dhall/tests/import/success/unit/AlternativeNoError1B.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeNoError1B.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeNoError2A.dhall b/dhall/tests/import/success/unit/AlternativeNoError2A.dhall
new file mode 100644
index 0000000..877afd2
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeNoError2A.dhall
@@ -0,0 +1 @@
+42 ? missing
diff --git a/dhall/tests/import/success/unit/AlternativeNoError2B.dhall b/dhall/tests/import/success/unit/AlternativeNoError2B.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeNoError2B.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeNoError3A.dhall b/dhall/tests/import/success/unit/AlternativeNoError3A.dhall
new file mode 100644
index 0000000..91bcda2
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeNoError3A.dhall
@@ -0,0 +1 @@
+env:DHALL_TEST_VAR ? 10
diff --git a/dhall/tests/import/success/unit/AlternativeNoError3B.dhall b/dhall/tests/import/success/unit/AlternativeNoError3B.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeNoError3B.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeParseErrorA.dhall b/dhall/tests/import/success/unit/AlternativeParseErrorA.dhall
new file mode 100644
index 0000000..d427c5d
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeParseErrorA.dhall
@@ -0,0 +1 @@
+../../data/example.txt ? 42
diff --git a/dhall/tests/import/success/unit/AlternativeParseErrorB.dhall b/dhall/tests/import/success/unit/AlternativeParseErrorB.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeParseErrorB.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeSubExprA.dhall b/dhall/tests/import/success/unit/AlternativeSubExprA.dhall
new file mode 100644
index 0000000..2c13f4b
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeSubExprA.dhall
@@ -0,0 +1 @@
+missing + 10 ? 42
diff --git a/dhall/tests/import/success/unit/AlternativeSubExprB.dhall b/dhall/tests/import/success/unit/AlternativeSubExprB.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeSubExprB.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AlternativeTypeErrorA.dhall b/dhall/tests/import/success/unit/AlternativeTypeErrorA.dhall
new file mode 100644
index 0000000..24ae717
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeTypeErrorA.dhall
@@ -0,0 +1 @@
+../../data/doesNotTypecheck.dhall ? 42
diff --git a/dhall/tests/import/success/unit/AlternativeTypeErrorB.dhall b/dhall/tests/import/success/unit/AlternativeTypeErrorB.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/AlternativeTypeErrorB.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/AsTextA.dhall b/dhall/tests/import/success/unit/AsTextA.dhall
new file mode 100644
index 0000000..9edb0ed
--- /dev/null
+++ b/dhall/tests/import/success/unit/AsTextA.dhall
@@ -0,0 +1 @@
+../../data/example.txt as Text
diff --git a/dhall/tests/import/success/unit/AsTextB.dhall b/dhall/tests/import/success/unit/AsTextB.dhall
new file mode 100644
index 0000000..1997a89
--- /dev/null
+++ b/dhall/tests/import/success/unit/AsTextB.dhall
@@ -0,0 +1,3 @@
+''
+Hello, world!
+''
diff --git a/dhall/tests/import/success/unit/EnvSetA.dhall b/dhall/tests/import/success/unit/EnvSetA.dhall
new file mode 100644
index 0000000..f851f2a
--- /dev/null
+++ b/dhall/tests/import/success/unit/EnvSetA.dhall
@@ -0,0 +1 @@
+env:DHALL_TEST_VAR
diff --git a/dhall/tests/import/success/unit/EnvSetAsTextA.dhall b/dhall/tests/import/success/unit/EnvSetAsTextA.dhall
new file mode 100644
index 0000000..139b241
--- /dev/null
+++ b/dhall/tests/import/success/unit/EnvSetAsTextA.dhall
@@ -0,0 +1 @@
+env:DHALL_TEST_VAR as Text
diff --git a/dhall/tests/import/success/unit/EnvSetAsTextB.dhall b/dhall/tests/import/success/unit/EnvSetAsTextB.dhall
new file mode 100644
index 0000000..a79bb82
--- /dev/null
+++ b/dhall/tests/import/success/unit/EnvSetAsTextB.dhall
@@ -0,0 +1 @@
+"6 * 7"
diff --git a/dhall/tests/import/success/unit/EnvSetB.dhall b/dhall/tests/import/success/unit/EnvSetB.dhall
new file mode 100644
index 0000000..d81cc07
--- /dev/null
+++ b/dhall/tests/import/success/unit/EnvSetB.dhall
@@ -0,0 +1 @@
+42
diff --git a/dhall/tests/import/success/unit/NormalizeA.dhall b/dhall/tests/import/success/unit/NormalizeA.dhall
new file mode 100644
index 0000000..2f89d08
--- /dev/null
+++ b/dhall/tests/import/success/unit/NormalizeA.dhall
@@ -0,0 +1 @@
+../../../../../dhall-lang/tests/normalization/success/unit/OperatorPlusOneAndOneA.dhall
diff --git a/dhall/tests/import/success/unit/NormalizeB.dhall b/dhall/tests/import/success/unit/NormalizeB.dhall
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/dhall/tests/import/success/unit/NormalizeB.dhall
@@ -0,0 +1 @@
+2
diff --git a/dhall/tests/import/success/unit/RemoteAsTextA.dhall b/dhall/tests/import/success/unit/RemoteAsTextA.dhall
new file mode 100644
index 0000000..472d041
--- /dev/null
+++ b/dhall/tests/import/success/unit/RemoteAsTextA.dhall
@@ -0,0 +1 @@
+https://raw.githubusercontent.com/dhall-lang/dhall-lang/0b983b92aa2222dc3e292c20550ee37dea3f41df/tests/import/data/example.txt as Text
diff --git a/dhall/tests/import/success/unit/RemoteAsTextB.dhall b/dhall/tests/import/success/unit/RemoteAsTextB.dhall
new file mode 100644
index 0000000..1997a89
--- /dev/null
+++ b/dhall/tests/import/success/unit/RemoteAsTextB.dhall
@@ -0,0 +1,3 @@
+''
+Hello, world!
+''
diff --git a/dhall/tests/import/success/unit/SimpleA.dhall b/dhall/tests/import/success/unit/SimpleA.dhall
new file mode 100644
index 0000000..035ee8b
--- /dev/null
+++ b/dhall/tests/import/success/unit/SimpleA.dhall
@@ -0,0 +1 @@
+../../data/simple.dhall
diff --git a/dhall/tests/import/success/unit/SimpleB.dhall b/dhall/tests/import/success/unit/SimpleB.dhall
new file mode 100644
index 0000000..00750ed
--- /dev/null
+++ b/dhall/tests/import/success/unit/SimpleB.dhall
@@ -0,0 +1 @@
+3
diff --git a/dhall/tests/import/success/unit/SimpleRemoteA.dhall b/dhall/tests/import/success/unit/SimpleRemoteA.dhall
new file mode 100644
index 0000000..30e0a79
--- /dev/null
+++ b/dhall/tests/import/success/unit/SimpleRemoteA.dhall
@@ -0,0 +1 @@
+https://raw.githubusercontent.com/dhall-lang/dhall-lang/0b983b92aa2222dc3e292c20550ee37dea3f41df/tests/import/data/simple.dhall
diff --git a/dhall/tests/import/success/unit/SimpleRemoteB.dhall b/dhall/tests/import/success/unit/SimpleRemoteB.dhall
new file mode 100644
index 0000000..00750ed
--- /dev/null
+++ b/dhall/tests/import/success/unit/SimpleRemoteB.dhall
@@ -0,0 +1 @@
+3
diff --git a/dhall/tests/import/success/unit/asLocation/AbsoluteA.dhall b/dhall/tests/import/success/unit/asLocation/AbsoluteA.dhall
new file mode 100644
index 0000000..dcf45d1
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/AbsoluteA.dhall
@@ -0,0 +1 @@
+/absolute/import as Location
diff --git a/dhall/tests/import/success/unit/asLocation/AbsoluteB.dhall b/dhall/tests/import/success/unit/asLocation/AbsoluteB.dhall
new file mode 100644
index 0000000..1c1add7
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/AbsoluteB.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Local
+ "/absolute/import"
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize1A.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize1A.dhall
new file mode 100644
index 0000000..e636ed1
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize1A.dhall
@@ -0,0 +1 @@
+./foo/./bar/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize1B.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize1B.dhall
new file mode 100644
index 0000000..3a8a926
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize1B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Local
+ "./dhall/tests/import/success/unit/asLocation/foo/bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize2A.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize2A.dhall
new file mode 100644
index 0000000..c6ef89f
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize2A.dhall
@@ -0,0 +1 @@
+./foo/baz/../bar/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize2B.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize2B.dhall
new file mode 100644
index 0000000..3a8a926
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize2B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Local
+ "./dhall/tests/import/success/unit/asLocation/foo/bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize3A.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize3A.dhall
new file mode 100644
index 0000000..e6be780
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize3A.dhall
@@ -0,0 +1 @@
+./../bar/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize3B.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize3B.dhall
new file mode 100644
index 0000000..b223da6
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize3B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Local
+ "./dhall/tests/import/success/unit/bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize4A.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize4A.dhall
new file mode 100644
index 0000000..ffccd47
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize4A.dhall
@@ -0,0 +1 @@
+../../bar/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize4B.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize4B.dhall
new file mode 100644
index 0000000..b6301f8
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize4B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Local
+ "./dhall/tests/import/success/bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize5A.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize5A.dhall
new file mode 100644
index 0000000..7e58f0b
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize5A.dhall
@@ -0,0 +1 @@
+./foo/../../bar/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/Canonicalize5B.dhall b/dhall/tests/import/success/unit/asLocation/Canonicalize5B.dhall
new file mode 100644
index 0000000..b223da6
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Canonicalize5B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Local
+ "./dhall/tests/import/success/unit/bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/Chain1A.dhall b/dhall/tests/import/success/unit/asLocation/Chain1A.dhall
new file mode 100644
index 0000000..cf633fe
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Chain1A.dhall
@@ -0,0 +1 @@
+./Relative1A.dhall
diff --git a/dhall/tests/import/success/unit/asLocation/Chain1B.dhall b/dhall/tests/import/success/unit/asLocation/Chain1B.dhall
new file mode 100644
index 0000000..6aee0b5
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Chain1B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Local
+ "./dhall/tests/import/success/unit/asLocation/some/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/Chain2A.dhall b/dhall/tests/import/success/unit/asLocation/Chain2A.dhall
new file mode 100644
index 0000000..cdbd10d
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Chain2A.dhall
@@ -0,0 +1 @@
+./Canonicalize4A.dhall
diff --git a/dhall/tests/import/success/unit/asLocation/Chain2B.dhall b/dhall/tests/import/success/unit/asLocation/Chain2B.dhall
new file mode 100644
index 0000000..6aba54e
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Chain2B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Local
+ "./dhall/tests/import/success/bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/Chain3A.dhall b/dhall/tests/import/success/unit/asLocation/Chain3A.dhall
new file mode 100644
index 0000000..57751f6
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Chain3A.dhall
@@ -0,0 +1 @@
+../asLocation/Canonicalize4A.dhall
diff --git a/dhall/tests/import/success/unit/asLocation/Chain3B.dhall b/dhall/tests/import/success/unit/asLocation/Chain3B.dhall
new file mode 100644
index 0000000..6aba54e
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Chain3B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Local
+ "./dhall/tests/import/success/bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/DontTryResolvingA.dhall b/dhall/tests/import/success/unit/asLocation/DontTryResolvingA.dhall
new file mode 100644
index 0000000..e70016c
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/DontTryResolvingA.dhall
@@ -0,0 +1 @@
+(missing as Location) ? 42 -- `missing` fails as an import, but definitely resolves as Location
diff --git a/dhall/tests/import/success/unit/asLocation/DontTryResolvingB.dhall b/dhall/tests/import/success/unit/asLocation/DontTryResolvingB.dhall
new file mode 100644
index 0000000..dd5e798
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/DontTryResolvingB.dhall
@@ -0,0 +1 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Missing
diff --git a/dhall/tests/import/success/unit/asLocation/EnvA.dhall b/dhall/tests/import/success/unit/asLocation/EnvA.dhall
new file mode 100644
index 0000000..eb4b4a6
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/EnvA.dhall
@@ -0,0 +1 @@
+env:HOME as Location
diff --git a/dhall/tests/import/success/unit/asLocation/EnvB.dhall b/dhall/tests/import/success/unit/asLocation/EnvB.dhall
new file mode 100644
index 0000000..4947caa
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/EnvB.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Environment
+ "HOME"
diff --git a/dhall/tests/import/success/unit/asLocation/HashA.dhall b/dhall/tests/import/success/unit/asLocation/HashA.dhall
new file mode 100644
index 0000000..79f4fda
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/HashA.dhall
@@ -0,0 +1 @@
+./some/import.dhall sha256:f9340badf94a684e652e0a384f64363293d8b632d971f3453f7ee22f10ab6e75 as Location
diff --git a/dhall/tests/import/success/unit/asLocation/HashB.dhall b/dhall/tests/import/success/unit/asLocation/HashB.dhall
new file mode 100644
index 0000000..6aee0b5
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/HashB.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Local
+ "./dhall/tests/import/success/unit/asLocation/some/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/HomeA.dhall b/dhall/tests/import/success/unit/asLocation/HomeA.dhall
new file mode 100644
index 0000000..18cc2cd
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/HomeA.dhall
@@ -0,0 +1 @@
+~/some/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/HomeB.dhall b/dhall/tests/import/success/unit/asLocation/HomeB.dhall
new file mode 100644
index 0000000..8b4f0fd
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/HomeB.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Local
+ "~/some/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/MissingA.dhall b/dhall/tests/import/success/unit/asLocation/MissingA.dhall
new file mode 100644
index 0000000..e06a30b
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/MissingA.dhall
@@ -0,0 +1 @@
+missing as Location
diff --git a/dhall/tests/import/success/unit/asLocation/MissingB.dhall b/dhall/tests/import/success/unit/asLocation/MissingB.dhall
new file mode 100644
index 0000000..dd5e798
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/MissingB.dhall
@@ -0,0 +1 @@
+< Environment : Text | Remote : Text | Local : Text | Missing >.Missing
diff --git a/dhall/tests/import/success/unit/asLocation/Relative1A.dhall b/dhall/tests/import/success/unit/asLocation/Relative1A.dhall
new file mode 100644
index 0000000..b514f79
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Relative1A.dhall
@@ -0,0 +1 @@
+./some/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/Relative1B.dhall b/dhall/tests/import/success/unit/asLocation/Relative1B.dhall
new file mode 100644
index 0000000..6aee0b5
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Relative1B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Local
+ "./dhall/tests/import/success/unit/asLocation/some/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/Relative2A.dhall b/dhall/tests/import/success/unit/asLocation/Relative2A.dhall
new file mode 100644
index 0000000..ec59586
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Relative2A.dhall
@@ -0,0 +1 @@
+../some/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/Relative2B.dhall b/dhall/tests/import/success/unit/asLocation/Relative2B.dhall
new file mode 100644
index 0000000..9842f7c
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/Relative2B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Local
+ "./dhall/tests/import/success/unit/some/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteA.dhall b/dhall/tests/import/success/unit/asLocation/RemoteA.dhall
new file mode 100644
index 0000000..54ea028
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteA.dhall
@@ -0,0 +1 @@
+https://example.com/foo/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteB.dhall b/dhall/tests/import/success/unit/asLocation/RemoteB.dhall
new file mode 100644
index 0000000..e22cfac
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteB.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Remote
+ "https://example.com/foo/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize1A.dhall b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize1A.dhall
new file mode 100644
index 0000000..3e6378e
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize1A.dhall
@@ -0,0 +1 @@
+https://example.com/foo/./bar/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize1B.dhall b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize1B.dhall
new file mode 100644
index 0000000..0064a13
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize1B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Remote
+ "https://example.com/foo/bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize2A.dhall b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize2A.dhall
new file mode 100644
index 0000000..d3fd11e
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize2A.dhall
@@ -0,0 +1 @@
+https://example.com/foo/bar/../baz/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize2B.dhall b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize2B.dhall
new file mode 100644
index 0000000..d85236b
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize2B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Remote
+ "https://example.com/foo/baz/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize3A.dhall b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize3A.dhall
new file mode 100644
index 0000000..2074fbf
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize3A.dhall
@@ -0,0 +1 @@
+https://example.com/foo/bar/../../baz/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize3B.dhall b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize3B.dhall
new file mode 100644
index 0000000..45a2857
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize3B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Remote
+ "https://example.com/baz/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize4A.dhall b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize4A.dhall
new file mode 100644
index 0000000..9358f44
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize4A.dhall
@@ -0,0 +1 @@
+https://example.com/../bar/import.dhall as Location
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize4B.dhall b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize4B.dhall
new file mode 100644
index 0000000..b5ccbcd
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteCanonicalize4B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Remote
+ "https://example.com/../bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteChain1A.dhall b/dhall/tests/import/success/unit/asLocation/RemoteChain1A.dhall
new file mode 100644
index 0000000..7d081ab
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteChain1A.dhall
@@ -0,0 +1 @@
+https://raw.githubusercontent.com/dhall-lang/dhall-lang/0b983b92aa2222dc3e292c20550ee37dea3f41df/tests/import/data/simpleLocation.dhall
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteChain1B.dhall b/dhall/tests/import/success/unit/asLocation/RemoteChain1B.dhall
new file mode 100644
index 0000000..8ac2c6b
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteChain1B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Remote
+ "https://raw.githubusercontent.com/dhall-lang/dhall-lang/0b983b92aa2222dc3e292c20550ee37dea3f41df/tests/import/data/simple.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteChain2A.dhall b/dhall/tests/import/success/unit/asLocation/RemoteChain2A.dhall
new file mode 100644
index 0000000..9929517
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteChain2A.dhall
@@ -0,0 +1 @@
+https://raw.githubusercontent.com/Nadrieril/dhall-rust/f7d8c64a9799f139ad65427c2518376adb9e2e2f/dhall/tests/import/success/unit/asLocation/Canonicalize3A.dhall
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteChain2B.dhall b/dhall/tests/import/success/unit/asLocation/RemoteChain2B.dhall
new file mode 100644
index 0000000..685dc04
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteChain2B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Remote
+ "https://raw.githubusercontent.com/Nadrieril/dhall-rust/f7d8c64a9799f139ad65427c2518376adb9e2e2f/dhall/tests/import/success/unit/bar/import.dhall"
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteChain3A.dhall b/dhall/tests/import/success/unit/asLocation/RemoteChain3A.dhall
new file mode 100644
index 0000000..851108c
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteChain3A.dhall
@@ -0,0 +1 @@
+https://raw.githubusercontent.com/Nadrieril/dhall-rust/f7d8c64a9799f139ad65427c2518376adb9e2e2f/dhall/tests/import/success/unit/asLocation/Canonicalize5A.dhall
diff --git a/dhall/tests/import/success/unit/asLocation/RemoteChain3B.dhall b/dhall/tests/import/success/unit/asLocation/RemoteChain3B.dhall
new file mode 100644
index 0000000..685dc04
--- /dev/null
+++ b/dhall/tests/import/success/unit/asLocation/RemoteChain3B.dhall
@@ -0,0 +1,2 @@
+< Environment : Text | Local : Text | Missing | Remote : Text >.Remote
+ "https://raw.githubusercontent.com/Nadrieril/dhall-rust/f7d8c64a9799f139ad65427c2518376adb9e2e2f/dhall/tests/import/success/unit/bar/import.dhall"
diff --git a/dhall/tests/normalization/success/regression/NaturalFoldExtraArgA.dhall b/dhall/tests/normalization/success/regression/NaturalFoldExtraArgA.dhall
new file mode 100644
index 0000000..3a69d1e
--- /dev/null
+++ b/dhall/tests/normalization/success/regression/NaturalFoldExtraArgA.dhall
@@ -0,0 +1 @@
+Natural/fold 0 (Bool -> Bool) (λ(_ : (Bool -> Bool)) → λ(_ : Bool) → True) (λ(_ : Bool) → False) True
diff --git a/dhall/tests/normalization/success/regression/NaturalFoldExtraArgB.dhall b/dhall/tests/normalization/success/regression/NaturalFoldExtraArgB.dhall
new file mode 100644
index 0000000..bc59c12
--- /dev/null
+++ b/dhall/tests/normalization/success/regression/NaturalFoldExtraArgB.dhall
@@ -0,0 +1 @@
+False
diff --git a/dhall/tests/normalization/success/regression/TrickyBinderIdentityA.dhall b/dhall/tests/normalization/success/regression/TrickyBinderIdentityA.dhall
new file mode 100644
index 0000000..5d72bbe
--- /dev/null
+++ b/dhall/tests/normalization/success/regression/TrickyBinderIdentityA.dhall
@@ -0,0 +1 @@
+let T = Natural let ap = λ(f : T → List T) -> λ(x : T) -> f x in ap (λ(x : T) -> ap (λ(y : T) -> [x, y]) 1) 0
diff --git a/dhall/tests/normalization/success/regression/TrickyBinderIdentityB.dhall b/dhall/tests/normalization/success/regression/TrickyBinderIdentityB.dhall
new file mode 100644
index 0000000..28233fb
--- /dev/null
+++ b/dhall/tests/normalization/success/regression/TrickyBinderIdentityB.dhall
@@ -0,0 +1 @@
+[ 0, 1 ]
diff --git a/dhall/tests/normalization/success/unit/TextLitNested1A.dhall b/dhall/tests/normalization/success/unit/TextLitNested1A.dhall
new file mode 100644
index 0000000..104dc41
--- /dev/null
+++ b/dhall/tests/normalization/success/unit/TextLitNested1A.dhall
@@ -0,0 +1 @@
+λ(x: Text) → "${""}${x}"
diff --git a/dhall/tests/normalization/success/unit/TextLitNested1B.dhall b/dhall/tests/normalization/success/unit/TextLitNested1B.dhall
new file mode 100644
index 0000000..631a6cf
--- /dev/null
+++ b/dhall/tests/normalization/success/unit/TextLitNested1B.dhall
@@ -0,0 +1 @@
+λ(x : Text) → x
diff --git a/dhall/tests/normalization/success/unit/TextLitNested2A.dhall b/dhall/tests/normalization/success/unit/TextLitNested2A.dhall
new file mode 100644
index 0000000..5b4ae6e
--- /dev/null
+++ b/dhall/tests/normalization/success/unit/TextLitNested2A.dhall
@@ -0,0 +1 @@
+λ(x: Text) → "${"${x}"}"
diff --git a/dhall/tests/normalization/success/unit/TextLitNested2B.dhall b/dhall/tests/normalization/success/unit/TextLitNested2B.dhall
new file mode 100644
index 0000000..631a6cf
--- /dev/null
+++ b/dhall/tests/normalization/success/unit/TextLitNested2B.dhall
@@ -0,0 +1 @@
+λ(x : Text) → x
diff --git a/dhall/tests/normalization/success/unit/TextLitNested3A.dhall b/dhall/tests/normalization/success/unit/TextLitNested3A.dhall
new file mode 100644
index 0000000..d57ac64
--- /dev/null
+++ b/dhall/tests/normalization/success/unit/TextLitNested3A.dhall
@@ -0,0 +1 @@
+λ(x: Text) → "${"${""}"}${x}"
diff --git a/dhall/tests/normalization/success/unit/TextLitNested3B.dhall b/dhall/tests/normalization/success/unit/TextLitNested3B.dhall
new file mode 100644
index 0000000..631a6cf
--- /dev/null
+++ b/dhall/tests/normalization/success/unit/TextLitNested3B.dhall
@@ -0,0 +1 @@
+λ(x : Text) → x
diff --git a/dhall/tests/normalization/success/unit/TextShowEmptyA.dhall b/dhall/tests/normalization/success/unit/TextShowEmptyA.dhall
new file mode 100644
index 0000000..589f65d
--- /dev/null
+++ b/dhall/tests/normalization/success/unit/TextShowEmptyA.dhall
@@ -0,0 +1 @@
+Text/show ""
diff --git a/dhall/tests/normalization/success/unit/TextShowEmptyB.dhall b/dhall/tests/normalization/success/unit/TextShowEmptyB.dhall
new file mode 100644
index 0000000..8fbbe76
--- /dev/null
+++ b/dhall/tests/normalization/success/unit/TextShowEmptyB.dhall
@@ -0,0 +1 @@
+"\"\""
diff --git a/dhall/tests/parser/failure/assertBinding.txt b/dhall/tests/parser/failure/assertBinding.txt
new file mode 100644
index 0000000..4253a31
--- /dev/null
+++ b/dhall/tests/parser/failure/assertBinding.txt
@@ -0,0 +1,6 @@
+ --> 1:5
+ |
+1 | let assert = 2 in 1␍␊
+ | ^---
+ |
+ = expected simple_label
diff --git a/dhall/tests/parser/failure/spacing/AssertNoSpace.txt b/dhall/tests/parser/failure/spacing/AssertNoSpace.txt
index 0e83988..a98c16a 100644
--- a/dhall/tests/parser/failure/spacing/AssertNoSpace.txt
+++ b/dhall/tests/parser/failure/spacing/AssertNoSpace.txt
@@ -1,6 +1,6 @@
- --> 1:8
+ --> 1:1
|
1 | assert :T␊
- | ^---
+ | ^---
|
- = expected EOI, import_alt, bool_or, natural_plus, text_append, list_append, bool_and, natural_times, bool_eq, bool_ne, combine, combine_types, equivalent, prefer, arrow, import_hashed, or primitive_expression
+ = expected expression
diff --git a/dhall/tests/parser/failure/unit/AssertNoAnnotation.dhall b/dhall/tests/parser/failure/unit/AssertNoAnnotation.dhall
new file mode 100644
index 0000000..6019020
--- /dev/null
+++ b/dhall/tests/parser/failure/unit/AssertNoAnnotation.dhall
@@ -0,0 +1 @@
+assert
diff --git a/dhall/tests/parser/failure/unit/AssertNoAnnotation.txt b/dhall/tests/parser/failure/unit/AssertNoAnnotation.txt
new file mode 100644
index 0000000..435e325
--- /dev/null
+++ b/dhall/tests/parser/failure/unit/AssertNoAnnotation.txt
@@ -0,0 +1,6 @@
+ --> 1:1
+ |
+1 | assert␊
+ | ^---
+ |
+ = expected expression
diff --git a/dhall/tests/parser/success/unit/EmptyRecordLiteralA.dhall b/dhall/tests/parser/success/unit/EmptyRecordLiteralA.dhall
new file mode 100644
index 0000000..339130f
--- /dev/null
+++ b/dhall/tests/parser/success/unit/EmptyRecordLiteralA.dhall
@@ -0,0 +1 @@
+{=}
diff --git a/dhall/tests/parser/success/unit/EmptyRecordLiteralB.dhallb b/dhall/tests/parser/success/unit/EmptyRecordLiteralB.dhallb
new file mode 100644
index 0000000..58e2e39
--- /dev/null
+++ b/dhall/tests/parser/success/unit/EmptyRecordLiteralB.dhallb
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/dhall/tests/parser/success/unit/EmptyRecordLiteralB.diag b/dhall/tests/parser/success/unit/EmptyRecordLiteralB.diag
new file mode 100644
index 0000000..8ead206
--- /dev/null
+++ b/dhall/tests/parser/success/unit/EmptyRecordLiteralB.diag
@@ -0,0 +1 @@
+[8, {}]
diff --git a/dhall/tests/parser/success/unit/LetAnnotA.dhall b/dhall/tests/parser/success/unit/LetAnnotA.dhall
new file mode 100644
index 0000000..c7d29f8
--- /dev/null
+++ b/dhall/tests/parser/success/unit/LetAnnotA.dhall
@@ -0,0 +1 @@
+let x: T = y in e
diff --git a/dhall/tests/parser/success/unit/LetAnnotB.dhallb b/dhall/tests/parser/success/unit/LetAnnotB.dhallb
new file mode 100644
index 0000000..4e3a7e4
--- /dev/null
+++ b/dhall/tests/parser/success/unit/LetAnnotB.dhallb
Binary files differ
diff --git a/dhall/tests/parser/success/unit/LetAnnotB.diag b/dhall/tests/parser/success/unit/LetAnnotB.diag
new file mode 100644
index 0000000..36791e0
--- /dev/null
+++ b/dhall/tests/parser/success/unit/LetAnnotB.diag
@@ -0,0 +1 @@
+[25, "x", ["T", 0], ["y", 0], ["e", 0]]
diff --git a/dhall/tests/parser/success/unit/LetNoAnnotA.dhall b/dhall/tests/parser/success/unit/LetNoAnnotA.dhall
new file mode 100644
index 0000000..64d30e6
--- /dev/null
+++ b/dhall/tests/parser/success/unit/LetNoAnnotA.dhall
@@ -0,0 +1 @@
+let x = y in e
diff --git a/dhall/tests/parser/success/unit/LetNoAnnotB.dhallb b/dhall/tests/parser/success/unit/LetNoAnnotB.dhallb
new file mode 100644
index 0000000..79a2384
--- /dev/null
+++ b/dhall/tests/parser/success/unit/LetNoAnnotB.dhallb
Binary files differ
diff --git a/dhall/tests/parser/success/unit/LetNoAnnotB.diag b/dhall/tests/parser/success/unit/LetNoAnnotB.diag
new file mode 100644
index 0000000..a23f605
--- /dev/null
+++ b/dhall/tests/parser/success/unit/LetNoAnnotB.diag
@@ -0,0 +1 @@
+[25, "x", null, ["y", 0], ["e", 0]]
diff --git a/dhall/tests/parser/success/unit/ToMapA.dhall b/dhall/tests/parser/success/unit/ToMapA.dhall
new file mode 100644
index 0000000..ea04391
--- /dev/null
+++ b/dhall/tests/parser/success/unit/ToMapA.dhall
@@ -0,0 +1 @@
+toMap x
diff --git a/dhall/tests/parser/success/unit/ToMapAnnotA.dhall b/dhall/tests/parser/success/unit/ToMapAnnotA.dhall
new file mode 100644
index 0000000..ad65b07
--- /dev/null
+++ b/dhall/tests/parser/success/unit/ToMapAnnotA.dhall
@@ -0,0 +1 @@
+toMap x : T
diff --git a/dhall/tests/parser/success/unit/ToMapAnnotB.dhallb b/dhall/tests/parser/success/unit/ToMapAnnotB.dhallb
new file mode 100644
index 0000000..4b53587
--- /dev/null
+++ b/dhall/tests/parser/success/unit/ToMapAnnotB.dhallb
Binary files differ
diff --git a/dhall/tests/parser/success/unit/ToMapAnnotB.diag b/dhall/tests/parser/success/unit/ToMapAnnotB.diag
new file mode 100644
index 0000000..8e511fb
--- /dev/null
+++ b/dhall/tests/parser/success/unit/ToMapAnnotB.diag
@@ -0,0 +1 @@
+[27, ["x", 0], ["T", 0]]
diff --git a/dhall/tests/parser/success/unit/ToMapB.dhallb b/dhall/tests/parser/success/unit/ToMapB.dhallb
new file mode 100644
index 0000000..25ecd95
--- /dev/null
+++ b/dhall/tests/parser/success/unit/ToMapB.dhallb
Binary files differ
diff --git a/dhall/tests/parser/success/unit/ToMapB.diag b/dhall/tests/parser/success/unit/ToMapB.diag
new file mode 100644
index 0000000..5d25b39
--- /dev/null
+++ b/dhall/tests/parser/success/unit/ToMapB.diag
@@ -0,0 +1 @@
+[27, ["x", 0]]
diff --git a/dhall/tests/parser/success/unit/VariableQuotedWithSpaceA.dhall b/dhall/tests/parser/success/unit/VariableQuotedWithSpaceA.dhall
new file mode 100644
index 0000000..a1f4d02
--- /dev/null
+++ b/dhall/tests/parser/success/unit/VariableQuotedWithSpaceA.dhall
@@ -0,0 +1 @@
+` x `
diff --git a/dhall/tests/parser/success/unit/VariableQuotedWithSpaceB.dhallb b/dhall/tests/parser/success/unit/VariableQuotedWithSpaceB.dhallb
new file mode 100644
index 0000000..56d9cd9
--- /dev/null
+++ b/dhall/tests/parser/success/unit/VariableQuotedWithSpaceB.dhallb
Binary files differ
diff --git a/dhall/tests/parser/success/unit/VariableQuotedWithSpaceB.diag b/dhall/tests/parser/success/unit/VariableQuotedWithSpaceB.diag
new file mode 100644
index 0000000..035d650
--- /dev/null
+++ b/dhall/tests/parser/success/unit/VariableQuotedWithSpaceB.diag
@@ -0,0 +1 @@
+[" x ", 0]
diff --git a/dhall/tests/type-inference/failure/unit/FunctionTypeOutputTypeNotAType.dhall b/dhall/tests/type-inference/failure/unit/FunctionTypeOutputTypeNotAType.dhall
new file mode 100644
index 0000000..94b32f9
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/FunctionTypeOutputTypeNotAType.dhall
@@ -0,0 +1 @@
+Bool -> 1
diff --git a/dhall/tests/type-inference/failure/unit/FunctionTypeOutputTypeNotAType.txt b/dhall/tests/type-inference/failure/unit/FunctionTypeOutputTypeNotAType.txt
new file mode 100644
index 0000000..bcc44a5
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/FunctionTypeOutputTypeNotAType.txt
@@ -0,0 +1,7 @@
+Type error: error: Expected a type, found: `1`
+ --> <current file>:1:8
+ |
+1 | Bool -> 1
+ | ^ this has type: `Natural`
+ |
+ = help: An expression in type position must have type `Type`, `Kind` or `Sort`
diff --git a/dhall/tests/type-inference/failure/unit/LetInSort.dhall b/dhall/tests/type-inference/failure/unit/LetInSort.dhall
new file mode 100644
index 0000000..125ab28
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/LetInSort.dhall
@@ -0,0 +1 @@
+\(x: let x = 0 in Sort) -> 1
diff --git a/dhall/tests/type-inference/failure/unit/LetInSort.txt b/dhall/tests/type-inference/failure/unit/LetInSort.txt
new file mode 100644
index 0000000..07be298
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/LetInSort.txt
@@ -0,0 +1,6 @@
+Type error: error: Sort does not have a type
+ --> <current file>:1:18
+ |
+1 | \(x: let x = 0 in Sort) -> 1
+ | ^^^^ Sort does not have a type
+ |
diff --git a/dhall/tests/type-inference/failure/unit/MergeBool.dhall b/dhall/tests/type-inference/failure/unit/MergeBool.dhall
new file mode 100644
index 0000000..01e7e3f
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/MergeBool.dhall
@@ -0,0 +1 @@
+\(x: { True: Natural, False: Natural }) -> merge x True
diff --git a/dhall/tests/type-inference/failure/unit/MergeBool.txt b/dhall/tests/type-inference/failure/unit/MergeBool.txt
new file mode 100644
index 0000000..209def1
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/MergeBool.txt
@@ -0,0 +1,6 @@
+Type error: error: Merge2ArgMustBeUnionOrOptional
+ --> <current file>:1:43
+ |
+1 | \(x: { True: Natural, False: Natural }) -> merge x True
+ | ^^^^^^^^^^^^ Merge2ArgMustBeUnionOrOptional
+ |
diff --git a/dhall/tests/type-inference/failure/unit/NestedAnnotInnerWrong.dhall b/dhall/tests/type-inference/failure/unit/NestedAnnotInnerWrong.dhall
new file mode 100644
index 0000000..7e5c8ec
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/NestedAnnotInnerWrong.dhall
@@ -0,0 +1 @@
+(0 : Bool) : Natural
diff --git a/dhall/tests/type-inference/failure/unit/NestedAnnotInnerWrong.txt b/dhall/tests/type-inference/failure/unit/NestedAnnotInnerWrong.txt
new file mode 100644
index 0000000..b56db54
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/NestedAnnotInnerWrong.txt
@@ -0,0 +1,6 @@
+Type error: error: annot mismatch: Natural != Bool
+ --> <current file>:1:1
+ |
+1 | (0 : Bool) : Natural
+ | ^ annot mismatch: Natural != Bool
+ |
diff --git a/dhall/tests/type-inference/failure/unit/NestedAnnotOuterWrong.dhall b/dhall/tests/type-inference/failure/unit/NestedAnnotOuterWrong.dhall
new file mode 100644
index 0000000..67a1526
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/NestedAnnotOuterWrong.dhall
@@ -0,0 +1 @@
+(0 : Natural) : Bool
diff --git a/dhall/tests/type-inference/failure/unit/NestedAnnotOuterWrong.txt b/dhall/tests/type-inference/failure/unit/NestedAnnotOuterWrong.txt
new file mode 100644
index 0000000..2f07b8d
--- /dev/null
+++ b/dhall/tests/type-inference/failure/unit/NestedAnnotOuterWrong.txt
@@ -0,0 +1,6 @@
+Type error: error: annot mismatch: Natural != Bool
+ --> <current file>:1:1
+ |
+1 | (0 : Natural) : Bool
+ | ^^^^^^^^^^^ annot mismatch: Natural != Bool
+ |
diff --git a/dhall/tests/type-inference/success/CacheImportsA.dhall b/dhall/tests/type-inference/success/CacheImportsA.dhall
new file mode 100644
index 0000000..7180b19
--- /dev/null
+++ b/dhall/tests/type-inference/success/CacheImportsA.dhall
@@ -0,0 +1,6 @@
+{-
+ This URL returns (probably) a different result for each request. This test
+ ensures that import results for a given URL are correctly cached within an
+ execution of dhall.
+-}
+let _ = assert : https://csrng.net/csrng/csrng.php?min=0&max=1000 as Text === https://csrng.net/csrng/csrng.php?min=0&max=1000 as Text in 0
diff --git a/dhall/tests/type-inference/success/CacheImportsB.dhall b/dhall/tests/type-inference/success/CacheImportsB.dhall
new file mode 100644
index 0000000..2f184a4
--- /dev/null
+++ b/dhall/tests/type-inference/success/CacheImportsB.dhall
@@ -0,0 +1 @@
+Natural
diff --git a/dhall/tests/type-inference/success/CacheImportsCanonicalizeA.dhall b/dhall/tests/type-inference/success/CacheImportsCanonicalizeA.dhall
new file mode 100644
index 0000000..e7f4dcd
--- /dev/null
+++ b/dhall/tests/type-inference/success/CacheImportsCanonicalizeA.dhall
@@ -0,0 +1,5 @@
+{-
+ This URL returns (probably) a different result for each request. This test
+ ensures that import locations are canonicalized before being cached.
+-}
+let _ = assert : https://csrng.net/csrng/csrng.php?min=0&max=1000 as Text === https://csrng.net/csrng/../csrng/csrng.php?min=0&max=1000 as Text in 0
diff --git a/dhall/tests/type-inference/success/CacheImportsCanonicalizeB.dhall b/dhall/tests/type-inference/success/CacheImportsCanonicalizeB.dhall
new file mode 100644
index 0000000..2f184a4
--- /dev/null
+++ b/dhall/tests/type-inference/success/CacheImportsCanonicalizeB.dhall
@@ -0,0 +1 @@
+Natural
diff --git a/dhall/tests/type-inference/success/regression/LambdaInLetScoping1A.dhall b/dhall/tests/type-inference/success/regression/LambdaInLetScoping1A.dhall
new file mode 100644
index 0000000..72f866f
--- /dev/null
+++ b/dhall/tests/type-inference/success/regression/LambdaInLetScoping1A.dhall
@@ -0,0 +1 @@
+let T = 0 in λ(T : Type) → λ(x : T) → 1
diff --git a/dhall/tests/type-inference/success/regression/LambdaInLetScoping1B.dhall b/dhall/tests/type-inference/success/regression/LambdaInLetScoping1B.dhall
new file mode 100644
index 0000000..42bfeec
--- /dev/null
+++ b/dhall/tests/type-inference/success/regression/LambdaInLetScoping1B.dhall
@@ -0,0 +1 @@
+∀(T : Type) → ∀(x : T) → Natural
diff --git a/dhall/tests/type-inference/success/regression/LambdaInLetScoping2A.dhall b/dhall/tests/type-inference/success/regression/LambdaInLetScoping2A.dhall
new file mode 100644
index 0000000..30fd03c
--- /dev/null
+++ b/dhall/tests/type-inference/success/regression/LambdaInLetScoping2A.dhall
@@ -0,0 +1 @@
+(λ(T : Type) → let x = 0 in λ(x : T) → x) : ∀(T : Type) → ∀(x : T) → T
diff --git a/dhall/tests/type-inference/success/regression/LambdaInLetScoping2B.dhall b/dhall/tests/type-inference/success/regression/LambdaInLetScoping2B.dhall
new file mode 100644
index 0000000..20aa0d3
--- /dev/null
+++ b/dhall/tests/type-inference/success/regression/LambdaInLetScoping2B.dhall
@@ -0,0 +1 @@
+∀(T : Type) → ∀(x : T) → T
diff --git a/dhall/tests/type-inference/success/regression/RecursiveRecordTypeMergeTripleCollisionA.dhall b/dhall/tests/type-inference/success/regression/RecursiveRecordTypeMergeTripleCollisionA.dhall
new file mode 100644
index 0000000..c7b7fb4
--- /dev/null
+++ b/dhall/tests/type-inference/success/regression/RecursiveRecordTypeMergeTripleCollisionA.dhall
@@ -0,0 +1 @@
+{ x : { a : Bool } } ⩓ { x : { b : Bool } } ⩓ { x : { c : Bool } }
diff --git a/dhall/tests/type-inference/success/regression/RecursiveRecordTypeMergeTripleCollisionB.dhall b/dhall/tests/type-inference/success/regression/RecursiveRecordTypeMergeTripleCollisionB.dhall
new file mode 100644
index 0000000..245bc9d
--- /dev/null
+++ b/dhall/tests/type-inference/success/regression/RecursiveRecordTypeMergeTripleCollisionB.dhall
@@ -0,0 +1 @@
+Type
diff --git a/dhall/tests/type-inference/success/regression/TodoA.dhall b/dhall/tests/type-inference/success/regression/TodoA.dhall
new file mode 100644
index 0000000..9d5ef34
--- /dev/null
+++ b/dhall/tests/type-inference/success/regression/TodoA.dhall
@@ -0,0 +1 @@
+λ(todo : ∀(a : Type) → a) → todo
diff --git a/dhall/tests/type-inference/success/regression/TodoB.dhall b/dhall/tests/type-inference/success/regression/TodoB.dhall
new file mode 100644
index 0000000..e0091f2
--- /dev/null
+++ b/dhall/tests/type-inference/success/regression/TodoB.dhall
@@ -0,0 +1 @@
+∀(todo : ∀(a : Type) → a) → ∀(a : Type) → a