anchor.diff:      ])}, pop_msg()),
       ?assertEqual(ok, onepanel_env:write([a2, k5, k7, k8], v9, "p1")),
       Msg = pop_msg(),
  -    ?_assertEqual({ok, ?FILE_CONTENT([
  +    ?assertEqual({ok, ?FILE_CONTENT([
           {a1, ?APP_CONFIG_1},
           {a2, [
               {k4, v4},
  
positive.code:     ])}, pop_msg()),
      ?assertEqual(ok, onepanel_env:write([a2, k5, k9], v9, "p1")),
      Msg = pop_msg(),
      ?_assertEqual({ok, ?FILE_CONTENT([
          {a1, ?APP_CONFIG_1},
          {a2, [
              {k4, v4},
  
negative.code:     ?assertEqual({ok, ?VALUE_5}, onepanel_env:read([a2, k5], "p1")),
      ?assertEqual({ok, v6}, onepanel_env:read([a2, k5, k6], "p1")),
      ?assertEqual({ok, ?VALUE_7}, onepanel_env:read([a2, k5, k7], "p1")),
      ?assertEqual({ok, v8}, onepanel_env:read([a2, k5, k7, k8], "p1")).
  
  
  read_should_report_missing_key() ->
      ?assertMatch(#error{reason = ?ERR_NOT_FOUND},
          onepanel_env:read([a3], "p1")),
      ?assertMatch(#error{reason = ?ERR_NOT_FOUND},
          onepanel_env:read([a1, k5], "p1")),
      ?assertMatch(#error{reason = ?ERR_NOT_FOUND},
          onepanel_env:read([a2, k6, k8], "p1")),
      ?assertMatch(#error{reason = ?ERR_NOT_FOUND},
          onepanel_env:read([a2, k6, k7, k9], "p1")).
  
  
  read_should_pass_errors() ->
      ?assertThrow(#error{reason = enoent}, onepanel_env:read([a1], "p2")).
  
  
  write_should_append_value() ->
      ?assertEqual(ok, onepanel_env:write([a3], [{k9, v9}], "p1")),
      ?assertEqual({ok, ?FILE_CONTENT([
          {a1, ?APP_CONFIG_1},
  