Fix quoted values check

pull/25/head
Matias Anaya 2017-03-21 18:35:16 +11:00
parent d10b3fbe00
commit 6a1233b2f6
2 changed files with 14 additions and 12 deletions

View File

@ -216,14 +216,16 @@ func parseLine(line string) (key string, value string, err error) {
value = strings.Trim(value, " ") value = strings.Trim(value, " ")
// check if we've got quoted values // check if we've got quoted values
if strings.Count(value, "\"") == 2 || strings.Count(value, "'") == 2 { first := string(value[0:1])
last := string(value[len(value)-1:])
if first == last && strings.ContainsAny(first, `"'`) {
// pull the quotes off the edges // pull the quotes off the edges
value = strings.Trim(value, "\"'") value = strings.Trim(value, `"'`)
// expand quotes // expand quotes
value = strings.Replace(value, "\\\"", "\"", -1) value = strings.Replace(value, `\"`, `"`, -1)
// expand newlines // expand newlines
value = strings.Replace(value, "\\n", "\n", -1) value = strings.Replace(value, `\n`, "\n", -1)
} }
return return

View File

@ -187,24 +187,24 @@ func TestParsing(t *testing.T) {
parseAndCompare(t, "FOO= bar", "FOO", "bar") parseAndCompare(t, "FOO= bar", "FOO", "bar")
// parses double quoted values // parses double quoted values
parseAndCompare(t, "FOO=\"bar\"", "FOO", "bar") parseAndCompare(t, `FOO="bar"`, "FOO", "bar")
// parses single quoted values // parses single quoted values
parseAndCompare(t, "FOO='bar'", "FOO", "bar") parseAndCompare(t, "FOO='bar'", "FOO", "bar")
// parses escaped double quotes // parses escaped double quotes
parseAndCompare(t, "FOO=escaped\\\"bar\"", "FOO", "escaped\"bar") parseAndCompare(t, `FOO="escaped\"bar"`, "FOO", `escaped"bar`)
// parses yaml style options // parses yaml style options
parseAndCompare(t, "OPTION_A: 1", "OPTION_A", "1") parseAndCompare(t, "OPTION_A: 1", "OPTION_A", "1")
// parses export keyword // parses export keyword
parseAndCompare(t, "export OPTION_A=2", "OPTION_A", "2") parseAndCompare(t, "export OPTION_A=2", "OPTION_A", "2")
parseAndCompare(t, "export OPTION_B='\\n'", "OPTION_B", "\n") parseAndCompare(t, `export OPTION_B='\n'`, "OPTION_B", "\n")
// it 'expands newlines in quoted strings' do // it 'expands newlines in quoted strings' do
// expect(env('FOO="bar\nbaz"')).to eql('FOO' => "bar\nbaz") // expect(env('FOO="bar\nbaz"')).to eql('FOO' => "bar\nbaz")
parseAndCompare(t, "FOO=\"bar\\nbaz\"", "FOO", "bar\nbaz") parseAndCompare(t, `FOO="bar\nbaz"`, "FOO", "bar\nbaz")
// it 'parses varibales with "." in the name' do // it 'parses varibales with "." in the name' do
// expect(env('FOO.BAR=foobar')).to eql('FOO.BAR' => 'foobar') // expect(env('FOO.BAR=foobar')).to eql('FOO.BAR' => 'foobar')
@ -224,14 +224,14 @@ func TestParsing(t *testing.T) {
// it 'allows # in quoted value' do // it 'allows # in quoted value' do
// expect(env('foo="bar#baz" # comment')).to eql('foo' => 'bar#baz') // expect(env('foo="bar#baz" # comment')).to eql('foo' => 'bar#baz')
parseAndCompare(t, "FOO=\"bar#baz\" # comment", "FOO", "bar#baz") parseAndCompare(t, `FOO="bar#baz" # comment`, "FOO", "bar#baz")
parseAndCompare(t, "FOO='bar#baz' # comment", "FOO", "bar#baz") parseAndCompare(t, "FOO='bar#baz' # comment", "FOO", "bar#baz")
parseAndCompare(t, "FOO=\"bar#baz#bang\" # comment", "FOO", "bar#baz#bang") parseAndCompare(t, `FOO="bar#baz#bang" # comment`, "FOO", "bar#baz#bang")
// it 'parses # in quoted values' do // it 'parses # in quoted values' do
// expect(env('foo="ba#r"')).to eql('foo' => 'ba#r') // expect(env('foo="ba#r"')).to eql('foo' => 'ba#r')
// expect(env("foo='ba#r'")).to eql('foo' => 'ba#r') // expect(env("foo='ba#r'")).to eql('foo' => 'ba#r')
parseAndCompare(t, "FOO=\"ba#r\"", "FOO", "ba#r") parseAndCompare(t, `FOO="ba#r"`, "FOO", "ba#r")
parseAndCompare(t, "FOO='ba#r'", "FOO", "ba#r") parseAndCompare(t, "FOO='ba#r'", "FOO", "ba#r")
// it 'throws an error if line format is incorrect' do // it 'throws an error if line format is incorrect' do
@ -265,7 +265,7 @@ func TestLinesToIgnore(t *testing.T) {
} }
// make sure we're not getting false positives // make sure we're not getting false positives
if isIgnoredLine("export OPTION_B='\\n'") { if isIgnoredLine(`export OPTION_B='\n'`) {
t.Error("ignoring a perfectly valid line to parse") t.Error("ignoring a perfectly valid line to parse")
} }
} }