94 lines
2.8 KiB
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)
|