master
1const std = @import("std");
2const builtin = @import("builtin");
3
4// Note: the environment variables under test are set by the build.zig
5pub fn main() !void {
6 var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init;
7 defer _ = gpa.deinit();
8 const allocator = gpa.allocator();
9
10 var arena_state = std.heap.ArenaAllocator.init(allocator);
11 defer arena_state.deinit();
12 const arena = arena_state.allocator();
13
14 // hasNonEmptyEnvVar
15 {
16 try std.testing.expect(try std.process.hasNonEmptyEnvVar(allocator, "FOO"));
17 try std.testing.expect(!(try std.process.hasNonEmptyEnvVar(allocator, "FOO=")));
18 try std.testing.expect(!(try std.process.hasNonEmptyEnvVar(allocator, "FO")));
19 try std.testing.expect(!(try std.process.hasNonEmptyEnvVar(allocator, "FOOO")));
20 if (builtin.os.tag == .windows) {
21 try std.testing.expect(try std.process.hasNonEmptyEnvVar(allocator, "foo"));
22 }
23 try std.testing.expect(try std.process.hasNonEmptyEnvVar(allocator, "EQUALS"));
24 try std.testing.expect(!(try std.process.hasNonEmptyEnvVar(allocator, "EQUALS=ABC")));
25 try std.testing.expect(try std.process.hasNonEmptyEnvVar(allocator, "КИРиллИЦА"));
26 if (builtin.os.tag == .windows) {
27 try std.testing.expect(try std.process.hasNonEmptyEnvVar(allocator, "кирИЛЛица"));
28 }
29 try std.testing.expect(!(try std.process.hasNonEmptyEnvVar(allocator, "NO_VALUE")));
30 try std.testing.expect(!(try std.process.hasNonEmptyEnvVar(allocator, "NOT_SET")));
31 if (builtin.os.tag == .windows) {
32 try std.testing.expect(try std.process.hasNonEmptyEnvVar(allocator, "=HIDDEN"));
33 try std.testing.expect(try std.process.hasNonEmptyEnvVar(allocator, "INVALID_UTF16_\xed\xa0\x80"));
34 }
35 }
36
37 // hasNonEmptyEnvVarContstant
38 {
39 try std.testing.expect(std.process.hasNonEmptyEnvVarConstant("FOO"));
40 try std.testing.expect(!std.process.hasNonEmptyEnvVarConstant("FOO="));
41 try std.testing.expect(!std.process.hasNonEmptyEnvVarConstant("FO"));
42 try std.testing.expect(!std.process.hasNonEmptyEnvVarConstant("FOOO"));
43 if (builtin.os.tag == .windows) {
44 try std.testing.expect(std.process.hasNonEmptyEnvVarConstant("foo"));
45 }
46 try std.testing.expect(std.process.hasNonEmptyEnvVarConstant("EQUALS"));
47 try std.testing.expect(!std.process.hasNonEmptyEnvVarConstant("EQUALS=ABC"));
48 try std.testing.expect(std.process.hasNonEmptyEnvVarConstant("КИРиллИЦА"));
49 if (builtin.os.tag == .windows) {
50 try std.testing.expect(std.process.hasNonEmptyEnvVarConstant("кирИЛЛица"));
51 }
52 try std.testing.expect(!(std.process.hasNonEmptyEnvVarConstant("NO_VALUE")));
53 try std.testing.expect(!(std.process.hasNonEmptyEnvVarConstant("NOT_SET")));
54 if (builtin.os.tag == .windows) {
55 try std.testing.expect(std.process.hasNonEmptyEnvVarConstant("=HIDDEN"));
56 try std.testing.expect(std.process.hasNonEmptyEnvVarConstant("INVALID_UTF16_\xed\xa0\x80"));
57 }
58 }
59
60 // hasEnvVar
61 {
62 try std.testing.expect(try std.process.hasEnvVar(allocator, "FOO"));
63 try std.testing.expect(!(try std.process.hasEnvVar(allocator, "FOO=")));
64 try std.testing.expect(!(try std.process.hasEnvVar(allocator, "FO")));
65 try std.testing.expect(!(try std.process.hasEnvVar(allocator, "FOOO")));
66 if (builtin.os.tag == .windows) {
67 try std.testing.expect(try std.process.hasEnvVar(allocator, "foo"));
68 }
69 try std.testing.expect(try std.process.hasEnvVar(allocator, "EQUALS"));
70 try std.testing.expect(!(try std.process.hasEnvVar(allocator, "EQUALS=ABC")));
71 try std.testing.expect(try std.process.hasEnvVar(allocator, "КИРиллИЦА"));
72 if (builtin.os.tag == .windows) {
73 try std.testing.expect(try std.process.hasEnvVar(allocator, "кирИЛЛица"));
74 }
75 try std.testing.expect(try std.process.hasEnvVar(allocator, "NO_VALUE"));
76 try std.testing.expect(!(try std.process.hasEnvVar(allocator, "NOT_SET")));
77 if (builtin.os.tag == .windows) {
78 try std.testing.expect(try std.process.hasEnvVar(allocator, "=HIDDEN"));
79 try std.testing.expect(try std.process.hasEnvVar(allocator, "INVALID_UTF16_\xed\xa0\x80"));
80 }
81 }
82
83 // hasEnvVarConstant
84 {
85 try std.testing.expect(std.process.hasEnvVarConstant("FOO"));
86 try std.testing.expect(!std.process.hasEnvVarConstant("FOO="));
87 try std.testing.expect(!std.process.hasEnvVarConstant("FO"));
88 try std.testing.expect(!std.process.hasEnvVarConstant("FOOO"));
89 if (builtin.os.tag == .windows) {
90 try std.testing.expect(std.process.hasEnvVarConstant("foo"));
91 }
92 try std.testing.expect(std.process.hasEnvVarConstant("EQUALS"));
93 try std.testing.expect(!std.process.hasEnvVarConstant("EQUALS=ABC"));
94 try std.testing.expect(std.process.hasEnvVarConstant("КИРиллИЦА"));
95 if (builtin.os.tag == .windows) {
96 try std.testing.expect(std.process.hasEnvVarConstant("кирИЛЛица"));
97 }
98 try std.testing.expect(std.process.hasEnvVarConstant("NO_VALUE"));
99 try std.testing.expect(!(std.process.hasEnvVarConstant("NOT_SET")));
100 if (builtin.os.tag == .windows) {
101 try std.testing.expect(std.process.hasEnvVarConstant("=HIDDEN"));
102 try std.testing.expect(std.process.hasEnvVarConstant("INVALID_UTF16_\xed\xa0\x80"));
103 }
104 }
105
106 // getEnvVarOwned
107 {
108 try std.testing.expectEqualSlices(u8, "123", try std.process.getEnvVarOwned(arena, "FOO"));
109 try std.testing.expectError(error.EnvironmentVariableNotFound, std.process.getEnvVarOwned(arena, "FOO="));
110 try std.testing.expectError(error.EnvironmentVariableNotFound, std.process.getEnvVarOwned(arena, "FO"));
111 try std.testing.expectError(error.EnvironmentVariableNotFound, std.process.getEnvVarOwned(arena, "FOOO"));
112 if (builtin.os.tag == .windows) {
113 try std.testing.expectEqualSlices(u8, "123", try std.process.getEnvVarOwned(arena, "foo"));
114 }
115 try std.testing.expectEqualSlices(u8, "ABC=123", try std.process.getEnvVarOwned(arena, "EQUALS"));
116 try std.testing.expectError(error.EnvironmentVariableNotFound, std.process.getEnvVarOwned(arena, "EQUALS=ABC"));
117 try std.testing.expectEqualSlices(u8, "non-ascii አማርኛ \u{10FFFF}", try std.process.getEnvVarOwned(arena, "КИРиллИЦА"));
118 if (builtin.os.tag == .windows) {
119 try std.testing.expectEqualSlices(u8, "non-ascii አማርኛ \u{10FFFF}", try std.process.getEnvVarOwned(arena, "кирИЛЛица"));
120 }
121 try std.testing.expectEqualSlices(u8, "", try std.process.getEnvVarOwned(arena, "NO_VALUE"));
122 try std.testing.expectError(error.EnvironmentVariableNotFound, std.process.getEnvVarOwned(arena, "NOT_SET"));
123 if (builtin.os.tag == .windows) {
124 try std.testing.expectEqualSlices(u8, "hi", try std.process.getEnvVarOwned(arena, "=HIDDEN"));
125 try std.testing.expectEqualSlices(u8, "\xed\xa0\x80", try std.process.getEnvVarOwned(arena, "INVALID_UTF16_\xed\xa0\x80"));
126 }
127 }
128
129 // parseEnvVarInt
130 {
131 try std.testing.expectEqual(123, try std.process.parseEnvVarInt("FOO", u32, 10));
132 try std.testing.expectError(error.EnvironmentVariableNotFound, std.process.parseEnvVarInt("FO", u32, 10));
133 try std.testing.expectError(error.EnvironmentVariableNotFound, std.process.parseEnvVarInt("FOOO", u32, 10));
134 try std.testing.expectEqual(0x123, try std.process.parseEnvVarInt("FOO", u32, 16));
135 if (builtin.os.tag == .windows) {
136 try std.testing.expectEqual(123, try std.process.parseEnvVarInt("foo", u32, 10));
137 }
138 try std.testing.expectError(error.InvalidCharacter, std.process.parseEnvVarInt("EQUALS", u32, 10));
139 try std.testing.expectError(error.EnvironmentVariableNotFound, std.process.parseEnvVarInt("EQUALS=ABC", u32, 10));
140 try std.testing.expectError(error.InvalidCharacter, std.process.parseEnvVarInt("КИРиллИЦА", u32, 10));
141 try std.testing.expectError(error.InvalidCharacter, std.process.parseEnvVarInt("NO_VALUE", u32, 10));
142 try std.testing.expectError(error.EnvironmentVariableNotFound, std.process.parseEnvVarInt("NOT_SET", u32, 10));
143 if (builtin.os.tag == .windows) {
144 try std.testing.expectError(error.InvalidCharacter, std.process.parseEnvVarInt("=HIDDEN", u32, 10));
145 try std.testing.expectError(error.InvalidCharacter, std.process.parseEnvVarInt("INVALID_UTF16_\xed\xa0\x80", u32, 10));
146 }
147 }
148
149 // EnvMap
150 {
151 var env_map = try std.process.getEnvMap(allocator);
152 defer env_map.deinit();
153
154 try std.testing.expectEqualSlices(u8, "123", env_map.get("FOO").?);
155 try std.testing.expectEqual(null, env_map.get("FO"));
156 try std.testing.expectEqual(null, env_map.get("FOOO"));
157 if (builtin.os.tag == .windows) {
158 try std.testing.expectEqualSlices(u8, "123", env_map.get("foo").?);
159 }
160 try std.testing.expectEqualSlices(u8, "ABC=123", env_map.get("EQUALS").?);
161 try std.testing.expectEqual(null, env_map.get("EQUALS=ABC"));
162 try std.testing.expectEqualSlices(u8, "non-ascii አማርኛ \u{10FFFF}", env_map.get("КИРиллИЦА").?);
163 if (builtin.os.tag == .windows) {
164 try std.testing.expectEqualSlices(u8, "non-ascii አማርኛ \u{10FFFF}", env_map.get("кирИЛЛица").?);
165 }
166 try std.testing.expectEqualSlices(u8, "", env_map.get("NO_VALUE").?);
167 try std.testing.expectEqual(null, env_map.get("NOT_SET"));
168 if (builtin.os.tag == .windows) {
169 try std.testing.expectEqualSlices(u8, "hi", env_map.get("=HIDDEN").?);
170 try std.testing.expectEqualSlices(u8, "\xed\xa0\x80", env_map.get("INVALID_UTF16_\xed\xa0\x80").?);
171 }
172 }
173}