@@ -31,9 +31,13 @@ import Registry.Docgen.Legacy.JSON as Legacy.JSON
3131import Registry.Docgen.Package.Render (defaultPackageLinker , htmlCodeRenderer , renderDeclarationInfo , renderDocument , renderModule )
3232import Registry.Docgen.Reexports (ReexportError (..), modulesWithReexports , printReexportError )
3333import Registry.License as License
34+ import Registry.LimitedString as LimitedString
3435import Registry.Location (Location (..))
36+ import Registry.Manifest (Manifest (..))
3537import Registry.PackageName (PackageName )
3638import Registry.PackageName as PackageName
39+ import Registry.Range (Range )
40+ import Registry.Range as Range
3741import Registry.Sha256 as Sha256
3842import Registry.Test.Assert as Assert
3943import Registry.Test.Utils as Utils
@@ -82,8 +86,8 @@ main = runSpecAndExitProcess [ consoleReporter ] do
8286 let readme = Readme { content: " # Undefined" , extension: Just " md" }
8387 let
8488 conversionInput =
85- { dependencies: Map .empty
86- , readme: Just readme
89+ { readme: Just readme
90+ , manifest: undefinedManifest
8791 , sourceArtifact: sourceArtifactFixture
8892 , sourcePaths: Map .singleton (ModuleName " Undefined" ) " custom/Undefined.purs"
8993 }
@@ -99,10 +103,33 @@ main = runSpecAndExitProcess [ consoleReporter ] do
99103 span.path `Assert.shouldEqual` " custom/Undefined.purs"
100104 _ ->
101105 Assert .fail " Expected one converted declaration with a source span"
102- let manifestDependencies = Map .singleton (packageName " prelude" ) (RawRange " >=4.0.0 <5.0.0" )
103- case Convert .fromLegacyPackage (conversionInput { dependencies = manifestDependencies }) legacy of
104- Right (DocPackage { dependencies }) -> dependencies `Assert.shouldEqual` manifestDependencies
105- Left err -> Assert .fail $ " Failed to convert historical fixture with manifest dependencies: " <> err
106+ let Manifest manifest = undefinedManifest
107+ let canonicalDescription = Utils .fromRight " description" $ LimitedString .parse " Canonical package metadata"
108+ let manifestDependencies = Map .singleton (packageName " prelude" ) (range " >=4.0.0 <5.0.0" )
109+ let
110+ authoritativeManifest = Manifest $ manifest
111+ { dependencies = manifestDependencies
112+ , description = Just canonicalDescription
113+ , license = Utils .fromRight " license" $ License .parse " BSD-3-Clause"
114+ , location = Git { url: " https://example.com/undefined.git" , subdir: Nothing }
115+ , ref = " release-1.0.2"
116+ }
117+ case Convert .fromLegacyPackage (conversionInput { manifest = authoritativeManifest }) legacy of
118+ Right (DocPackage convertedPackage) -> do
119+ convertedPackage.dependencies `Assert.shouldEqual` Map .singleton (packageName " prelude" ) (RawRange " >=4.0.0 <5.0.0" )
120+ convertedPackage.description `Assert.shouldEqual` Just " Canonical package metadata"
121+ convertedPackage.license `Assert.shouldEqual` (Utils .fromRight " license" $ License .parse " BSD-3-Clause" )
122+ convertedPackage.location `Assert.shouldEqual` Git { url: " https://example.com/undefined.git" , subdir: Nothing }
123+ convertedPackage.locationRef `Assert.shouldEqual` Just " release-1.0.2"
124+ Left err -> Assert .fail $ " Failed to convert historical fixture with authoritative manifest: " <> err
125+ let mismatchedManifest = Manifest $ manifest { name = packageName " other" }
126+ case Convert .fromLegacyPackage (conversionInput { manifest = mismatchedManifest }) legacy of
127+ Left err -> shouldContainString err " does not match manifest package other"
128+ Right _ -> Assert .fail " Conversion unexpectedly accepted a mismatched manifest"
129+ let mismatchedVersion = Manifest $ manifest { version = version " 2.0.0" }
130+ case Convert .fromLegacyPackage (conversionInput { manifest = mismatchedVersion }) legacy of
131+ Left err -> shouldContainString err " does not match manifest version 2.0.0"
132+ Right _ -> Assert .fail " Conversion unexpectedly accepted a mismatched manifest version"
106133 case Convert .fromLegacyPackage (conversionInput { sourcePaths = Map .empty }) legacy of
107134 Left err -> shouldContainString err " Missing package-relative source path for module Undefined"
108135 Right _ -> Assert .fail " Conversion unexpectedly accepted a missing module source path"
@@ -128,7 +155,13 @@ main = runSpecAndExitProcess [ consoleReporter ] do
128155 let reversed = Utils .fromRight " Reversed generation failed" $ Generate .generatePackage generationInput { modules = Array .reverse generationInput.modules }
129156 Codec .encode Docgen.Codec .docPackage generated `Assert.shouldEqual` Codec .encode Docgen.Codec .docPackage reversed
130157 case generated of
131- DocPackage { modules: [ DocModule { name: ModuleName " A" , reexports: [ DocReexport { moduleName: ModuleName " B" , declarations: [ DocDeclaration { sourceSpan: Just (SourceSpan { path: " src/B.purs" }) } ] } ] } ], resolvedModulePackages } -> do
158+ DocPackage { dependencies, description, location, locationRef, modules: [ DocModule { name: ModuleName " A" , reexports: [ DocReexport { moduleName: ModuleName " B" , declarations: [ DocDeclaration { sourceSpan: Just (SourceSpan { path: " src/B.purs" }) } ] } ] } ], name, resolvedModulePackages, version: generatedVersion } -> do
159+ dependencies `Assert.shouldEqual` Map .singleton dependency (RawRange " >=2.0.0 <3.0.0" )
160+ description `Assert.shouldEqual` Just " Example"
161+ location `Assert.shouldEqual` Git { url: " https://example.com/repo.git" , subdir: Just " packages/example" }
162+ locationRef `Assert.shouldEqual` Just " v1.0.0"
163+ name `Assert.shouldEqual` packageName " example"
164+ generatedVersion `Assert.shouldEqual` version " 1.0.0"
132165 Map .lookup (ModuleName " A" ) resolvedModulePackages `Assert.shouldEqual` Just (packageName " example" )
133166 Map .lookup (ModuleName " B" ) resolvedModulePackages `Assert.shouldEqual` Just dependency
134167 _ -> Assert .fail " Generated package did not preserve deterministic ownership, reexports, and source paths"
@@ -138,7 +171,7 @@ main = runSpecAndExitProcess [ consoleReporter ] do
138171 case Generate .generatePackage duplicate of
139172 Left (DuplicateModule (ModuleName " B" )) -> pure unit
140173 _ -> Assert .fail " Generation unexpectedly accepted a duplicate module"
141- let absolute = generationInput { modules = map (\moduleInput -> if moduleInput.package == generationInput.name then moduleInput { sourcePath = " /tmp/A.purs" } else moduleInput) generationInput.modules }
174+ let absolute = generationInput { modules = map (\moduleInput -> if moduleInput.package == packageName " example " then moduleInput { sourcePath = " /tmp/A.purs" } else moduleInput) generationInput.modules }
142175 case Generate .generatePackage absolute of
143176 Left (InvalidSourcePath (ModuleName " A" ) " /tmp/A.purs" ) -> pure unit
144177 _ -> Assert .fail " Generation unexpectedly accepted an absolute source path"
@@ -438,11 +471,7 @@ legacyValue title signature span = L.Declaration
438471generationInput :: Generate.PackageInput
439472generationInput =
440473 { compilerVersion: version " 0.15.15"
441- , dependencies: Map .singleton dependency (RawRange " >=2.0.0 <3.0.0" )
442- , description: Just " Example"
443- , license: Utils .fromRight " license" $ License .parse " BSD-3-Clause"
444- , location: Git { url: " https://example.com/repo.git" , subdir: Just " packages/example" }
445- , locationRef: Nothing
474+ , manifest: generationManifest
446475 , modules:
447476 [ { docs: legacyModuleWithDeclaration " B" (legacyValue " value" (L.TypeVar " a" ) (Just sourceSpan))
448477 , package: dependency
@@ -455,13 +484,39 @@ generationInput =
455484 , sourcePath: " custom/A.purs"
456485 }
457486 ]
458- , name: packageName " example"
459487 , readme: Just $ Readme { content: " # Example" , extension: Just " md" }
460488 , resolvedDependencies: Map .singleton dependency (version " 2.3.4" )
461489 , sourceArtifact: sourceArtifactFixture
490+ }
491+
492+ generationManifest :: Manifest
493+ generationManifest = Manifest
494+ { dependencies: Map .singleton dependency (range " >=2.0.0 <3.0.0" )
495+ , description: Just $ Utils .fromRight " description" $ LimitedString .parse " Example"
496+ , excludeFiles: Nothing
497+ , includeFiles: Nothing
498+ , license: Utils .fromRight " license" $ License .parse " BSD-3-Clause"
499+ , location: Git { url: " https://example.com/repo.git" , subdir: Just " packages/example" }
500+ , name: packageName " example"
501+ , owners: Nothing
502+ , ref: " v1.0.0"
462503 , version: version " 1.0.0"
463504 }
464505
506+ undefinedManifest :: Manifest
507+ undefinedManifest = Manifest
508+ { dependencies: Map .empty
509+ , description: Just $ Utils .fromRight " description" $ LimitedString .parse " Package containing the undefined value."
510+ , excludeFiles: Nothing
511+ , includeFiles: Nothing
512+ , license: Utils .fromRight " license" $ License .parse " MIT"
513+ , location: GitHub { owner: " bklaric" , repo: " purescript-undefined" , subdir: Nothing }
514+ , name: packageName " undefined"
515+ , owners: Nothing
516+ , ref: " v1.0.2"
517+ , version: version " 1.0.2"
518+ }
519+
465520package :: DocPackage
466521package = DocPackage
467522 { schemaVersion
@@ -489,6 +544,9 @@ packageName = Utils.fromRight "package name" <<< PackageName.parse
489544version :: String -> Version
490545version = Utils .fromRight " version" <<< Version .parse
491546
547+ range :: String -> Range
548+ range = Utils .fromRight " range" <<< Range .parse
549+
492550sourceArtifactFixture :: SourceArtifact
493551sourceArtifactFixture = SourceArtifact
494552 { bytes: 42.0
0 commit comments