1: #----------------------------------------------------------------
2: # Dirname.ps1
3: #----------------------------------------------------------------
4: param
5: (
6: [string]$name = $null
7: );
8:
9: $script:SEPARATOR = "\";
10:
11: #----------------------------------------------------------------
12: # function Do-Basename
13: #----------------------------------------------------------------
14: function Do-Basename()
15: {
16: param
17: (
18: [string]$name = $null
19: );
20:
21: $basename = "";
22:
23: if ( $name )
24: {
25: if ( $name.EndsWith($script:SEPARATOR) )
26: {
27: $name = $name.SubString(0, $name.Length -1);
28: }
29: $i = 0;
30: for ($i = $name.Length-1; $i -ge 0; $i--)
31: {
32: if ( $name[$i] -eq $script:SEPARATOR )
33: {
34: break;
35: }
36: }
37: if ( $i -ge 0 )
38: {
39: $basename = $name.SubString($i+1)
40: }
41: else
42: {
43: $basename = $name;
44: }
45: }
46: $basename;
47: }
48:
49: #----------------------------------------------------------------
50: # function Do-BasenameUnitTests
51: #----------------------------------------------------------------
52: function Do-BasenameUnitTests()
53: {
54: $tests = @(
55: @("foo", "foo"),
56: @("foo\", "foo"),
57: @("", ""),
58: @("\foo", "foo"),
59: @("\foo\", "foo"),
60: @("\foo\bar", "bar"),
61: @("\foo\bar\", "bar"),
62: @("c:\foo", "foo"),
63: @("c:\foo\bar", "bar"),
64: @("c:\foo\bar\", "bar"),
65: @("c:\foo\bar\ ", " "),
66: @(".", "."),
67: @("..", ".."),
68: @(".\", "."),
69: @("..\", ".."),
70: @("..\.", "."),
71: @("..\.\foo", "foo")
72: );
73:
74: $success = "PASS";
75:
76: " {0,-15} {1,-15} {2,-15} {3}" -f ("Test", "Expected", "Found", "Pass");
77: foreach ($test in $tests)
78: {
79: $result = Do-Basename $test[0];
80: $status = $result -eq $test[1];
81: "({0,-15} -> {1,-15}) -> {2,-15} : {3}" -f ("""$($test[0])""", """$($test[1])""", """$($result)""", $status);
82: #Write-Host "TEST: (""$($test[0])"" -> ""$($test[1])"") -> ""$result"" : $status";
83: if ( ! $status ) { $success = "FAIL"; }
84: }
85: ""
86: "RESULT: $success";
87: }
88:
89: Do-Basename -name $name;
90: #Do-BasenameUnitTests;