@@ -11,7 +11,7 @@ public class ParserTests
1111 public void Parse_EmptyLines_ShouldBeIgnored ( )
1212 {
1313 var lines = new [ ] { "" , " " , null , "KEY=value" } ;
14- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
14+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
1515 result . Length . ShouldBe ( 1 ) ;
1616 result [ 0 ] . ShouldBe ( new KeyValuePair < string , string > ( "KEY" , "value" ) ) ;
1717 }
@@ -20,7 +20,7 @@ public void Parse_EmptyLines_ShouldBeIgnored()
2020 public void Parse_CommentLines_ShouldBeIgnored ( )
2121 {
2222 var lines = new [ ] { "# Comment" , " # Indented comment" , "KEY=value" } ;
23- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
23+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
2424 result . Length . ShouldBe ( 1 ) ;
2525 result [ 0 ] . ShouldBe ( new KeyValuePair < string , string > ( "KEY" , "value" ) ) ;
2626 }
@@ -29,7 +29,7 @@ public void Parse_CommentLines_ShouldBeIgnored()
2929 public void Parse_LinesWithoutKey_ShouldBeIgnored ( )
3030 {
3131 var lines = new [ ] { "=value" , "NOKEY" , "KEY=value" } ;
32- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
32+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
3333 result . Length . ShouldBe ( 1 ) ;
3434 result [ 0 ] . ShouldBe ( new KeyValuePair < string , string > ( "KEY" , "value" ) ) ;
3535 }
@@ -38,7 +38,7 @@ public void Parse_LinesWithoutKey_ShouldBeIgnored()
3838 public void Parse_SimpleKeyValue_ShouldReturnPair ( )
3939 {
4040 var lines = new [ ] { "TEST_KEY=test_value" } ;
41- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
41+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
4242 result . Length . ShouldBe ( 1 ) ;
4343 result [ 0 ] . ShouldBe ( new KeyValuePair < string , string > ( "TEST_KEY" , "test_value" ) ) ;
4444 }
@@ -47,7 +47,7 @@ public void Parse_SimpleKeyValue_ShouldReturnPair()
4747 public void Parse_UntrimmedValueWithTrimValuesFalse_ShouldPreserveWhitespace ( )
4848 {
4949 var lines = new [ ] { " KEY = value " } ;
50- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
50+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
5151 result . Length . ShouldBe ( 1 ) ;
5252 result [ 0 ] . ShouldBe ( new KeyValuePair < string , string > ( "KEY" , " value " ) ) ;
5353 }
@@ -56,7 +56,7 @@ public void Parse_UntrimmedValueWithTrimValuesFalse_ShouldPreserveWhitespace()
5656 public void Parse_UntrimmedValueWithTrimValuesTrue_ShouldTrimValue ( )
5757 {
5858 var lines = new [ ] { "KEY= value " } ;
59- var result = Parser . Parse ( lines , trimValues : true ) . ToArray ( ) ;
59+ var result = Parser . Parse ( lines , trimValues : true , supportExportSyntax : false ) . ToArray ( ) ;
6060 result . Length . ShouldBe ( 1 ) ;
6161 result [ 0 ] . ShouldBe ( new KeyValuePair < string , string > ( "KEY" , "value" ) ) ;
6262 }
@@ -65,7 +65,7 @@ public void Parse_UntrimmedValueWithTrimValuesTrue_ShouldTrimValue()
6565 public void Parse_SingleQuotedValue_ShouldUnescapeQuotes ( )
6666 {
6767 var lines = new [ ] { "KEY='value with \\ ' quote'" } ;
68- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
68+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
6969 result . Length . ShouldBe ( 1 ) ;
7070 result [ 0 ] . ShouldBe ( new KeyValuePair < string , string > ( "KEY" , "value with ' quote" ) ) ;
7171 }
@@ -74,7 +74,7 @@ public void Parse_SingleQuotedValue_ShouldUnescapeQuotes()
7474 public void Parse_DoubleQuotedValue_ShouldUnescapeQuotes ( )
7575 {
7676 var lines = new [ ] { "KEY=\" value with \\ \" quote\" " } ;
77- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
77+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
7878 result . Length . ShouldBe ( 1 ) ;
7979 result [ 0 ] . ShouldBe ( new KeyValuePair < string , string > ( "KEY" , "value with \" quote" ) ) ;
8080 }
@@ -83,7 +83,7 @@ public void Parse_DoubleQuotedValue_ShouldUnescapeQuotes()
8383 public void Parse_EscapedBackslashes_ShouldUnescape ( )
8484 {
8585 var lines = new [ ] { "KEY='escaped \\ \\ backslash'" } ;
86- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
86+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
8787 result . Length . ShouldBe ( 1 ) ;
8888 result . ShouldContain ( new KeyValuePair < string , string > ( "KEY" , "escaped \\ backslash" ) ) ;
8989 }
@@ -92,7 +92,7 @@ public void Parse_EscapedBackslashes_ShouldUnescape()
9292 public void Parse_MultiLineValue_ShouldCombineLines ( )
9393 {
9494 var lines = new [ ] { "KEY='first line" , "second line'" , "NEXT=value" } ;
95- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
95+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
9696 result . Length . ShouldBe ( 2 ) ;
9797 result [ 0 ] . ShouldBe ( new KeyValuePair < string , string > ( "KEY" , $ "first line{ Environment . NewLine } second line") ) ;
9898 result [ 1 ] . ShouldBe ( new KeyValuePair < string , string > ( "NEXT" , "value" ) ) ;
@@ -102,7 +102,7 @@ public void Parse_MultiLineValue_ShouldCombineLines()
102102 public void Parse_UnclosedQuote_ShouldThrowException ( )
103103 {
104104 var lines = new [ ] { "KEY='unclosed quote" } ;
105- Action act = ( ) => Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
105+ Action act = ( ) => Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
106106 act . ShouldThrow < ArgumentException > ( )
107107 . Message . ShouldBe ( "Unable to parse environment variable: KEY. Missing closing quote." ) ;
108108 }
@@ -111,7 +111,16 @@ public void Parse_UnclosedQuote_ShouldThrowException()
111111 public void Parse_EscapedQuoteInMiddle_ShouldUnescape ( )
112112 {
113113 var lines = new [ ] { "KEY='before\\ 'after'" } ;
114- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
114+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
115+ result . Length . ShouldBe ( 1 ) ;
116+ result . ShouldContain ( new KeyValuePair < string , string > ( "KEY" , "before'after" ) ) ;
117+ }
118+
119+ [ Fact ]
120+ public void Parse_ExportEscapedQuoteInMiddle_ShouldUnescape ( )
121+ {
122+ var lines = new [ ] { "export KEY='before\\ 'after'" } ;
123+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : true ) . ToArray ( ) ;
115124 result . Length . ShouldBe ( 1 ) ;
116125 result . ShouldContain ( new KeyValuePair < string , string > ( "KEY" , "before'after" ) ) ;
117126 }
@@ -120,7 +129,7 @@ public void Parse_EscapedQuoteInMiddle_ShouldUnescape()
120129 public void Parse_BackslashNotEscapingQuote_ShouldRemain ( )
121130 {
122131 var lines = new [ ] { "KEY='before\\ after'" } ;
123- var result = Parser . Parse ( lines , trimValues : false ) . ToArray ( ) ;
132+ var result = Parser . Parse ( lines , trimValues : false , supportExportSyntax : false ) . ToArray ( ) ;
124133 result . Length . ShouldBe ( 1 ) ;
125134 result . ShouldContain ( new KeyValuePair < string , string > ( "KEY" , "before\\ after" ) ) ;
126135 }
0 commit comments