From 81409f75f5460cc9e859093f2385af6d62238e38 Mon Sep 17 00:00:00 2001 From: Emil Lerch Date: Mon, 14 Jul 2025 15:39:14 -0700 Subject: [PATCH] do not use temp files for tests --- src/config.zig | 6 +++- src/main.zig | 64 +++++++++-------------------------------- src/timestamp_tests.zig | 16 ++--------- 3 files changed, 21 insertions(+), 65 deletions(-) diff --git a/src/config.zig b/src/config.zig index 4d49518..93b9576 100644 --- a/src/config.zig +++ b/src/config.zig @@ -45,7 +45,11 @@ pub fn loadConfig(allocator: Allocator, path: []const u8) !Config { const content = try file.readToEndAlloc(allocator, 1024 * 1024); defer allocator.free(content); - const parsed = try json.parseFromSlice(json.Value, allocator, content, .{}); + return parseConfigFromJson(allocator, content); +} + +pub fn parseConfigFromJson(allocator: Allocator, json_content: []const u8) !Config { + const parsed = try json.parseFromSlice(json.Value, allocator, json_content, .{}); defer parsed.deinit(); const root = parsed.value.object; diff --git a/src/main.zig b/src/main.zig index e04685e..72dd1d5 100644 --- a/src/main.zig +++ b/src/main.zig @@ -221,15 +221,16 @@ fn loadExistingReleases(allocator: Allocator, filename: []const u8) !ArrayList(R const content = try file.readToEndAlloc(allocator, 10 * 1024 * 1024); defer allocator.free(content); - print("Loading existing releases from {s}...\n", .{filename}); + return parseReleasesFromXml(allocator, content); +} - const releases = xml_parser.parseAtomFeed(allocator, content) catch |err| { - print("Warning: Failed to parse existing releases file: {}\n", .{err}); +fn parseReleasesFromXml(allocator: Allocator, xml_content: []const u8) !ArrayList(Release) { + const releases = xml_parser.parseAtomFeed(allocator, xml_content) catch |err| { + print("Warning: Failed to parse XML content: {}\n", .{err}); print("Starting fresh with no existing releases\n", .{}); return ArrayList(Release).init(allocator); }; - print("Loaded {} existing releases\n", .{releases.items.len}); return releases; } @@ -451,7 +452,7 @@ test "Atom feed has correct structure" { test "loadExistingReleases with valid XML" { const allocator = std.testing.allocator; - // Create a temporary file with valid Atom XML + // Test XML content const test_xml = \\ \\ @@ -466,18 +467,8 @@ test "loadExistingReleases with valid XML" { \\ ; - const temp_filename = "test_releases.xml"; - - // Write test XML to file - { - const file = try std.fs.cwd().createFile(temp_filename, .{}); - defer file.close(); - try file.writeAll(test_xml); - } - defer std.fs.cwd().deleteFile(temp_filename) catch {}; - - // Load existing releases - var releases = try loadExistingReleases(allocator, temp_filename); + // Parse releases directly from XML content + var releases = try parseReleasesFromXml(allocator, test_xml); defer { for (releases.items) |release| { release.deinit(allocator); @@ -503,18 +494,9 @@ test "loadExistingReleases with malformed XML" { const allocator = std.testing.allocator; const malformed_xml = "This is not valid XML at all!"; - const temp_filename = "test_malformed.xml"; - - // Write malformed XML to file - { - const file = try std.fs.cwd().createFile(temp_filename, .{}); - defer file.close(); - try file.writeAll(malformed_xml); - } - defer std.fs.cwd().deleteFile(temp_filename) catch {}; // Should handle gracefully and return empty list - var releases = try loadExistingReleases(allocator, temp_filename); + var releases = try parseReleasesFromXml(allocator, malformed_xml); defer releases.deinit(); try std.testing.expectEqual(@as(usize, 0), releases.items.len); @@ -596,18 +578,8 @@ test "loadExistingReleases handles various XML structures" { \\ ; - const temp_filename = "test_minimal.xml"; - - // Write test XML to file - { - const file = try std.fs.cwd().createFile(temp_filename, .{}); - defer file.close(); - try file.writeAll(minimal_xml); - } - defer std.fs.cwd().deleteFile(temp_filename) catch {}; - - // Load existing releases - var releases = try loadExistingReleases(allocator, temp_filename); + // Parse releases directly from XML content + var releases = try parseReleasesFromXml(allocator, minimal_xml); defer { for (releases.items) |release| { release.deinit(allocator); @@ -655,18 +627,8 @@ test "loadExistingReleases with complex XML content" { \\ ; - const temp_filename = "test_complex.xml"; - - // Write test XML to file - { - const file = try std.fs.cwd().createFile(temp_filename, .{}); - defer file.close(); - try file.writeAll(complex_xml); - } - defer std.fs.cwd().deleteFile(temp_filename) catch {}; - - // Load existing releases - var releases = try loadExistingReleases(allocator, temp_filename); + // Parse releases directly from XML content + var releases = try parseReleasesFromXml(allocator, complex_xml); defer { for (releases.items) |release| { release.deinit(allocator); diff --git a/src/timestamp_tests.zig b/src/timestamp_tests.zig index e7200f3..081643f 100644 --- a/src/timestamp_tests.zig +++ b/src/timestamp_tests.zig @@ -10,7 +10,7 @@ const SourceHutConfig = config.SourceHutConfig; test "Config loading without last_check field" { const allocator = std.testing.allocator; - // Create a test config file without last_check + // Create a test config JSON content without last_check const test_config_content = \\{ \\ "github_token": "test_token", @@ -22,18 +22,8 @@ test "Config loading without last_check field" { \\} ; - const temp_config_file = "test_config_no_last_check.json"; - - // Write test config to file - { - const file = try std.fs.cwd().createFile(temp_config_file, .{}); - defer file.close(); - try file.writeAll(test_config_content); - } - defer std.fs.cwd().deleteFile(temp_config_file) catch {}; - - // Load config - const loaded_config = try config.loadConfig(allocator, temp_config_file); + // Parse config directly from JSON content + const loaded_config = try config.parseConfigFromJson(allocator, test_config_content); defer loaded_config.deinit(); // Verify config was loaded correctly