diff --git a/README.md b/README.md index 03a1bc1..ea807ab 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,24 @@ Encode a plain text string into its base64 representation: SGVsbG8gV29ybGQ= ``` +### Convert a File to base64 + +Encode a plain text file into its base64 representation: + +```text +123 +456 +``` + +```powershell +Get-Content file.txt | ConvertTo-Base64 +``` + +**Expected Output:** +```powershell +MTIzCjQ1Ng== +``` + ### Decode a base64 String Convert a base64 encoded string back to its original human-readable format: diff --git a/src/functions/public/ConvertTo-Base64.ps1 b/src/functions/public/ConvertTo-Base64.ps1 index 40dbd13..90ec8c0 100644 --- a/src/functions/public/ConvertTo-Base64.ps1 +++ b/src/functions/public/ConvertTo-Base64.ps1 @@ -36,12 +36,25 @@ ValueFromPipeline, ValueFromPipelineByPropertyName )] - [string] $String, - + [object] $String, # The encoding to use when converting the string to bytes. [Parameter()] [ValidateSet('UTF8', 'UTF7', 'UTF32', 'ASCII', 'Unicode', 'BigEndianUnicode', 'Latin1')] [string] $Encoding = 'UTF8' ) - [Convert]::ToBase64String([System.Text.Encoding]::$Encoding.GetBytes($String)) + + begin { + $lines = @() + } + + process { + $lines += $String + } + + end { + $target = ($lines -Join [Environment]::NewLine) + $bytes = [System.Text.Encoding]::$Encoding.GetBytes($target) + + [System.Convert]::ToBase64String($bytes) + } } diff --git a/tests/Base64.Tests.ps1 b/tests/Base64.Tests.ps1 index 457967d..36a582e 100644 --- a/tests/Base64.Tests.ps1 +++ b/tests/Base64.Tests.ps1 @@ -15,6 +15,22 @@ It "'Hello World' | ConvertTo-Base64 -> SGVsbG8gV29ybGQ=" { 'Hello World' | ConvertTo-Base64 | Should -Be 'SGVsbG8gV29ybGQ=' } + + It "@('123', '456') | ConvertTo-Base64 -> MTIzDQo0NTY=" -Skip:(!$IsWindows) { + @('123', '456') | ConvertTo-Base64 | Should -Be 'MTIzDQo0NTY=' + } + + It "@('123', '456') | ConvertTo-Base64 -> MTIzCjQ1Ng==" -Skip:(!$IsLinux) { + @('123', '456') | ConvertTo-Base64 | Should -Be 'MTIzCjQ1Ng==' + } + + It "Get-Content tests/sample.txt | ConvertTo-Base64 -> Get-Content tests/sample-encoded-windows.txt" -Skip:(!$IsWindows) { + Get-Content tests/sample.txt | ConvertTo-Base64 | Should -Be $(Get-Content tests/sample-encoded-windows.txt) + } + + It "Get-Content tests/sample.txt | ConvertTo-Base64 -> Get-Content tests/sample-encoded-linux.txt" -Skip:(!$IsLinux) { + Get-Content tests/sample.txt | ConvertTo-Base64 | Should -Be $(Get-Content tests/sample-encoded-linux.txt) + } } Context 'Function: ConvertFrom-Base64' { It "ConvertFrom-Base64 -Base64String 'VGhpc0lzQU5pY2VTdHJpbmc=' -> ThisIsANiceString" { diff --git a/tests/sample-encoded-linux.txt b/tests/sample-encoded-linux.txt new file mode 100644 index 0000000..2ac76cf --- /dev/null +++ b/tests/sample-encoded-linux.txt @@ -0,0 +1 @@ +TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVXQgc2VkIHBvcnRhIG5pc2ksIGF0IGx1Y3R1cyB0b3J0b3IuIE1vcmJpIHNhZ2l0dGlzIGVsaXQgZXUgbWFzc2EgdWx0cmljZXMsIHZlbCBsYWNpbmlhIG5lcXVlIGZlcm1lbnR1bS4gUGhhc2VsbHVzIGxvYm9ydGlzIGlhY3VsaXMgZXggdXQgZWxlaWZlbmQuIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBEdWlzIHV0IG1hdHRpcyBkb2xvci4gQ3JhcyBzZWQgdG9ydG9yIGp1c3RvLiBOYW0gc2VkIGdyYXZpZGEgZHVpLCBhIHBvc3VlcmUgZW5pbS4gQWVuZWFuIGZhdWNpYnVzIHBvcnRhIHVsdHJpY2VzLiBJbiBkaWFtIGVyb3MsIG1hbGVzdWFkYSB2ZWwgYWNjdW1zYW4gZXQsIGFjY3Vtc2FuIG5lYyBvcmNpLiBEb25lYyBhdCBlc3QgbmVjIGZlbGlzIGxhb3JlZXQgbWF0dGlzLiBOdW5jIGxhY2luaWEganVzdG8gZXJhdCwgdmVsIG1hbGVzdWFkYSBuZXF1ZSB2b2x1dHBhdCBjb21tb2RvLiBBbGlxdWFtIGxpYmVybyBtYWduYSwgb3JuYXJlIGlkIGF1Z3VlIGEsIHZ1bHB1dGF0ZSBjb25zZXF1YXQgbmliaC4KCk51bGxhIHZhcml1cywgbmVxdWUgdml0YWUgdWx0cmljZXMgdmVzdGlidWx1bSwgc2FwaWVuIG5lcXVlIHNvbGxpY2l0dWRpbiBhbnRlLCBub24gY29uc2VxdWF0IGVuaW0gcXVhbSBxdWlzIG1hc3NhLiBFdGlhbSB2aXRhZSBmZXJtZW50dW0gYW50ZS4gRnVzY2UgdmVsIG1hZ25hIGluIG5pc2kgbW9sZXN0aWUgbGFjaW5pYS4gTWF1cmlzIHB1bHZpbmFyIGRvbG9yIGV0IHNvZGFsZXMgbWFsZXN1YWRhLiBQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gVmVzdGlidWx1bSBjb252YWxsaXMgbG9ib3J0aXMgZW5pbSwgaW4gcGhhcmV0cmEgbmlzbCB0ZW1wdXMgdGVtcG9yLiBGdXNjZSB0aW5jaWR1bnQgbW9sbGlzIGdyYXZpZGEuIFBoYXNlbGx1cyBtYWxlc3VhZGEgdmVsaXQgc2VkIG1hdHRpcyB0cmlzdGlxdWUuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLg== \ No newline at end of file diff --git a/tests/sample-encoded-windows.txt b/tests/sample-encoded-windows.txt new file mode 100644 index 0000000..97941d4 --- /dev/null +++ b/tests/sample-encoded-windows.txt @@ -0,0 +1 @@ +TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVXQgc2VkIHBvcnRhIG5pc2ksIGF0IGx1Y3R1cyB0b3J0b3IuIE1vcmJpIHNhZ2l0dGlzIGVsaXQgZXUgbWFzc2EgdWx0cmljZXMsIHZlbCBsYWNpbmlhIG5lcXVlIGZlcm1lbnR1bS4gUGhhc2VsbHVzIGxvYm9ydGlzIGlhY3VsaXMgZXggdXQgZWxlaWZlbmQuIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBEdWlzIHV0IG1hdHRpcyBkb2xvci4gQ3JhcyBzZWQgdG9ydG9yIGp1c3RvLiBOYW0gc2VkIGdyYXZpZGEgZHVpLCBhIHBvc3VlcmUgZW5pbS4gQWVuZWFuIGZhdWNpYnVzIHBvcnRhIHVsdHJpY2VzLiBJbiBkaWFtIGVyb3MsIG1hbGVzdWFkYSB2ZWwgYWNjdW1zYW4gZXQsIGFjY3Vtc2FuIG5lYyBvcmNpLiBEb25lYyBhdCBlc3QgbmVjIGZlbGlzIGxhb3JlZXQgbWF0dGlzLiBOdW5jIGxhY2luaWEganVzdG8gZXJhdCwgdmVsIG1hbGVzdWFkYSBuZXF1ZSB2b2x1dHBhdCBjb21tb2RvLiBBbGlxdWFtIGxpYmVybyBtYWduYSwgb3JuYXJlIGlkIGF1Z3VlIGEsIHZ1bHB1dGF0ZSBjb25zZXF1YXQgbmliaC4NCg0KTnVsbGEgdmFyaXVzLCBuZXF1ZSB2aXRhZSB1bHRyaWNlcyB2ZXN0aWJ1bHVtLCBzYXBpZW4gbmVxdWUgc29sbGljaXR1ZGluIGFudGUsIG5vbiBjb25zZXF1YXQgZW5pbSBxdWFtIHF1aXMgbWFzc2EuIEV0aWFtIHZpdGFlIGZlcm1lbnR1bSBhbnRlLiBGdXNjZSB2ZWwgbWFnbmEgaW4gbmlzaSBtb2xlc3RpZSBsYWNpbmlhLiBNYXVyaXMgcHVsdmluYXIgZG9sb3IgZXQgc29kYWxlcyBtYWxlc3VhZGEuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVtIGNvbnZhbGxpcyBsb2JvcnRpcyBlbmltLCBpbiBwaGFyZXRyYSBuaXNsIHRlbXB1cyB0ZW1wb3IuIEZ1c2NlIHRpbmNpZHVudCBtb2xsaXMgZ3JhdmlkYS4gUGhhc2VsbHVzIG1hbGVzdWFkYSB2ZWxpdCBzZWQgbWF0dGlzIHRyaXN0aXF1ZS4gUGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBldCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMu \ No newline at end of file diff --git a/tests/sample.txt b/tests/sample.txt new file mode 100644 index 0000000..9b9c9ef --- /dev/null +++ b/tests/sample.txt @@ -0,0 +1,3 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut sed porta nisi, at luctus tortor. Morbi sagittis elit eu massa ultrices, vel lacinia neque fermentum. Phasellus lobortis iaculis ex ut eleifend. In hac habitasse platea dictumst. Duis ut mattis dolor. Cras sed tortor justo. Nam sed gravida dui, a posuere enim. Aenean faucibus porta ultrices. In diam eros, malesuada vel accumsan et, accumsan nec orci. Donec at est nec felis laoreet mattis. Nunc lacinia justo erat, vel malesuada neque volutpat commodo. Aliquam libero magna, ornare id augue a, vulputate consequat nibh. + +Nulla varius, neque vitae ultrices vestibulum, sapien neque sollicitudin ante, non consequat enim quam quis massa. Etiam vitae fermentum ante. Fusce vel magna in nisi molestie lacinia. Mauris pulvinar dolor et sodales malesuada. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum convallis lobortis enim, in pharetra nisl tempus tempor. Fusce tincidunt mollis gravida. Phasellus malesuada velit sed mattis tristique. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. \ No newline at end of file