# echo Testing relative key paths ===================================

add_key [HKEY_THIS_MACHINE\test_key\test_key_1]
cd [HKEY_THIS_MACHINE\test_key\test_key_1]
add_key [test_key_2\test_key_3]
cd [test_key_2\test_key_3]
add_key [..\..\test_key_a]
ls  [HKEY_THIS_MACHINE\test_key\test_key_1\test_key_2\test_key_3]
ls  [HKEY_THIS_MACHINE\test_key\test_key_1\test_key_a]
add_value test_key_3-stringvalue1 reg_sz "key3 value1: Hello there"
ls  [HKEY_THIS_MACHINE\test_key\test_key_1\test_key_2\test_key_3]
list_values
cd [..\..]
list_values [test_key_2\test_key_3]
list_keys [test_key_2\test_key_3]
delete_value [test_key_2\test_key_3] test_key_3-stringvalue1
cd [\]
delete_tree [test_key]
ls

#echo test 1================================================
add_key [HKEY_THIS_MACHINE\key1]
cd [HKEY_THIS_MACHINE\key1]
add_value value1     reg_sz     "key1-value1"
add_value value2     reg_sz     "key1-value2"
add_value value3     reg_sz     "key1-value3"
add_value pi_decimal reg_dword  314159
add_value pi_hex     reg_dword  0x314159
add_value pi_binary1  reg_binary 31 41 59 26 53 58 97 93 23 84 62 64 33 83 27 95 02 88 41
add_value pi_binary2  reg_binary 31, 41, 59, 26, 53, 58, 97, 93 23 84 62, 64, 33 83 27, 95 02 88 41
add_value pi_binary3  reg_binary 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421
add_value multi_pi_binary  reg_multi_sz "3" "31" "314" "3141" "31415" "314159" "3141592" "31415926" "..."

add_key [key2]
ls
#
add_key [key2\key3]
add_value [key2] value1 reg_sz "key2-value1"
add_value [key2] value2 reg_sz "key2-value2"
add_value [key2] value3 reg_sz "key2-value3"
ls [key2]
#
add_value [key2\key3] value1 reg_sz "key3-value1"
add_value [key2\key3] value2 reg_sz "key3-value2"
add_value [key2\key3] value3 reg_sz "key3-value3"
ls [key2]
ls [key2\key3]
#
cd [key2\key3]
add_key [key4]
add_value [key4] value1 reg_sz "key4-value1"
add_value [key4] value2 reg_sz "key4-value2"
add_value [key4] value3 reg_sz "key4-value3"
add_value [key4] value4 reg_sz "key4-value4"
ls [key4]
#
cd [key4]
delete_value [..\..\..] value2
ls  [..\..\..]
add_value [..\..\..] value5 reg_sz "key1-value5"
ls [..\..\..]
delete_value [..\..\..] pi_binary2
ls [..\..\..]
#
delete_value [..\..\..\key2] value2
ls [..\..\..\key2]
add_value [..\..\..\key2] value5 reg_sz "key2-value5"
ls [..\..\..\key2]
#quit
#
cd [HKEY_THIS_MACHINE\key1\key2]
pwd
delete_key [key3\key4]
ls [key3]
#
cd [HKEY_THIS_MACHINE\]
delete_key [key1\key2\key3]
ls [key1\key2]
#
cd [\]
delete_tree [key1]
#
# Absolute path tests =====================================
cd [\]
cd [\]
#quit


add_key [HKEY_THIS_MACHINE\key1]
ls [HKEY_THIS_MACHINE\]
#echo test 1================================================

add_key [HKEY_THIS_MACHINE\key1\key2]
ls [HKEY_THIS_MACHINE\key1\]
#echo test 2================================================

add_key [HKEY_THIS_MACHINE\key1\key2\key3]
ls [HKEY_THIS_MACHINE\key1\key2\]
#echo ======================================================

delete_key [HKEY_THIS_MACHINE\key1\key2\key3]
ls [HKEY_THIS_MACHINE\key1\key2]
#echo ======================================================

delete_key [HKEY_THIS_MACHINE\key1\key2]
ls [HKEY_THIS_MACHINE\key1]
#echo ======================================================

delete_key [HKEY_THIS_MACHINE\key1]
ls [HKEY_THIS_MACHINE\]
#echo ======================================================

add_key [HKEY_THIS_MACHINE\key1\key2\key3]
ls [HKEY_THIS_MACHINE\key1\key2]
#echo ======================================================

delete_tree [HKEY_THIS_MACHINE\key1]
ls [HKEY_THIS_MACHINE\]
#echo ======================================================

