Fix config.py output when a symbol has acquired or lost a value

Normally a valueless symbol remains valueless and a symbol with a
value keeps having one. But just in case a symbol does get changed
from valueless to having a value, make sure there's a space between
the symbol and the value. And if a symbol gets changed from having a
value to valueless, strip trailing whitespace.

Add corresponding tests.

Also fix the case of a valueless symbol added with the set method,
which would have resulted in attempting to use None as a string. This
only happened with the Python API, not with the command line API.
diff --git a/scripts/config.py b/scripts/config.py
index 58be3b2..e01b9d5 100755
--- a/scripts/config.py
+++ b/scripts/config.py
@@ -302,10 +302,22 @@
         where <middle> is "#define <name> ".
         """
         setting = self.settings[name]
+        value = setting.value
+        if value is None:
+            value = ''
+        # Normally the whitespace to separte the symbol name from the
+        # value is part of middle, and there's no whitespace for a symbol
+        # with no value. But if a symbol has been changed from having a
+        # value to not having one, the whitespace is wrong, so fix it.
+        if value:
+            if middle[-1] not in '\t ':
+                middle += ' '
+        else:
+            middle = middle.rstrip()
         return ''.join([indent,
                         '' if setting.active else '//',
                         middle,
-                        setting.value]).rstrip()
+                        value]).rstrip()
 
     def write_to_stream(self, output):
         """Write the whole configuration to output."""
diff --git a/tests/scripts/test_config_script.py b/tests/scripts/test_config_script.py
index a71b357..dd3ecbb 100755
--- a/tests/scripts/test_config_script.py
+++ b/tests/scripts/test_config_script.py
@@ -129,6 +129,7 @@
 TEST_SYMBOLS = [
     'CUSTOM_OPTION',
     'MBEDTLS_AES_C',
+    'MBEDTLS_MPI_MAX_SIZE',
     'MBEDTLS_NO_UDBL_DIVISION',
     'MBEDTLS_PLATFORM_ZEROIZE_ALT',
 ]
@@ -136,6 +137,7 @@
 ### A list of symbols to test with set with a value.
 TEST_SYMBOLS_WITH_VALUE = [
     'CUSTOM_VALUE',
+    'MBEDTLS_AES_C',
     'MBEDTLS_MPI_MAX_SIZE',
 ]
 
@@ -151,6 +153,7 @@
     for symbol in TEST_SYMBOLS_WITH_VALUE:
         run_one(options, ['set', symbol, 'value'])
         run_one(options, ['--force', 'set', symbol, 'value'])
+        run_one(options, ['unset', symbol])
 
 def main():
     """Command line entry point."""