import lib fn contains(haystack: String, needle: String): Bool = match String.indexOf(haystack, needle) { Some(_) => true, None => false, } // Snapshot: complete single-item feed fn test_snapshot_single_item_feed(): Unit with {Test} = { let f = lib.feed( "My Blog", "https://example.com", "A personal blog", [lib.item("Hello World", "https://example.com/hello", "My first post", "2025-01-29")] ) let xml = lib.render(f) // Verify exact structure of the feed Test.assert(String.startsWith(xml, ""), "snap: XML declaration") Test.assert(contains(xml, ""), "snap: RSS opening tag") Test.assert(contains(xml, ""), "snap: channel open") Test.assert(contains(xml, "My Blog"), "snap: feed title") Test.assert(contains(xml, "https://example.com"), "snap: feed link") Test.assert(contains(xml, "A personal blog"), "snap: feed desc") Test.assert(contains(xml, "en"), "snap: language") Test.assert(contains(xml, "Lux RSS Package"), "snap: generator") Test.assert(contains(xml, ""), "snap: item open") Test.assert(contains(xml, "Hello World"), "snap: item title") Test.assert(contains(xml, "https://example.com/hello"), "snap: item link") Test.assert(contains(xml, "My first post"), "snap: item desc") Test.assert(contains(xml, "29 Jan 2025 00:00:00 GMT"), "snap: item pubDate") Test.assert(contains(xml, "https://example.com/hello"), "snap: item guid") Test.assert(contains(xml, ""), "snap: item close") Test.assert(contains(xml, ""), "snap: channel and rss close") } // Snapshot: empty feed fn test_snapshot_empty_feed(): Unit with {Test} = { let f = lib.feed("Empty", "https://example.com", "Nothing", []) let xml = lib.render(f) Test.assert(String.startsWith(xml, " tags Test.assertEqualMsg(false, contains(xml, ""), "snap: no item tags") Test.assert(contains(xml, "Empty"), "snap: title present") Test.assert(String.endsWith(xml, ""), "snap: ends properly") } // Snapshot: feed with custom language fn test_snapshot_french_feed(): Unit with {Test} = { let f = lib.feedWithLang("Blog Francais", "https://exemple.fr", "Un blog", "fr", [ lib.item("Bonjour", "https://exemple.fr/bonjour", "Premier article", "2025-06-15") ]) let xml = lib.render(f) Test.assert(contains(xml, "fr"), "snap: french language") Test.assert(contains(xml, "Bonjour"), "snap: french item title") Test.assert(contains(xml, "15 Jun 2025 00:00:00 GMT"), "snap: french item date") } // Snapshot: feed with escaped content fn test_snapshot_escaped_feed(): Unit with {Test} = { let f = lib.feed( "Tom & Jerry", "https://example.com", "A show", [lib.item("Episode: \"The Chase\"", "https://example.com/1", "Tom & Jerry's adventure", "2025-01-01")] ) let xml = lib.render(f) Test.assert(contains(xml, "Tom & Jerry"), "snap: escaped feed title") Test.assert(contains(xml, "A <fun> show"), "snap: escaped feed desc") } // Snapshot: multi-item feed order fn test_snapshot_multi_item_order(): Unit with {Test} = { let f = lib.feed("Blog", "https://example.com", "A blog", [ lib.item("First", "https://example.com/1", "D1", "2025-01-01"), lib.item("Second", "https://example.com/2", "D2", "2025-02-01"), lib.item("Third", "https://example.com/3", "D3", "2025-03-01") ]) let xml = lib.render(f) // Items should appear in order let firstIdx = match String.indexOf(xml, "First") { Some(i) => i, None => -1 } let secondIdx = match String.indexOf(xml, "Second") { Some(i) => i, None => -1 } let thirdIdx = match String.indexOf(xml, "Third") { Some(i) => i, None => -1 } Test.assert(firstIdx > 0, "snap: first item found") Test.assert(secondIdx > firstIdx, "snap: second after first") Test.assert(thirdIdx > secondIdx, "snap: third after second") } // Snapshot: date conversion across all months fn test_snapshot_all_month_dates(): Unit with {Test} = { Test.assertEqualMsg("01 Jan 2025 00:00:00 GMT", lib.isoToRfc822("2025-01-01"), "snap: Jan") Test.assertEqualMsg("01 Feb 2025 00:00:00 GMT", lib.isoToRfc822("2025-02-01"), "snap: Feb") Test.assertEqualMsg("01 Mar 2025 00:00:00 GMT", lib.isoToRfc822("2025-03-01"), "snap: Mar") Test.assertEqualMsg("01 Apr 2025 00:00:00 GMT", lib.isoToRfc822("2025-04-01"), "snap: Apr") Test.assertEqualMsg("01 May 2025 00:00:00 GMT", lib.isoToRfc822("2025-05-01"), "snap: May") Test.assertEqualMsg("01 Jun 2025 00:00:00 GMT", lib.isoToRfc822("2025-06-01"), "snap: Jun") Test.assertEqualMsg("01 Jul 2025 00:00:00 GMT", lib.isoToRfc822("2025-07-01"), "snap: Jul") Test.assertEqualMsg("01 Aug 2025 00:00:00 GMT", lib.isoToRfc822("2025-08-01"), "snap: Aug") Test.assertEqualMsg("01 Sep 2025 00:00:00 GMT", lib.isoToRfc822("2025-09-01"), "snap: Sep") Test.assertEqualMsg("01 Oct 2025 00:00:00 GMT", lib.isoToRfc822("2025-10-01"), "snap: Oct") Test.assertEqualMsg("01 Nov 2025 00:00:00 GMT", lib.isoToRfc822("2025-11-01"), "snap: Nov") Test.assertEqualMsg("01 Dec 2025 00:00:00 GMT", lib.isoToRfc822("2025-12-01"), "snap: Dec") }