list_keys [HKEY_THIS_MACHINE\]
#echo ======================================================
list_values [HKEY_THIS_MACHINE\]
#echo ======================================================
ls [HKEY_THIS_MACHINE\]
#echo ======================================================
add_value [HKEY_THIS_MACHINE\] string_value_1 REG_SZ "One: This is a string value: 1"
add_value [HKEY_THIS_MACHINE\] dword_value_1 REG_DWORD 12345678
add_value [HKEY_THIS_MACHINE\] binary_value_1 REG_BINARY 102993847566574839201
add_value [HKEY_THIS_MACHINE\] multisz_value_1 REG_MULTI_SZ "One" "Hello world" "ABCDEFG" "!@#ASDFasdf$1234"
add_value [HKEY_THIS_MACHINE\] an_empty_multisz REG_MULTI_SZ ""
add_value [HKEY_THIS_MACHINE\] one_multi_sz REG_MULTI_SZ "one"
add_value [HKEY_THIS_MACHINE\] two_multi_sz REG_MULTI_SZ "one" "two"
ls [HKEY_THIS_MACHINE\]

#echo ======================================================
set_value [HKEY_THIS_MACHINE\] string_value_1 "ONE: This is a string value: 1"
set_value [HKEY_THIS_MACHINE\] dword_value_1 11115678
set_value [HKEY_THIS_MACHINE\] binary_value_1 111102993847566574839201
set_value [HKEY_THIS_MACHINE\] multisz_value_1 "ONE" "HELLO world" "abcdefg1111" "4321!@#ASDFasdf$1234"
set_value [HKEY_THIS_MACHINE\] an_empty_multisz "Not empty" "any more"
set_value [HKEY_THIS_MACHINE\] two_multi_sz "Two" "One"
ls [HKEY_THIS_MACHINE\]

delete_value [HKEY_THIS_MACHINE\] string_value_1
delete_value [HKEY_THIS_MACHINE\] dword_value_1
delete_value [HKEY_THIS_MACHINE\] binary_value_1
delete_value [HKEY_THIS_MACHINE\] multisz_value_1
delete_value [HKEY_THIS_MACHINE\] an_empty_multisz
delete_value [HKEY_THIS_MACHINE\] one_multi_sz
delete_value [HKEY_THIS_MACHINE\] two_multi_sz
ls [HKEY_THIS_MACHINE\]
#echo ======================================================

# Add values at one subkey level
#
add_key [HKEY_THIS_MACHINE\test_keys_2]
ls [HKEY_THIS_MACHINE\]
#echo ======================================================
add_value [HKEY_THIS_MACHINE\test_keys_2] string_value_2 REG_SZ "Two: This is a string value: 1"
add_value [HKEY_THIS_MACHINE\test_keys_2] dword_value_2 REG_DWORD 23456782
add_value [HKEY_THIS_MACHINE\test_keys_2] binary_value_2 REG_BINARY 202993847566574839201
add_value [HKEY_THIS_MACHINE\test_keys_2] multisz_value_2 REG_MULTI_SZ "Two" "Hello world" "ABCDEFG" "!@#ASDFasdf$1234"
add_value [HKEY_THIS_MACHINE\test_keys_2] an_empty_multisz REG_MULTI_SZ ""
add_value [HKEY_THIS_MACHINE\test_keys_2] one_multi_sz REG_MULTI_SZ "test_keys_2" "one"
add_value [HKEY_THIS_MACHINE\test_keys_2] two_multi_sz REG_MULTI_SZ "test_keys_2" "one" "two"
add_value [HKEY_THIS_MACHINE\test_keys_2] delete_str_2 REG_SZ "Delete me 2!!!"
ls [HKEY_THIS_MACHINE\test_keys_2]
#echo ======================================================

set_value [HKEY_THIS_MACHINE\test_keys_2] string_value_2 "TWO: tHIS is a string value: 1"
set_value [HKEY_THIS_MACHINE\test_keys_2] dword_value_2 22226782
set_value [HKEY_THIS_MACHINE\test_keys_2] binary_value_2 22222029938475665748392012222
set_value [HKEY_THIS_MACHINE\test_keys_2] multisz_value_2 "test_keys_2" "TWO" "22 Hello world" " 22 ABCDEFG" "  22  !@#ASDFasdf$1234"
set_value [HKEY_THIS_MACHINE\test_keys_2] an_empty_multisz "test_keys_2" "Not empty" "any more"
set_value [HKEY_THIS_MACHINE\test_keys_2] two_multi_sz "test_keys_2" "Two" "One"
delete_value [HKEY_THIS_MACHINE\test_keys_2] delete_str_2
delete_value [HKEY_THIS_MACHINE\test_keys_2] two_multi_sz
ls [HKEY_THIS_MACHINE\test_keys_2]
#echo ======================================================

