Describe "Invoke-Expression" {

    Context "Should execute the invoked command validly" {

	It "Should return the echoed text" {
	    (Invoke-Expression -command "echo pestertest1") | Should be "pestertest1"
	}

	It "Should return the echoed text for the alias" {
	    (iex -command "echo pestertest2") | Should Be "pestertest2"
	}

	It "Should return the echoed text from a script" {
	    $testfile = Join-Path -Path (Join-Path $PSScriptRoot -ChildPath assets) -ChildPath echoscript.ps1
	    $testcommand = "echo pestertestscript"
	    $testcommand | Add-Content -Path $testfile
	    (Invoke-Expression $testfile) | Should Be "pestertestscript"
	    Remove-Item $testfile
	}

	It "Should return the echoed text from a script from the alias" {
	    $testfile = Join-Path -Path (Join-Path $PSScriptRoot -ChildPath assets) -ChildPath echoscript.ps1
	    $testcommand = "echo pestertestscript"
	    $testcommand | Add-Content -Path $testfile
	    (iex $testfile) | Should Be "pestertestscript"
	    Remove-Item $testfile
	}
    }
}

Describe "Invoke-Expression" {

    Context "Should execute the invoked command validly" {

	It "Should return the echoed text" {
	    (Invoke-Expression -command "echo pestertest1") | Should be "pestertest1"
	}

	It "Should return the echoed text for the alias" {
	    (iex -command "echo pestertest2") | Should Be "pestertest2"
	}

	It "Should return the echoed text from a script" {
	    $testfile = Join-Path -Path (Join-Path $PSScriptRoot -ChildPath assets) -ChildPath echoscript.ps1
	    $testcommand = "echo pestertestscript"
	    $testcommand | Add-Content -Path $testfile
	    (Invoke-Expression $testfile) | Should Be "pestertestscript"
	    Remove-Item $testfile
	}

	It "Should return the echoed text from a script from the alias" {
	    $testfile = Join-Path -Path (Join-Path $PSScriptRoot -ChildPath assets) -ChildPath echoscript.ps1
	    $testcommand = "echo pestertestscript"
	    $testcommand | Add-Content -Path $testfile
	    (iex $testfile) | Should Be "pestertestscript"
	    Remove-Item $testfile
	}
    }
}
Describe "Invoke-Expression DRT Unit Tests" -Tags DRT{
	It "Invoke-Expression should work"{	
		$result=invoke-expression -Command 2+2
		$result|Should Be 4
	}
}
Add Invoke-Expression Pester Unit Test
Add Invoke-Expression Pester Unit Test
