nip/tests/test_manifest_desktop.nim

94 lines
2.8 KiB
Nim

import std/[unittest, options]
import nip/manifest_parser
suite "NIP Desktop Integration Tests":
test "Parse JSON with Desktop Config":
let jsonContent = """
{
"name": "browser",
"version": "1.0.0",
"license": "MIT",
"desktop": {
"display_name": "My Browser",
"icon": "browser-icon",
"terminal": false,
"categories": ["Network", "WebBrowser"],
"mime_types": ["text/html", "application/xhtml+xml"]
}
}
"""
let manifest = parseManifest(jsonContent, NIP, FormatJSON)
check manifest.desktop.isSome
let dt = manifest.desktop.get()
check dt.displayName == "My Browser"
check dt.icon == some("browser-icon")
check dt.terminal == false
check dt.categories == @["Network", "WebBrowser"]
check dt.mimeTypes.len == 2
test "Parse KDL with Desktop Config":
let kdlContent = """
package "browser" {
version "1.0.0"
license "MIT"
desktop display_name="My Browser" icon="browser-icon" terminal=false {
categories "Network" "WebBrowser"
mime_types "text/html" "application/xhtml+xml"
}
}
"""
let manifest = parseManifest(kdlContent, NIP, FormatKDL)
check manifest.desktop.isSome
let dt = manifest.desktop.get()
check dt.displayName == "My Browser"
check dt.icon == some("browser-icon")
check dt.categories == @["Network", "WebBrowser"]
test "Serialization Roundtrip":
var manifest = PackageManifest(
format: NIP,
name: "app",
version: parseSemanticVersion("1.0.0"),
license: "MIT"
)
manifest.desktop = some(DesktopIntegration(
displayName: "My App",
icon: some("app-icon"),
categories: @["Utility"],
terminal: true
))
# JSON
let jsonStr = serializeManifestToJSON(manifest)
let jsonManifest = parseManifest(jsonStr, NIP, FormatJSON)
check jsonManifest.desktop.get().displayName == "My App"
check jsonManifest.desktop.get().terminal == true
# KDL
let kdlStr = serializeManifestToKDL(manifest)
let kdlManifest = parseManifest(kdlStr, NIP, FormatKDL)
check kdlManifest.desktop.get().displayName == "My App"
check kdlManifest.desktop.get().categories == @["Utility"]
test "Hash Determinism":
var m1 = PackageManifest(name: "app", version: parseSemanticVersion("1.0.0"), license: "MIT")
m1.desktop = some(DesktopIntegration(
displayName: "App",
categories: @["B", "A"] # Unsorted
))
var m2 = PackageManifest(name: "app", version: parseSemanticVersion("1.0.0"), license: "MIT")
m2.desktop = some(DesktopIntegration(
displayName: "App",
categories: @["A", "B"] # Sorted
))
check calculateManifestHash(m1) == calculateManifestHash(m2)