summaryrefslogtreecommitdiff
path: root/tests/glibmm_environ/main.cc
blob: c99e279d139d4a33e584d3800e3ed2f4052e7d95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <glibmm.h>
#include <iostream>

int
main(int, char**)
{
  Glib::Environ env1;
  Glib::Environ env2(env1.to_vector());
  g_assert_true(env1.to_vector() == env2.to_vector());

  // Empty environment.
  const std::vector<std::string> empty_vector;
  Glib::Environ env3(empty_vector);
  g_assert_true(env3.to_vector().size() == 0);

  auto path = env1.get("PATH");
  if (!path)
  {
    // There ought to be a PATH. If there isn't, add one.
    std::cout << "No PATH!" << std::endl;
    env1.set("PATH", "/a/b/c");
  }

  path = env1["PATH"];
  if (!path)
  {
    // Now there really must be a PATH.
    std::cerr << "Still no PATH!" << std::endl;
    return EXIT_FAILURE;
  }

  const std::string name = "GLIBMM_TEST_VAR";
  const std::string value = "This is a test value";
  env1.set(name, value);
  g_assert_true(env1[name] == value);
  env1.set(name, "Second value", false);
  g_assert_true(env1.get(name) == value);
  env1.set(name, "Second value");
  g_assert_true(env1.get(name) == "Second value");
  env1.unset(name);
  if (env1.get(name))
  {
    std::cerr << name << " not removed" << std::endl;
    return EXIT_FAILURE;
  }

  return EXIT_SUCCESS;
}