Skip to content

Commit

Permalink
Update tests for new structure (#5)
Browse files Browse the repository at this point in the history
  • Loading branch information
ulrikstrid authored Mar 10, 2019
1 parent ca8d25c commit dbb886c
Show file tree
Hide file tree
Showing 10 changed files with 44 additions and 37 deletions.
Empty file added library/Dotenv.re
Empty file.
9 changes: 8 additions & 1 deletion library/Reenv.re
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ let t_of_in_channel = (t, ic) => {
|> List.map(String.split_on_char('='))
|> List.map(Util.escapeEquals)
|> List.iter(((key, value)) => Hashtbl.replace(t, key, value));

t;
};

let array_of_t: t => array(string) =
Expand All @@ -14,10 +16,15 @@ let array_of_t: t => array(string) =
|> Array.of_list;
};

let make = (): t => Hashtbl.create(64);

let get_opt = (key, t) => Hashtbl.find_opt(t, key);
let get_exn = (key, t) => Hashtbl.find(t, key);

let main = (~envFiles, ~command, argv) => {
let programArgs = Array.of_list([command, ...argv]);

let t: t = Hashtbl.create(64);
let t: t = make();

Unix.environment()
|> Array.map(s =>
Expand Down
9 changes: 9 additions & 0 deletions library/Reenv.rei
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
module Util = Util;

type t;

let make: unit => t;

let get_opt: (string, t) => option(string);
let get_exn: (string, t) => string;

let array_of_t: t => array(string);

let main: (~envFiles: list(string), ~command: string, list(string)) => 'a;

let t_of_in_channel: (t, in_channel) => t;
6 changes: 6 additions & 0 deletions library/Util.rei
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
let readUntilEndOfFile:
(~previousLines: list(string)=?, in_channel) => list(string);

let trimCitation: string => string;

let escapeEquals: list(string) => (string, string);
42 changes: 15 additions & 27 deletions test/DotenvCompliance.re
Original file line number Diff line number Diff line change
Expand Up @@ -18,63 +18,51 @@ describe("dotenv compliance", utils => {
utils.test("BASIC=basic is same as BASIC=\"basic\"", ({expect}) => {
let env =
open_in_bin("./fixtures/.env.quotes")
|> Reenv.tOfInChannel
|> Reenv.arrayOft;
|> Reenv.t_of_in_channel(Reenv.make())
|> Reenv.get_exn("BASIC");

let first = env[0];
let second = env[1];

expect.string(first).toEqual(second);
expect.string(env).toEqual("basic");
});

utils.test(
"empty values become empty strings (EMPTY= becomes EMPTY=\"\")",
({expect}) => {
let env =
open_in_bin("./fixtures/.env.empty")
|> Reenv.tOfInChannel
|> Reenv.arrayOft;

let first = env[0];
let second = env[1];
|> Reenv.t_of_in_channel(Reenv.make())
|> Reenv.get_exn("EMPTY");

expect.string(first).toEqual(second);
expect.string(env).toEqual("");
});

utils.test(
"single and double quoted values are escaped (SINGLE_QUOTE='quoted' == SINGLE_QUOTE=\"quoted\")",
({expect}) => {
let env =
open_in_bin("./fixtures/.env.single_quotes")
|> Reenv.tOfInChannel
|> Reenv.arrayOft;
|> Reenv.t_of_in_channel(Reenv.make())
|> Reenv.get_exn("SINGLE_QUOTE");

let first = env[0];
let second = env[1];

expect.string(first).toEqual(second);
expect.string(env).toEqual("quoted");
},
);

utils.test("whitespace is removed from both ends of the value", ({expect}) => {
let env =
open_in_bin("./fixtures/.env.trim")
|> Reenv.tOfInChannel
|> Reenv.arrayOft;

let first = env[0];
let second = env[1];
|> Reenv.t_of_in_channel(Reenv.make())
|> Reenv.get_exn("TRIM");

expect.string(first).toEqual(second);
expect.string(env).toEqual("trim");
});

utils.test(
"inner quotes are maintained (think JSON) (JSON={\"foo\": \"bar\"} becomes {JSON:\"{\\\"foo\\\": \\\"bar\\\"}\")",
({expect}) => {
let env =
open_in_bin("./fixtures/.env.json")
|> Reenv.tOfInChannel
|> Reenv.arrayOft;
|> Reenv.t_of_in_channel(Reenv.make())
|> Reenv.array_of_t;

let first = env[0];

Expand All @@ -85,7 +73,7 @@ describe("dotenv compliance", utils => {
utils.test("new lines are expanded", ({expect}) => {
let env =
open_in_bin("./fixtures/.env.new_line")
|> Reenv.tOfInChannel
|> Reenv.t_of_in_channel(Reenv.make())
|> Reenv.array_of_t;

let first = env[0];
Expand Down
11 changes: 6 additions & 5 deletions test/UtilsTest.re
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ describe("readUntilEndOfFile", utils =>
})
);


describe("escapeEquals", (utils) => {
describe("escapeEquals", utils =>
utils.test("works as expected", ({expect}) => {
expect.string(Reenv.Util.escapeEquals(["test", "test", "test"])).toEqual("test=test=test");
});
})
let (key, value) = Reenv.Util.escapeEquals(["test", "test", "test"]);
expect.string(key).toEqual("test");
expect.string(value).toEqual("test=test");
})
);
1 change: 0 additions & 1 deletion test/fixtures/.env.empty
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
EMPTY=""
EMPTY=
1 change: 0 additions & 1 deletion test/fixtures/.env.quotes
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
BASIC=basic
BASIC="basic"
1 change: 0 additions & 1 deletion test/fixtures/.env.single_quotes
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
SINGLE_QUOTE="quoted"
SINGLE_QUOTE='quoted'
1 change: 0 additions & 1 deletion test/fixtures/.env.trim
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
TRIM=" trim "
TRIM="trim"

0 comments on commit dbb886c

Please sign in to comment.