mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-04-26 13:01:34 +03:00
152 lines
8.0 KiB
Zig
152 lines
8.0 KiB
Zig
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
|
|
// Note: the environment variables under test are set by the build.zig
|
|
pub fn main(init: std.process.Init) !void {
|
|
@setEvalBranchQuota(10000);
|
|
|
|
const allocator = init.gpa;
|
|
const arena = init.arena.allocator();
|
|
const environ = init.minimal.environ;
|
|
|
|
// containsUnempty
|
|
{
|
|
try std.testing.expect(try environ.containsUnempty(allocator, "FOO"));
|
|
try std.testing.expect(!(try environ.containsUnempty(allocator, "FOO=")));
|
|
try std.testing.expect(!(try environ.containsUnempty(allocator, "FO")));
|
|
try std.testing.expect(!(try environ.containsUnempty(allocator, "FOOO")));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(try environ.containsUnempty(allocator, "foo"));
|
|
}
|
|
try std.testing.expect(try environ.containsUnempty(allocator, "EQUALS"));
|
|
try std.testing.expect(!(try environ.containsUnempty(allocator, "EQUALS=ABC")));
|
|
try std.testing.expect(try environ.containsUnempty(allocator, "КИРиллИЦА"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(try environ.containsUnempty(allocator, "кирИЛЛица"));
|
|
}
|
|
try std.testing.expect(!(try environ.containsUnempty(allocator, "NO_VALUE")));
|
|
try std.testing.expect(!(try environ.containsUnempty(allocator, "NOT_SET")));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(try environ.containsUnempty(allocator, "=HIDDEN"));
|
|
try std.testing.expect(try environ.containsUnempty(allocator, "INVALID_UTF16_\xed\xa0\x80"));
|
|
}
|
|
}
|
|
|
|
// containsUnemptyConstant
|
|
{
|
|
try std.testing.expect(environ.containsUnemptyConstant("FOO"));
|
|
try std.testing.expect(!environ.containsUnemptyConstant("FOO="));
|
|
try std.testing.expect(!environ.containsUnemptyConstant("FO"));
|
|
try std.testing.expect(!environ.containsUnemptyConstant("FOOO"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(environ.containsUnemptyConstant("foo"));
|
|
}
|
|
try std.testing.expect(environ.containsUnemptyConstant("EQUALS"));
|
|
try std.testing.expect(!environ.containsUnemptyConstant("EQUALS=ABC"));
|
|
try std.testing.expect(environ.containsUnemptyConstant("КИРиллИЦА"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(environ.containsUnemptyConstant("кирИЛЛица"));
|
|
}
|
|
try std.testing.expect(!(environ.containsUnemptyConstant("NO_VALUE")));
|
|
try std.testing.expect(!(environ.containsUnemptyConstant("NOT_SET")));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(environ.containsUnemptyConstant("=HIDDEN"));
|
|
try std.testing.expect(environ.containsUnemptyConstant("INVALID_UTF16_\xed\xa0\x80"));
|
|
}
|
|
}
|
|
|
|
// contains
|
|
{
|
|
try std.testing.expect(try environ.contains(allocator, "FOO"));
|
|
try std.testing.expect(!(try environ.contains(allocator, "FOO=")));
|
|
try std.testing.expect(!(try environ.contains(allocator, "FO")));
|
|
try std.testing.expect(!(try environ.contains(allocator, "FOOO")));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(try environ.contains(allocator, "foo"));
|
|
}
|
|
try std.testing.expect(try environ.contains(allocator, "EQUALS"));
|
|
try std.testing.expect(!(try environ.contains(allocator, "EQUALS=ABC")));
|
|
try std.testing.expect(try environ.contains(allocator, "КИРиллИЦА"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(try environ.contains(allocator, "кирИЛЛица"));
|
|
}
|
|
try std.testing.expect(try environ.contains(allocator, "NO_VALUE"));
|
|
try std.testing.expect(!(try environ.contains(allocator, "NOT_SET")));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(try environ.contains(allocator, "=HIDDEN"));
|
|
try std.testing.expect(try environ.contains(allocator, "INVALID_UTF16_\xed\xa0\x80"));
|
|
}
|
|
}
|
|
|
|
// containsConstant
|
|
{
|
|
try std.testing.expect(environ.containsConstant("FOO"));
|
|
try std.testing.expect(!environ.containsConstant("FOO="));
|
|
try std.testing.expect(!environ.containsConstant("FO"));
|
|
try std.testing.expect(!environ.containsConstant("FOOO"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(environ.containsConstant("foo"));
|
|
}
|
|
try std.testing.expect(environ.containsConstant("EQUALS"));
|
|
try std.testing.expect(!environ.containsConstant("EQUALS=ABC"));
|
|
try std.testing.expect(environ.containsConstant("КИРиллИЦА"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(environ.containsConstant("кирИЛЛица"));
|
|
}
|
|
try std.testing.expect(environ.containsConstant("NO_VALUE"));
|
|
try std.testing.expect(!(environ.containsConstant("NOT_SET")));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expect(environ.containsConstant("=HIDDEN"));
|
|
try std.testing.expect(environ.containsConstant("INVALID_UTF16_\xed\xa0\x80"));
|
|
}
|
|
}
|
|
|
|
// getAlloc
|
|
{
|
|
try std.testing.expectEqualSlices(u8, "123", try environ.getAlloc(arena, "FOO"));
|
|
try std.testing.expectError(error.EnvironmentVariableMissing, environ.getAlloc(arena, "FOO="));
|
|
try std.testing.expectError(error.EnvironmentVariableMissing, environ.getAlloc(arena, "FO"));
|
|
try std.testing.expectError(error.EnvironmentVariableMissing, environ.getAlloc(arena, "FOOO"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expectEqualSlices(u8, "123", try environ.getAlloc(arena, "foo"));
|
|
}
|
|
try std.testing.expectEqualSlices(u8, "ABC=123", try environ.getAlloc(arena, "EQUALS"));
|
|
try std.testing.expectError(error.EnvironmentVariableMissing, environ.getAlloc(arena, "EQUALS=ABC"));
|
|
try std.testing.expectEqualSlices(u8, "non-ascii አማርኛ \u{10FFFF}", try environ.getAlloc(arena, "КИРиллИЦА"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expectEqualSlices(u8, "non-ascii አማርኛ \u{10FFFF}", try environ.getAlloc(arena, "кирИЛЛица"));
|
|
}
|
|
try std.testing.expectEqualSlices(u8, "", try environ.getAlloc(arena, "NO_VALUE"));
|
|
try std.testing.expectError(error.EnvironmentVariableMissing, environ.getAlloc(arena, "NOT_SET"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expectEqualSlices(u8, "hi", try environ.getAlloc(arena, "=HIDDEN"));
|
|
try std.testing.expectEqualSlices(u8, "\xed\xa0\x80", try environ.getAlloc(arena, "INVALID_UTF16_\xed\xa0\x80"));
|
|
}
|
|
}
|
|
|
|
// Environ.Map
|
|
{
|
|
var env_map = try environ.createMap(allocator);
|
|
defer env_map.deinit();
|
|
|
|
try std.testing.expectEqualSlices(u8, "123", env_map.get("FOO").?);
|
|
try std.testing.expectEqual(null, env_map.get("FO"));
|
|
try std.testing.expectEqual(null, env_map.get("FOOO"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expectEqualSlices(u8, "123", env_map.get("foo").?);
|
|
}
|
|
try std.testing.expectEqualSlices(u8, "ABC=123", env_map.get("EQUALS").?);
|
|
try std.testing.expectEqual(null, env_map.get("EQUALS=ABC"));
|
|
try std.testing.expectEqualSlices(u8, "non-ascii አማርኛ \u{10FFFF}", env_map.get("КИРиллИЦА").?);
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expectEqualSlices(u8, "non-ascii አማርኛ \u{10FFFF}", env_map.get("кирИЛЛица").?);
|
|
}
|
|
try std.testing.expectEqualSlices(u8, "", env_map.get("NO_VALUE").?);
|
|
try std.testing.expectEqual(null, env_map.get("NOT_SET"));
|
|
if (builtin.os.tag == .windows) {
|
|
try std.testing.expectEqualSlices(u8, "hi", env_map.get("=HIDDEN").?);
|
|
try std.testing.expectEqualSlices(u8, "\xed\xa0\x80", env_map.get("INVALID_UTF16_\xed\xa0\x80").?);
|
|
}
|
|
}
|
|
}
|