# Add values at a secondary subkey level
#
add_key [HKEY_THIS_MACHINE\test_keys_2\test_keys_3]
add_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] string_value_3 REG_SZ "Three: This is a string value: 1"
add_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] dword_value_3 REG_DWORD 34567890
add_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] binary_value_3 REG_BINARY 302993847566574839201
add_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] multisz_value_3 REG_MULTI_SZ "Three" "Hello world" "ABCDEFG" "!@#ASDFasdf$1234"
add_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] delete_str_3 REG_SZ "Delete me 3!!!"
ls [HKEY_THIS_MACHINE\test_keys_2\test_keys_3]
#echo ======================================================

set_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] string_value_3 "333 Three: This is a string value: 1"
set_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] dword_value_3 33337890
set_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] binary_value_3 333302993847566574839201333
set_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] multisz_value_3 "33 Three" "33 Hello world" "ABCDEFG33 " "3333!@#ASDFasdf$12343333"
delete_value [HKEY_THIS_MACHINE\test_keys_2\test_keys_3] delete_str_3
ls [HKEY_THIS_MACHINE\test_keys_2\test_keys_3]
#echo ======================================================

# Cleanup the testing mess...
#
delete_tree [HKEY_THIS_MACHINE\test_keys_2]

# echo Testing whitespace between arguments keys============
add_key     [HKEY_THIS_MACHINE\key1]
add_key     [HKEY_THIS_MACHINE\key1  ]
ls     [HKEY_THIS_MACHINE\]
delete_key     [HKEY_THIS_MACHINE\key1]
delete_key     [HKEY_THIS_MACHINE\key1  ]
ls     [HKEY_THIS_MACHINE\]

# echo Testing whitespace between arguments values============
add_value   [HKEY_THIS_MACHINE\]   string_value_1    REG_SZ     "     S P A C E S ! ! !    "
add_value   [HKEY_THIS_MACHINE\]   binary_value_1    REG_BINARY     10,  20,  30,  40,  50,  60,  70,  FF, EE,  D, C, A, AB, ABC, ABCD, ABCDE
add_value   [HKEY_THIS_MACHINE\]   dword_value_1    REG_DWORD     1234
add_value   [HKEY_THIS_MACHINE\]   multi_value_1    REG_MULTI_SZ     "  1  "  "  A   "  " S P A C E S "
ls     [HKEY_THIS_MACHINE\]

delete_value   [HKEY_THIS_MACHINE\]   string_value_1
delete_value   [HKEY_THIS_MACHINE\]   binary_value_1
delete_value   [HKEY_THIS_MACHINE\]   dword_value_1
delete_value   [HKEY_THIS_MACHINE\]   multi_value_1
ls     [HKEY_THIS_MACHINE\]

# echo Testing whitespace between arguments values under a key============
add_key   [HKEY_THIS_MACHINE\key1  ]
add_value   [HKEY_THIS_MACHINE\key1  ]   string_value_key1    REG_SZ     "     1 1 1 S P A C E S ! ! !    "
add_value   [HKEY_THIS_MACHINE\key1  ]   binary_value_key1    REG_BINARY     11,11,11, 10,  20,  30,  40,  50,  60,  70,  FF, EE,  D, C, A, AB, ABC, ABCD, ABCDE
add_value   [HKEY_THIS_MACHINE\key1  ]   dword_value_key1    REG_DWORD     111234
add_value   [HKEY_THIS_MACHINE\key1  ]   multi_value_key1    REG_MULTI_SZ     "11" "  1  "  "  A   "  " S P A C E S "
ls     [HKEY_THIS_MACHINE\key1  ]

add_key   [HKEY_THIS_MACHINE\key1  \key2]
add_value   [HKEY_THIS_MACHINE\key1  \key2]   string_value_key2    REG_SZ     "     2 2 2  S P A C E S ! ! !    "
add_value   [HKEY_THIS_MACHINE\key1  \key2]   binary_value_key2    REG_BINARY     22,22,  22,   22,  10,  20,  30,  40,  50,  60,  70,  FF, EE,  D, C, A, AB, ABC, ABCD, ABCDE
add_value   [HKEY_THIS_MACHINE\key1  \key2]   dword_value_key2    REG_DWORD     1234
add_value   [HKEY_THIS_MACHINE\key1  \key2]   multi_value_key2    REG_MULTI_SZ     "22" "  1  "  "  A   "  " S P A C E S "
ls     [HKEY_THIS_MACHINE\key1  \key2]

# ======= This delete key should fail...
delete_key     [HKEY_THIS_MACHINE\key1  ]

# ======= This delete key will work...
delete_key     [HKEY_THIS_MACHINE\key1  \key2]
delete_key     [HKEY_THIS_MACHINE\key1  ]
ls     [HKEY_THIS_MACHINE\]

# echo Testing whitespace in value names==================================
add_value "  I am a value name  " reg_sz "I am the value"
ls [HKEY_THIS_MACHINE\]
delete_value [HKEY_THIS_MACHINE\] "  I am a value name  "
add_key [HKEY_THIS_MACHINE\  key1  ]
add_value [HKEY_THIS_MACHINE\  key1  ] "  string1 key1  "  reg_sz        "I am a string"
add_value [HKEY_THIS_MACHINE\  key1  ] "  dword1 key1  "  reg_dword      1234
add_value [HKEY_THIS_MACHINE\  key1  ] "  dword2 key1  "  reg_dword      0x1234
add_value [HKEY_THIS_MACHINE\  key1  ] "  dword3 key1  "  reg_dword      0x1234abcd
add_value [HKEY_THIS_MACHINE\  key1  ] "  binary1 key1  "  reg_binary    12 34 1 2 3 4 1234
add_value [HKEY_THIS_MACHINE\  key1  ] "  multi1 key1  "  reg_multi_sz   "  abcd"  "efg  " "hijk"  "  lmnop  " "q r s" "  T U V" "W & X" "Y + Z" "Now you know your ABCs..."  "Won't you sing along with me?"
list_values [HKEY_THIS_MACHINE\  key1  ]
delete_tree [HKEY_THIS_MACHINE\  key1  ]
ls [HKEY_THIS_MACHINE\]

# echo Testing whitespace in value names
add_key   [HKEY_THIS_MACHINE\  key1  \    \  k  e  y  2  ]
add_value [HKEY_THIS_MACHINE\  key1  \    \  k  e  y  2  ]    "  string1 key2  "  reg_sz        "22 I am a string"
add_value [HKEY_THIS_MACHINE\  key1  \    \  k  e  y  2  ]    "  dword1 key2  "  reg_dword      221234

add_value [HKEY_THIS_MACHINE\  key1  \    \  k  e  y  2  ]    "  binary1 key2  "  reg_binary    22 22 22, 22, 12 34 1 2 3 4 1234
add_value [HKEY_THIS_MACHINE\  key1  \    \  k  e  y  2  ]    "  multi1 key2  "  reg_multi_sz   "The          " " Quick       " "  Brown      " "   Fox       "  "    Jumped   "   "     Over    " "      The    "  "       Lazy  "    "        Dog's" "         Back"
list_values [HKEY_THIS_MACHINE\  key1  \    \  k  e  y  2  ]
delete_key [HKEY_THIS_MACHINE\  key1  \    \  k  e  y  2  ]
ls [HKEY_THIS_MACHINE\  key1  ]
delete_tree [HKEY_THIS_MACHINE\  key1  ]
ls [HKEY_THIS_MACHINE\]

# echo Testing list_keys===========================================
list_keys [HKEY_THIS_MACHINE\]
list_keys [HKEY_THIS_MACHINE\Services]
list_keys [HKEY_THIS_MACHINE\Services\lsass]
add_key [HKEY_THIS_MACHINE\test_key]
add_key [HKEY_THIS_MACHINE\test_key_1]
add_key [HKEY_THIS_MACHINE\test_key 1]
add_key [HKEY_THIS_MACHINE\test key 1]
add_key [HKEY_THIS_MACHINE\test key 22]
add_key [HKEY_THIS_MACHINE\test key 333]
add_key [HKEY_THIS_MACHINE\test key 4444]
add_key [HKEY_THIS_MACHINE\test key 55555]
add_key [HKEY_THIS_MACHINE\test_key\test_key_1]
add_key [HKEY_THIS_MACHINE\test_key\test_key 1]
add_key [HKEY_THIS_MACHINE\test_key\test key 1]
add_key [HKEY_THIS_MACHINE\test_key\test key 22]
add_key [HKEY_THIS_MACHINE\test_key\test key 333]
add_key [HKEY_THIS_MACHINE\test_key\test key 4444]
add_key [HKEY_THIS_MACHINE\test_key\test key 55555]
#
list_keys [HKEY_THIS_MACHINE\]
#
list_keys [HKEY_THIS_MACHINE\test_key]
#
delete_tree [HKEY_THIS_MACHINE\test_key]
list_keys [HKEY_THIS_MACHINE\]
#
delete_key [HKEY_THIS_MACHINE\test_key_1]
delete_key [HKEY_THIS_MACHINE\test_key 1]
delete_key [HKEY_THIS_MACHINE\test key 1]
delete_key [HKEY_THIS_MACHINE\test key 22]
delete_tree [HKEY_THIS_MACHINE\test key 333]
delete_tree [HKEY_THIS_MACHINE\test key 4444]
delete_tree [HKEY_THIS_MACHINE\test key 55555]
list_keys [HKEY_THIS_MACHINE\]

# echo Testing list_values===========================================
list_values [HKEY_THIS_MACHINE\]
list_values [HKEY_THIS_MACHINE\Services]
list_values [HKEY_THIS_MACHINE\Services\lsass]
ls [HKEY_THIS_MACHINE\Services\lsass\Parameters\Providers\ActiveDirectory]


