Home | History | Annotate | Download | only in gyp
      1 #!/usr/bin/env python
      2 
      3 # Copyright (c) 2012 Google Inc. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 """Unit tests for the MSVSSettings.py file."""
      8 
      9 import StringIO
     10 import unittest
     11 import gyp.MSVSSettings as MSVSSettings
     12 
     13 
     14 class TestSequenceFunctions(unittest.TestCase):
     15 
     16   def setUp(self):
     17     self.stderr = StringIO.StringIO()
     18 
     19   def _ExpectedWarnings(self, expected):
     20     """Compares recorded lines to expected warnings."""
     21     self.stderr.seek(0)
     22     actual = self.stderr.read().split('\n')
     23     actual = [line for line in actual if line]
     24     self.assertEqual(sorted(expected), sorted(actual))
     25 
     26   def testValidateMSVSSettings_tool_names(self):
     27     """Tests that only MSVS tool names are allowed."""
     28     MSVSSettings.ValidateMSVSSettings(
     29         {'VCCLCompilerTool': {},
     30          'VCLinkerTool': {},
     31          'VCMIDLTool': {},
     32          'foo': {},
     33          'VCResourceCompilerTool': {},
     34          'VCLibrarianTool': {},
     35          'VCManifestTool': {},
     36          'ClCompile': {}},
     37         self.stderr)
     38     self._ExpectedWarnings([
     39         'Warning: unrecognized tool foo',
     40         'Warning: unrecognized tool ClCompile'])
     41 
     42   def testValidateMSVSSettings_settings(self):
     43     """Tests that for invalid MSVS settings."""
     44     MSVSSettings.ValidateMSVSSettings(
     45         {'VCCLCompilerTool': {
     46             'AdditionalIncludeDirectories': 'folder1;folder2',
     47             'AdditionalOptions': ['string1', 'string2'],
     48             'AdditionalUsingDirectories': 'folder1;folder2',
     49             'AssemblerListingLocation': 'a_file_name',
     50             'AssemblerOutput': '0',
     51             'BasicRuntimeChecks': '5',
     52             'BrowseInformation': 'fdkslj',
     53             'BrowseInformationFile': 'a_file_name',
     54             'BufferSecurityCheck': 'true',
     55             'CallingConvention': '-1',
     56             'CompileAs': '1',
     57             'DebugInformationFormat': '2',
     58             'DefaultCharIsUnsigned': 'true',
     59             'Detect64BitPortabilityProblems': 'true',
     60             'DisableLanguageExtensions': 'true',
     61             'DisableSpecificWarnings': 'string1;string2',
     62             'EnableEnhancedInstructionSet': '1',
     63             'EnableFiberSafeOptimizations': 'true',
     64             'EnableFunctionLevelLinking': 'true',
     65             'EnableIntrinsicFunctions': 'true',
     66             'EnablePREfast': 'true',
     67             'Enableprefast': 'bogus',
     68             'ErrorReporting': '1',
     69             'ExceptionHandling': '1',
     70             'ExpandAttributedSource': 'true',
     71             'FavorSizeOrSpeed': '1',
     72             'FloatingPointExceptions': 'true',
     73             'FloatingPointModel': '1',
     74             'ForceConformanceInForLoopScope': 'true',
     75             'ForcedIncludeFiles': 'file1;file2',
     76             'ForcedUsingFiles': 'file1;file2',
     77             'GeneratePreprocessedFile': '1',
     78             'GenerateXMLDocumentationFiles': 'true',
     79             'IgnoreStandardIncludePath': 'true',
     80             'InlineFunctionExpansion': '1',
     81             'KeepComments': 'true',
     82             'MinimalRebuild': 'true',
     83             'ObjectFile': 'a_file_name',
     84             'OmitDefaultLibName': 'true',
     85             'OmitFramePointers': 'true',
     86             'OpenMP': 'true',
     87             'Optimization': '1',
     88             'PrecompiledHeaderFile': 'a_file_name',
     89             'PrecompiledHeaderThrough': 'a_file_name',
     90             'PreprocessorDefinitions': 'string1;string2',
     91             'ProgramDataBaseFileName': 'a_file_name',
     92             'RuntimeLibrary': '1',
     93             'RuntimeTypeInfo': 'true',
     94             'ShowIncludes': 'true',
     95             'SmallerTypeCheck': 'true',
     96             'StringPooling': 'true',
     97             'StructMemberAlignment': '1',
     98             'SuppressStartupBanner': 'true',
     99             'TreatWChar_tAsBuiltInType': 'true',
    100             'UndefineAllPreprocessorDefinitions': 'true',
    101             'UndefinePreprocessorDefinitions': 'string1;string2',
    102             'UseFullPaths': 'true',
    103             'UsePrecompiledHeader': '1',
    104             'UseUnicodeResponseFiles': 'true',
    105             'WarnAsError': 'true',
    106             'WarningLevel': '1',
    107             'WholeProgramOptimization': 'true',
    108             'XMLDocumentationFileName': 'a_file_name',
    109             'ZZXYZ': 'bogus'},
    110          'VCLinkerTool': {
    111              'AdditionalDependencies': 'file1;file2',
    112              'AdditionalLibraryDirectories': 'folder1;folder2',
    113              'AdditionalManifestDependencies': 'file1;file2',
    114              'AdditionalOptions': 'a string1',
    115              'AddModuleNamesToAssembly': 'file1;file2',
    116              'AllowIsolation': 'true',
    117              'AssemblyDebug': '2',
    118              'AssemblyLinkResource': 'file1;file2',
    119              'BaseAddress': 'a string1',
    120              'CLRImageType': '2',
    121              'CLRThreadAttribute': '2',
    122              'CLRUnmanagedCodeCheck': 'true',
    123              'DataExecutionPrevention': '2',
    124              'DelayLoadDLLs': 'file1;file2',
    125              'DelaySign': 'true',
    126              'Driver': '2',
    127              'EmbedManagedResourceFile': 'file1;file2',
    128              'EnableCOMDATFolding': '2',
    129              'EnableUAC': 'true',
    130              'EntryPointSymbol': 'a string1',
    131              'ErrorReporting': '2',
    132              'FixedBaseAddress': '2',
    133              'ForceSymbolReferences': 'file1;file2',
    134              'FunctionOrder': 'a_file_name',
    135              'GenerateDebugInformation': 'true',
    136              'GenerateManifest': 'true',
    137              'GenerateMapFile': 'true',
    138              'HeapCommitSize': 'a string1',
    139              'HeapReserveSize': 'a string1',
    140              'IgnoreAllDefaultLibraries': 'true',
    141              'IgnoreDefaultLibraryNames': 'file1;file2',
    142              'IgnoreEmbeddedIDL': 'true',
    143              'IgnoreImportLibrary': 'true',
    144              'ImportLibrary': 'a_file_name',
    145              'KeyContainer': 'a_file_name',
    146              'KeyFile': 'a_file_name',
    147              'LargeAddressAware': '2',
    148              'LinkIncremental': '2',
    149              'LinkLibraryDependencies': 'true',
    150              'LinkTimeCodeGeneration': '2',
    151              'ManifestFile': 'a_file_name',
    152              'MapExports': 'true',
    153              'MapFileName': 'a_file_name',
    154              'MergedIDLBaseFileName': 'a_file_name',
    155              'MergeSections': 'a string1',
    156              'MidlCommandFile': 'a_file_name',
    157              'ModuleDefinitionFile': 'a_file_name',
    158              'OptimizeForWindows98': '1',
    159              'OptimizeReferences': '2',
    160              'OutputFile': 'a_file_name',
    161              'PerUserRedirection': 'true',
    162              'Profile': 'true',
    163              'ProfileGuidedDatabase': 'a_file_name',
    164              'ProgramDatabaseFile': 'a_file_name',
    165              'RandomizedBaseAddress': '2',
    166              'RegisterOutput': 'true',
    167              'ResourceOnlyDLL': 'true',
    168              'SetChecksum': 'true',
    169              'ShowProgress': '2',
    170              'StackCommitSize': 'a string1',
    171              'StackReserveSize': 'a string1',
    172              'StripPrivateSymbols': 'a_file_name',
    173              'SubSystem': '2',
    174              'SupportUnloadOfDelayLoadedDLL': 'true',
    175              'SuppressStartupBanner': 'true',
    176              'SwapRunFromCD': 'true',
    177              'SwapRunFromNet': 'true',
    178              'TargetMachine': '2',
    179              'TerminalServerAware': '2',
    180              'TurnOffAssemblyGeneration': 'true',
    181              'TypeLibraryFile': 'a_file_name',
    182              'TypeLibraryResourceID': '33',
    183              'UACExecutionLevel': '2',
    184              'UACUIAccess': 'true',
    185              'UseLibraryDependencyInputs': 'true',
    186              'UseUnicodeResponseFiles': 'true',
    187              'Version': 'a string1'},
    188          'VCMIDLTool': {
    189              'AdditionalIncludeDirectories': 'folder1;folder2',
    190              'AdditionalOptions': 'a string1',
    191              'CPreprocessOptions': 'a string1',
    192              'DefaultCharType': '1',
    193              'DLLDataFileName': 'a_file_name',
    194              'EnableErrorChecks': '1',
    195              'ErrorCheckAllocations': 'true',
    196              'ErrorCheckBounds': 'true',
    197              'ErrorCheckEnumRange': 'true',
    198              'ErrorCheckRefPointers': 'true',
    199              'ErrorCheckStubData': 'true',
    200              'GenerateStublessProxies': 'true',
    201              'GenerateTypeLibrary': 'true',
    202              'HeaderFileName': 'a_file_name',
    203              'IgnoreStandardIncludePath': 'true',
    204              'InterfaceIdentifierFileName': 'a_file_name',
    205              'MkTypLibCompatible': 'true',
    206              'notgood': 'bogus',
    207              'OutputDirectory': 'a string1',
    208              'PreprocessorDefinitions': 'string1;string2',
    209              'ProxyFileName': 'a_file_name',
    210              'RedirectOutputAndErrors': 'a_file_name',
    211              'StructMemberAlignment': '1',
    212              'SuppressStartupBanner': 'true',
    213              'TargetEnvironment': '1',
    214              'TypeLibraryName': 'a_file_name',
    215              'UndefinePreprocessorDefinitions': 'string1;string2',
    216              'ValidateParameters': 'true',
    217              'WarnAsError': 'true',
    218              'WarningLevel': '1'},
    219          'VCResourceCompilerTool': {
    220              'AdditionalOptions': 'a string1',
    221              'AdditionalIncludeDirectories': 'folder1;folder2',
    222              'Culture': '1003',
    223              'IgnoreStandardIncludePath': 'true',
    224              'notgood2': 'bogus',
    225              'PreprocessorDefinitions': 'string1;string2',
    226              'ResourceOutputFileName': 'a string1',
    227              'ShowProgress': 'true',
    228              'SuppressStartupBanner': 'true',
    229              'UndefinePreprocessorDefinitions': 'string1;string2'},
    230          'VCLibrarianTool': {
    231              'AdditionalDependencies': 'file1;file2',
    232              'AdditionalLibraryDirectories': 'folder1;folder2',
    233              'AdditionalOptions': 'a string1',
    234              'ExportNamedFunctions': 'string1;string2',
    235              'ForceSymbolReferences': 'a string1',
    236              'IgnoreAllDefaultLibraries': 'true',
    237              'IgnoreSpecificDefaultLibraries': 'file1;file2',
    238              'LinkLibraryDependencies': 'true',
    239              'ModuleDefinitionFile': 'a_file_name',
    240              'OutputFile': 'a_file_name',
    241              'SuppressStartupBanner': 'true',
    242              'UseUnicodeResponseFiles': 'true'},
    243          'VCManifestTool': {
    244              'AdditionalManifestFiles': 'file1;file2',
    245              'AdditionalOptions': 'a string1',
    246              'AssemblyIdentity': 'a string1',
    247              'ComponentFileName': 'a_file_name',
    248              'DependencyInformationFile': 'a_file_name',
    249              'GenerateCatalogFiles': 'true',
    250              'InputResourceManifests': 'a string1',
    251              'ManifestResourceFile': 'a_file_name',
    252              'OutputManifestFile': 'a_file_name',
    253              'RegistrarScriptFile': 'a_file_name',
    254              'ReplacementsFile': 'a_file_name',
    255              'SuppressStartupBanner': 'true',
    256              'TypeLibraryFile': 'a_file_name',
    257              'UpdateFileHashes': 'truel',
    258              'UpdateFileHashesSearchPath': 'a_file_name',
    259              'UseFAT32Workaround': 'true',
    260              'UseUnicodeResponseFiles': 'true',
    261              'VerboseOutput': 'true'}},
    262         self.stderr)
    263     self._ExpectedWarnings([
    264         'Warning: for VCCLCompilerTool/BasicRuntimeChecks, '
    265         'index value (5) not in expected range [0, 4)',
    266         'Warning: for VCCLCompilerTool/BrowseInformation, '
    267         "invalid literal for int() with base 10: 'fdkslj'",
    268         'Warning: for VCCLCompilerTool/CallingConvention, '
    269         'index value (-1) not in expected range [0, 3)',
    270         'Warning: for VCCLCompilerTool/DebugInformationFormat, '
    271         'converted value for 2 not specified.',
    272         'Warning: unrecognized setting VCCLCompilerTool/Enableprefast',
    273         'Warning: unrecognized setting VCCLCompilerTool/ZZXYZ',
    274         'Warning: for VCLinkerTool/TargetMachine, '
    275         'converted value for 2 not specified.',
    276         'Warning: unrecognized setting VCMIDLTool/notgood',
    277         'Warning: unrecognized setting VCResourceCompilerTool/notgood2',
    278         'Warning: for VCManifestTool/UpdateFileHashes, '
    279         "expected bool; got 'truel'"
    280         ''])
    281 
    282   def testValidateMSBuildSettings_settings(self):
    283     """Tests that for invalid MSBuild settings."""
    284     MSVSSettings.ValidateMSBuildSettings(
    285         {'ClCompile': {
    286             'AdditionalIncludeDirectories': 'folder1;folder2',
    287             'AdditionalOptions': ['string1', 'string2'],
    288             'AdditionalUsingDirectories': 'folder1;folder2',
    289             'AssemblerListingLocation': 'a_file_name',
    290             'AssemblerOutput': 'NoListing',
    291             'BasicRuntimeChecks': 'StackFrameRuntimeCheck',
    292             'BrowseInformation': 'false',
    293             'BrowseInformationFile': 'a_file_name',
    294             'BufferSecurityCheck': 'true',
    295             'BuildingInIDE': 'true',
    296             'CallingConvention': 'Cdecl',
    297             'CompileAs': 'CompileAsC',
    298             'CompileAsManaged': 'Pure',
    299             'CreateHotpatchableImage': 'true',
    300             'DebugInformationFormat': 'ProgramDatabase',
    301             'DisableLanguageExtensions': 'true',
    302             'DisableSpecificWarnings': 'string1;string2',
    303             'EnableEnhancedInstructionSet': 'StreamingSIMDExtensions',
    304             'EnableFiberSafeOptimizations': 'true',
    305             'EnablePREfast': 'true',
    306             'Enableprefast': 'bogus',
    307             'ErrorReporting': 'Prompt',
    308             'ExceptionHandling': 'SyncCThrow',
    309             'ExpandAttributedSource': 'true',
    310             'FavorSizeOrSpeed': 'Neither',
    311             'FloatingPointExceptions': 'true',
    312             'FloatingPointModel': 'Precise',
    313             'ForceConformanceInForLoopScope': 'true',
    314             'ForcedIncludeFiles': 'file1;file2',
    315             'ForcedUsingFiles': 'file1;file2',
    316             'FunctionLevelLinking': 'false',
    317             'GenerateXMLDocumentationFiles': 'true',
    318             'IgnoreStandardIncludePath': 'true',
    319             'InlineFunctionExpansion': 'OnlyExplicitInline',
    320             'IntrinsicFunctions': 'false',
    321             'MinimalRebuild': 'true',
    322             'MultiProcessorCompilation': 'true',
    323             'ObjectFileName': 'a_file_name',
    324             'OmitDefaultLibName': 'true',
    325             'OmitFramePointers': 'true',
    326             'OpenMPSupport': 'true',
    327             'Optimization': 'Disabled',
    328             'PrecompiledHeader': 'NotUsing',
    329             'PrecompiledHeaderFile': 'a_file_name',
    330             'PrecompiledHeaderOutputFile': 'a_file_name',
    331             'PreprocessKeepComments': 'true',
    332             'PreprocessorDefinitions': 'string1;string2',
    333             'PreprocessOutputPath': 'a string1',
    334             'PreprocessSuppressLineNumbers': 'false',
    335             'PreprocessToFile': 'false',
    336             'ProcessorNumber': '33',
    337             'ProgramDataBaseFileName': 'a_file_name',
    338             'RuntimeLibrary': 'MultiThreaded',
    339             'RuntimeTypeInfo': 'true',
    340             'ShowIncludes': 'true',
    341             'SmallerTypeCheck': 'true',
    342             'StringPooling': 'true',
    343             'StructMemberAlignment': '1Byte',
    344             'SuppressStartupBanner': 'true',
    345             'TrackerLogDirectory': 'a_folder',
    346             'TreatSpecificWarningsAsErrors': 'string1;string2',
    347             'TreatWarningAsError': 'true',
    348             'TreatWChar_tAsBuiltInType': 'true',
    349             'UndefineAllPreprocessorDefinitions': 'true',
    350             'UndefinePreprocessorDefinitions': 'string1;string2',
    351             'UseFullPaths': 'true',
    352             'UseUnicodeForAssemblerListing': 'true',
    353             'WarningLevel': 'TurnOffAllWarnings',
    354             'WholeProgramOptimization': 'true',
    355             'XMLDocumentationFileName': 'a_file_name',
    356             'ZZXYZ': 'bogus'},
    357          'Link': {
    358              'AdditionalDependencies': 'file1;file2',
    359              'AdditionalLibraryDirectories': 'folder1;folder2',
    360              'AdditionalManifestDependencies': 'file1;file2',
    361              'AdditionalOptions': 'a string1',
    362              'AddModuleNamesToAssembly': 'file1;file2',
    363              'AllowIsolation': 'true',
    364              'AssemblyDebug': '',
    365              'AssemblyLinkResource': 'file1;file2',
    366              'BaseAddress': 'a string1',
    367              'BuildingInIDE': 'true',
    368              'CLRImageType': 'ForceIJWImage',
    369              'CLRSupportLastError': 'Enabled',
    370              'CLRThreadAttribute': 'MTAThreadingAttribute',
    371              'CLRUnmanagedCodeCheck': 'true',
    372              'CreateHotPatchableImage': 'X86Image',
    373              'DataExecutionPrevention': 'false',
    374              'DelayLoadDLLs': 'file1;file2',
    375              'DelaySign': 'true',
    376              'Driver': 'NotSet',
    377              'EmbedManagedResourceFile': 'file1;file2',
    378              'EnableCOMDATFolding': 'false',
    379              'EnableUAC': 'true',
    380              'EntryPointSymbol': 'a string1',
    381              'FixedBaseAddress': 'false',
    382              'ForceFileOutput': 'Enabled',
    383              'ForceSymbolReferences': 'file1;file2',
    384              'FunctionOrder': 'a_file_name',
    385              'GenerateDebugInformation': 'true',
    386              'GenerateMapFile': 'true',
    387              'HeapCommitSize': 'a string1',
    388              'HeapReserveSize': 'a string1',
    389              'IgnoreAllDefaultLibraries': 'true',
    390              'IgnoreEmbeddedIDL': 'true',
    391              'IgnoreSpecificDefaultLibraries': 'a_file_list',
    392              'ImageHasSafeExceptionHandlers': 'true',
    393              'ImportLibrary': 'a_file_name',
    394              'KeyContainer': 'a_file_name',
    395              'KeyFile': 'a_file_name',
    396              'LargeAddressAware': 'false',
    397              'LinkDLL': 'true',
    398              'LinkErrorReporting': 'SendErrorReport',
    399              'LinkStatus': 'true',
    400              'LinkTimeCodeGeneration': 'UseLinkTimeCodeGeneration',
    401              'ManifestFile': 'a_file_name',
    402              'MapExports': 'true',
    403              'MapFileName': 'a_file_name',
    404              'MergedIDLBaseFileName': 'a_file_name',
    405              'MergeSections': 'a string1',
    406              'MidlCommandFile': 'a_file_name',
    407              'MinimumRequiredVersion': 'a string1',
    408              'ModuleDefinitionFile': 'a_file_name',
    409              'MSDOSStubFileName': 'a_file_name',
    410              'NoEntryPoint': 'true',
    411              'OptimizeReferences': 'false',
    412              'OutputFile': 'a_file_name',
    413              'PerUserRedirection': 'true',
    414              'PreventDllBinding': 'true',
    415              'Profile': 'true',
    416              'ProfileGuidedDatabase': 'a_file_name',
    417              'ProgramDatabaseFile': 'a_file_name',
    418              'RandomizedBaseAddress': 'false',
    419              'RegisterOutput': 'true',
    420              'SectionAlignment': '33',
    421              'SetChecksum': 'true',
    422              'ShowProgress': 'LinkVerboseREF',
    423              'SpecifySectionAttributes': 'a string1',
    424              'StackCommitSize': 'a string1',
    425              'StackReserveSize': 'a string1',
    426              'StripPrivateSymbols': 'a_file_name',
    427              'SubSystem': 'Console',
    428              'SupportNobindOfDelayLoadedDLL': 'true',
    429              'SupportUnloadOfDelayLoadedDLL': 'true',
    430              'SuppressStartupBanner': 'true',
    431              'SwapRunFromCD': 'true',
    432              'SwapRunFromNET': 'true',
    433              'TargetMachine': 'MachineX86',
    434              'TerminalServerAware': 'false',
    435              'TrackerLogDirectory': 'a_folder',
    436              'TreatLinkerWarningAsErrors': 'true',
    437              'TurnOffAssemblyGeneration': 'true',
    438              'TypeLibraryFile': 'a_file_name',
    439              'TypeLibraryResourceID': '33',
    440              'UACExecutionLevel': 'AsInvoker',
    441              'UACUIAccess': 'true',
    442              'Version': 'a string1'},
    443          'ResourceCompile': {
    444              'AdditionalIncludeDirectories': 'folder1;folder2',
    445              'AdditionalOptions': 'a string1',
    446              'Culture': '0x236',
    447              'IgnoreStandardIncludePath': 'true',
    448              'NullTerminateStrings': 'true',
    449              'PreprocessorDefinitions': 'string1;string2',
    450              'ResourceOutputFileName': 'a string1',
    451              'ShowProgress': 'true',
    452              'SuppressStartupBanner': 'true',
    453              'TrackerLogDirectory': 'a_folder',
    454              'UndefinePreprocessorDefinitions': 'string1;string2'},
    455          'Midl': {
    456              'AdditionalIncludeDirectories': 'folder1;folder2',
    457              'AdditionalOptions': 'a string1',
    458              'ApplicationConfigurationMode': 'true',
    459              'ClientStubFile': 'a_file_name',
    460              'CPreprocessOptions': 'a string1',
    461              'DefaultCharType': 'Signed',
    462              'DllDataFileName': 'a_file_name',
    463              'EnableErrorChecks': 'EnableCustom',
    464              'ErrorCheckAllocations': 'true',
    465              'ErrorCheckBounds': 'true',
    466              'ErrorCheckEnumRange': 'true',
    467              'ErrorCheckRefPointers': 'true',
    468              'ErrorCheckStubData': 'true',
    469              'GenerateClientFiles': 'Stub',
    470              'GenerateServerFiles': 'None',
    471              'GenerateStublessProxies': 'true',
    472              'GenerateTypeLibrary': 'true',
    473              'HeaderFileName': 'a_file_name',
    474              'IgnoreStandardIncludePath': 'true',
    475              'InterfaceIdentifierFileName': 'a_file_name',
    476              'LocaleID': '33',
    477              'MkTypLibCompatible': 'true',
    478              'OutputDirectory': 'a string1',
    479              'PreprocessorDefinitions': 'string1;string2',
    480              'ProxyFileName': 'a_file_name',
    481              'RedirectOutputAndErrors': 'a_file_name',
    482              'ServerStubFile': 'a_file_name',
    483              'StructMemberAlignment': 'NotSet',
    484              'SuppressCompilerWarnings': 'true',
    485              'SuppressStartupBanner': 'true',
    486              'TargetEnvironment': 'Itanium',
    487              'TrackerLogDirectory': 'a_folder',
    488              'TypeLibFormat': 'NewFormat',
    489              'TypeLibraryName': 'a_file_name',
    490              'UndefinePreprocessorDefinitions': 'string1;string2',
    491              'ValidateAllParameters': 'true',
    492              'WarnAsError': 'true',
    493              'WarningLevel': '1'},
    494          'Lib': {
    495              'AdditionalDependencies': 'file1;file2',
    496              'AdditionalLibraryDirectories': 'folder1;folder2',
    497              'AdditionalOptions': 'a string1',
    498              'DisplayLibrary': 'a string1',
    499              'ErrorReporting': 'PromptImmediately',
    500              'ExportNamedFunctions': 'string1;string2',
    501              'ForceSymbolReferences': 'a string1',
    502              'IgnoreAllDefaultLibraries': 'true',
    503              'IgnoreSpecificDefaultLibraries': 'file1;file2',
    504              'LinkTimeCodeGeneration': 'true',
    505              'MinimumRequiredVersion': 'a string1',
    506              'ModuleDefinitionFile': 'a_file_name',
    507              'Name': 'a_file_name',
    508              'OutputFile': 'a_file_name',
    509              'RemoveObjects': 'file1;file2',
    510              'SubSystem': 'Console',
    511              'SuppressStartupBanner': 'true',
    512              'TargetMachine': 'MachineX86i',
    513              'TrackerLogDirectory': 'a_folder',
    514              'TreatLibWarningAsErrors': 'true',
    515              'UseUnicodeResponseFiles': 'true',
    516              'Verbose': 'true'},
    517          'Manifest': {
    518              'AdditionalManifestFiles': 'file1;file2',
    519              'AdditionalOptions': 'a string1',
    520              'AssemblyIdentity': 'a string1',
    521              'ComponentFileName': 'a_file_name',
    522              'EnableDPIAwareness': 'fal',
    523              'GenerateCatalogFiles': 'truel',
    524              'GenerateCategoryTags': 'true',
    525              'InputResourceManifests': 'a string1',
    526              'ManifestFromManagedAssembly': 'a_file_name',
    527              'notgood3': 'bogus',
    528              'OutputManifestFile': 'a_file_name',
    529              'OutputResourceManifests': 'a string1',
    530              'RegistrarScriptFile': 'a_file_name',
    531              'ReplacementsFile': 'a_file_name',
    532              'SuppressDependencyElement': 'true',
    533              'SuppressStartupBanner': 'true',
    534              'TrackerLogDirectory': 'a_folder',
    535              'TypeLibraryFile': 'a_file_name',
    536              'UpdateFileHashes': 'true',
    537              'UpdateFileHashesSearchPath': 'a_file_name',
    538              'VerboseOutput': 'true'},
    539          'ProjectReference': {
    540              'LinkLibraryDependencies': 'true',
    541              'UseLibraryDependencyInputs': 'true'},
    542          'ManifestResourceCompile': {
    543              'ResourceOutputFileName': 'a_file_name'},
    544          '': {
    545              'EmbedManifest': 'true',
    546              'GenerateManifest': 'true',
    547              'IgnoreImportLibrary': 'true',
    548              'LinkIncremental': 'false'}},
    549         self.stderr)
    550     self._ExpectedWarnings([
    551         'Warning: unrecognized setting ClCompile/Enableprefast',
    552         'Warning: unrecognized setting ClCompile/ZZXYZ',
    553         'Warning: unrecognized setting Manifest/notgood3',
    554         'Warning: for Manifest/GenerateCatalogFiles, '
    555         "expected bool; got 'truel'",
    556         'Warning: for Lib/TargetMachine, unrecognized enumerated value '
    557         'MachineX86i',
    558         "Warning: for Manifest/EnableDPIAwareness, expected bool; got 'fal'"])
    559 
    560   def testConvertToMSBuildSettings_empty(self):
    561     """Tests an empty conversion."""
    562     msvs_settings = {}
    563     expected_msbuild_settings = {}
    564     actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
    565         msvs_settings,
    566         self.stderr)
    567     self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
    568     self._ExpectedWarnings([])
    569 
    570   def testConvertToMSBuildSettings_minimal(self):
    571     """Tests a minimal conversion."""
    572     msvs_settings = {
    573         'VCCLCompilerTool': {
    574             'AdditionalIncludeDirectories': 'dir1',
    575             'AdditionalOptions': '/foo',
    576             'BasicRuntimeChecks': '0',
    577             },
    578         'VCLinkerTool': {
    579             'LinkTimeCodeGeneration': '1',
    580             'ErrorReporting': '1',
    581             'DataExecutionPrevention': '2',
    582             },
    583         }
    584     expected_msbuild_settings = {
    585         'ClCompile': {
    586             'AdditionalIncludeDirectories': 'dir1',
    587             'AdditionalOptions': '/foo',
    588             'BasicRuntimeChecks': 'Default',
    589             },
    590         'Link': {
    591             'LinkTimeCodeGeneration': 'UseLinkTimeCodeGeneration',
    592             'LinkErrorReporting': 'PromptImmediately',
    593             'DataExecutionPrevention': 'true',
    594             },
    595         }
    596     actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
    597         msvs_settings,
    598         self.stderr)
    599     self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
    600     self._ExpectedWarnings([])
    601 
    602   def testConvertToMSBuildSettings_warnings(self):
    603     """Tests conversion that generates warnings."""
    604     msvs_settings = {
    605         'VCCLCompilerTool': {
    606             'AdditionalIncludeDirectories': '1',
    607             'AdditionalOptions': '2',
    608             # These are incorrect values:
    609             'BasicRuntimeChecks': '12',
    610             'BrowseInformation': '21',
    611             'UsePrecompiledHeader': '13',
    612             'GeneratePreprocessedFile': '14'},
    613         'VCLinkerTool': {
    614             # These are incorrect values:
    615             'Driver': '10',
    616             'LinkTimeCodeGeneration': '31',
    617             'ErrorReporting': '21',
    618             'FixedBaseAddress': '6'},
    619         'VCResourceCompilerTool': {
    620             # Custom
    621             'Culture': '1003'}}
    622     expected_msbuild_settings = {
    623         'ClCompile': {
    624             'AdditionalIncludeDirectories': '1',
    625             'AdditionalOptions': '2'},
    626         'Link': {},
    627         'ResourceCompile': {
    628             # Custom
    629             'Culture': '0x03eb'}}
    630     actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
    631         msvs_settings,
    632         self.stderr)
    633     self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
    634     self._ExpectedWarnings([
    635         'Warning: while converting VCCLCompilerTool/BasicRuntimeChecks to '
    636         'MSBuild, index value (12) not in expected range [0, 4)',
    637         'Warning: while converting VCCLCompilerTool/BrowseInformation to '
    638         'MSBuild, index value (21) not in expected range [0, 3)',
    639         'Warning: while converting VCCLCompilerTool/UsePrecompiledHeader to '
    640         'MSBuild, index value (13) not in expected range [0, 3)',
    641         'Warning: while converting VCCLCompilerTool/GeneratePreprocessedFile to '
    642         'MSBuild, value must be one of [0, 1, 2]; got 14',
    643 
    644         'Warning: while converting VCLinkerTool/Driver to '
    645         'MSBuild, index value (10) not in expected range [0, 4)',
    646         'Warning: while converting VCLinkerTool/LinkTimeCodeGeneration to '
    647         'MSBuild, index value (31) not in expected range [0, 5)',
    648         'Warning: while converting VCLinkerTool/ErrorReporting to '
    649         'MSBuild, index value (21) not in expected range [0, 3)',
    650         'Warning: while converting VCLinkerTool/FixedBaseAddress to '
    651         'MSBuild, index value (6) not in expected range [0, 3)',
    652         ])
    653 
    654   def testConvertToMSBuildSettings_full_synthetic(self):
    655     """Tests conversion of all the MSBuild settings."""
    656     msvs_settings = {
    657         'VCCLCompilerTool': {
    658             'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
    659             'AdditionalOptions': 'a_string',
    660             'AdditionalUsingDirectories': 'folder1;folder2;folder3',
    661             'AssemblerListingLocation': 'a_file_name',
    662             'AssemblerOutput': '0',
    663             'BasicRuntimeChecks': '1',
    664             'BrowseInformation': '2',
    665             'BrowseInformationFile': 'a_file_name',
    666             'BufferSecurityCheck': 'true',
    667             'CallingConvention': '0',
    668             'CompileAs': '1',
    669             'DebugInformationFormat': '4',
    670             'DefaultCharIsUnsigned': 'true',
    671             'Detect64BitPortabilityProblems': 'true',
    672             'DisableLanguageExtensions': 'true',
    673             'DisableSpecificWarnings': 'd1;d2;d3',
    674             'EnableEnhancedInstructionSet': '0',
    675             'EnableFiberSafeOptimizations': 'true',
    676             'EnableFunctionLevelLinking': 'true',
    677             'EnableIntrinsicFunctions': 'true',
    678             'EnablePREfast': 'true',
    679             'ErrorReporting': '1',
    680             'ExceptionHandling': '2',
    681             'ExpandAttributedSource': 'true',
    682             'FavorSizeOrSpeed': '0',
    683             'FloatingPointExceptions': 'true',
    684             'FloatingPointModel': '1',
    685             'ForceConformanceInForLoopScope': 'true',
    686             'ForcedIncludeFiles': 'file1;file2;file3',
    687             'ForcedUsingFiles': 'file1;file2;file3',
    688             'GeneratePreprocessedFile': '1',
    689             'GenerateXMLDocumentationFiles': 'true',
    690             'IgnoreStandardIncludePath': 'true',
    691             'InlineFunctionExpansion': '2',
    692             'KeepComments': 'true',
    693             'MinimalRebuild': 'true',
    694             'ObjectFile': 'a_file_name',
    695             'OmitDefaultLibName': 'true',
    696             'OmitFramePointers': 'true',
    697             'OpenMP': 'true',
    698             'Optimization': '3',
    699             'PrecompiledHeaderFile': 'a_file_name',
    700             'PrecompiledHeaderThrough': 'a_file_name',
    701             'PreprocessorDefinitions': 'd1;d2;d3',
    702             'ProgramDataBaseFileName': 'a_file_name',
    703             'RuntimeLibrary': '0',
    704             'RuntimeTypeInfo': 'true',
    705             'ShowIncludes': 'true',
    706             'SmallerTypeCheck': 'true',
    707             'StringPooling': 'true',
    708             'StructMemberAlignment': '1',
    709             'SuppressStartupBanner': 'true',
    710             'TreatWChar_tAsBuiltInType': 'true',
    711             'UndefineAllPreprocessorDefinitions': 'true',
    712             'UndefinePreprocessorDefinitions': 'd1;d2;d3',
    713             'UseFullPaths': 'true',
    714             'UsePrecompiledHeader': '1',
    715             'UseUnicodeResponseFiles': 'true',
    716             'WarnAsError': 'true',
    717             'WarningLevel': '2',
    718             'WholeProgramOptimization': 'true',
    719             'XMLDocumentationFileName': 'a_file_name'},
    720         'VCLinkerTool': {
    721             'AdditionalDependencies': 'file1;file2;file3',
    722             'AdditionalLibraryDirectories': 'folder1;folder2;folder3',
    723             'AdditionalLibraryDirectories_excluded': 'folder1;folder2;folder3',
    724             'AdditionalManifestDependencies': 'file1;file2;file3',
    725             'AdditionalOptions': 'a_string',
    726             'AddModuleNamesToAssembly': 'file1;file2;file3',
    727             'AllowIsolation': 'true',
    728             'AssemblyDebug': '0',
    729             'AssemblyLinkResource': 'file1;file2;file3',
    730             'BaseAddress': 'a_string',
    731             'CLRImageType': '1',
    732             'CLRThreadAttribute': '2',
    733             'CLRUnmanagedCodeCheck': 'true',
    734             'DataExecutionPrevention': '0',
    735             'DelayLoadDLLs': 'file1;file2;file3',
    736             'DelaySign': 'true',
    737             'Driver': '1',
    738             'EmbedManagedResourceFile': 'file1;file2;file3',
    739             'EnableCOMDATFolding': '0',
    740             'EnableUAC': 'true',
    741             'EntryPointSymbol': 'a_string',
    742             'ErrorReporting': '0',
    743             'FixedBaseAddress': '1',
    744             'ForceSymbolReferences': 'file1;file2;file3',
    745             'FunctionOrder': 'a_file_name',
    746             'GenerateDebugInformation': 'true',
    747             'GenerateManifest': 'true',
    748             'GenerateMapFile': 'true',
    749             'HeapCommitSize': 'a_string',
    750             'HeapReserveSize': 'a_string',
    751             'IgnoreAllDefaultLibraries': 'true',
    752             'IgnoreDefaultLibraryNames': 'file1;file2;file3',
    753             'IgnoreEmbeddedIDL': 'true',
    754             'IgnoreImportLibrary': 'true',
    755             'ImportLibrary': 'a_file_name',
    756             'KeyContainer': 'a_file_name',
    757             'KeyFile': 'a_file_name',
    758             'LargeAddressAware': '2',
    759             'LinkIncremental': '1',
    760             'LinkLibraryDependencies': 'true',
    761             'LinkTimeCodeGeneration': '2',
    762             'ManifestFile': 'a_file_name',
    763             'MapExports': 'true',
    764             'MapFileName': 'a_file_name',
    765             'MergedIDLBaseFileName': 'a_file_name',
    766             'MergeSections': 'a_string',
    767             'MidlCommandFile': 'a_file_name',
    768             'ModuleDefinitionFile': 'a_file_name',
    769             'OptimizeForWindows98': '1',
    770             'OptimizeReferences': '0',
    771             'OutputFile': 'a_file_name',
    772             'PerUserRedirection': 'true',
    773             'Profile': 'true',
    774             'ProfileGuidedDatabase': 'a_file_name',
    775             'ProgramDatabaseFile': 'a_file_name',
    776             'RandomizedBaseAddress': '1',
    777             'RegisterOutput': 'true',
    778             'ResourceOnlyDLL': 'true',
    779             'SetChecksum': 'true',
    780             'ShowProgress': '0',
    781             'StackCommitSize': 'a_string',
    782             'StackReserveSize': 'a_string',
    783             'StripPrivateSymbols': 'a_file_name',
    784             'SubSystem': '2',
    785             'SupportUnloadOfDelayLoadedDLL': 'true',
    786             'SuppressStartupBanner': 'true',
    787             'SwapRunFromCD': 'true',
    788             'SwapRunFromNet': 'true',
    789             'TargetMachine': '3',
    790             'TerminalServerAware': '2',
    791             'TurnOffAssemblyGeneration': 'true',
    792             'TypeLibraryFile': 'a_file_name',
    793             'TypeLibraryResourceID': '33',
    794             'UACExecutionLevel': '1',
    795             'UACUIAccess': 'true',
    796             'UseLibraryDependencyInputs': 'false',
    797             'UseUnicodeResponseFiles': 'true',
    798             'Version': 'a_string'},
    799         'VCResourceCompilerTool': {
    800             'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
    801             'AdditionalOptions': 'a_string',
    802             'Culture': '1003',
    803             'IgnoreStandardIncludePath': 'true',
    804             'PreprocessorDefinitions': 'd1;d2;d3',
    805             'ResourceOutputFileName': 'a_string',
    806             'ShowProgress': 'true',
    807             'SuppressStartupBanner': 'true',
    808             'UndefinePreprocessorDefinitions': 'd1;d2;d3'},
    809         'VCMIDLTool': {
    810             'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
    811             'AdditionalOptions': 'a_string',
    812             'CPreprocessOptions': 'a_string',
    813             'DefaultCharType': '0',
    814             'DLLDataFileName': 'a_file_name',
    815             'EnableErrorChecks': '2',
    816             'ErrorCheckAllocations': 'true',
    817             'ErrorCheckBounds': 'true',
    818             'ErrorCheckEnumRange': 'true',
    819             'ErrorCheckRefPointers': 'true',
    820             'ErrorCheckStubData': 'true',
    821             'GenerateStublessProxies': 'true',
    822             'GenerateTypeLibrary': 'true',
    823             'HeaderFileName': 'a_file_name',
    824             'IgnoreStandardIncludePath': 'true',
    825             'InterfaceIdentifierFileName': 'a_file_name',
    826             'MkTypLibCompatible': 'true',
    827             'OutputDirectory': 'a_string',
    828             'PreprocessorDefinitions': 'd1;d2;d3',
    829             'ProxyFileName': 'a_file_name',
    830             'RedirectOutputAndErrors': 'a_file_name',
    831             'StructMemberAlignment': '3',
    832             'SuppressStartupBanner': 'true',
    833             'TargetEnvironment': '1',
    834             'TypeLibraryName': 'a_file_name',
    835             'UndefinePreprocessorDefinitions': 'd1;d2;d3',
    836             'ValidateParameters': 'true',
    837             'WarnAsError': 'true',
    838             'WarningLevel': '4'},
    839         'VCLibrarianTool': {
    840             'AdditionalDependencies': 'file1;file2;file3',
    841             'AdditionalLibraryDirectories': 'folder1;folder2;folder3',
    842             'AdditionalLibraryDirectories_excluded': 'folder1;folder2;folder3',
    843             'AdditionalOptions': 'a_string',
    844             'ExportNamedFunctions': 'd1;d2;d3',
    845             'ForceSymbolReferences': 'a_string',
    846             'IgnoreAllDefaultLibraries': 'true',
    847             'IgnoreSpecificDefaultLibraries': 'file1;file2;file3',
    848             'LinkLibraryDependencies': 'true',
    849             'ModuleDefinitionFile': 'a_file_name',
    850             'OutputFile': 'a_file_name',
    851             'SuppressStartupBanner': 'true',
    852             'UseUnicodeResponseFiles': 'true'},
    853         'VCManifestTool': {
    854             'AdditionalManifestFiles': 'file1;file2;file3',
    855             'AdditionalOptions': 'a_string',
    856             'AssemblyIdentity': 'a_string',
    857             'ComponentFileName': 'a_file_name',
    858             'DependencyInformationFile': 'a_file_name',
    859             'EmbedManifest': 'true',
    860             'GenerateCatalogFiles': 'true',
    861             'InputResourceManifests': 'a_string',
    862             'ManifestResourceFile': 'my_name',
    863             'OutputManifestFile': 'a_file_name',
    864             'RegistrarScriptFile': 'a_file_name',
    865             'ReplacementsFile': 'a_file_name',
    866             'SuppressStartupBanner': 'true',
    867             'TypeLibraryFile': 'a_file_name',
    868             'UpdateFileHashes': 'true',
    869             'UpdateFileHashesSearchPath': 'a_file_name',
    870             'UseFAT32Workaround': 'true',
    871             'UseUnicodeResponseFiles': 'true',
    872             'VerboseOutput': 'true'}}
    873     expected_msbuild_settings = {
    874         'ClCompile': {
    875             'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
    876             'AdditionalOptions': 'a_string /J',
    877             'AdditionalUsingDirectories': 'folder1;folder2;folder3',
    878             'AssemblerListingLocation': 'a_file_name',
    879             'AssemblerOutput': 'NoListing',
    880             'BasicRuntimeChecks': 'StackFrameRuntimeCheck',
    881             'BrowseInformation': 'true',
    882             'BrowseInformationFile': 'a_file_name',
    883             'BufferSecurityCheck': 'true',
    884             'CallingConvention': 'Cdecl',
    885             'CompileAs': 'CompileAsC',
    886             'DebugInformationFormat': 'EditAndContinue',
    887             'DisableLanguageExtensions': 'true',
    888             'DisableSpecificWarnings': 'd1;d2;d3',
    889             'EnableEnhancedInstructionSet': 'NotSet',
    890             'EnableFiberSafeOptimizations': 'true',
    891             'EnablePREfast': 'true',
    892             'ErrorReporting': 'Prompt',
    893             'ExceptionHandling': 'Async',
    894             'ExpandAttributedSource': 'true',
    895             'FavorSizeOrSpeed': 'Neither',
    896             'FloatingPointExceptions': 'true',
    897             'FloatingPointModel': 'Strict',
    898             'ForceConformanceInForLoopScope': 'true',
    899             'ForcedIncludeFiles': 'file1;file2;file3',
    900             'ForcedUsingFiles': 'file1;file2;file3',
    901             'FunctionLevelLinking': 'true',
    902             'GenerateXMLDocumentationFiles': 'true',
    903             'IgnoreStandardIncludePath': 'true',
    904             'InlineFunctionExpansion': 'AnySuitable',
    905             'IntrinsicFunctions': 'true',
    906             'MinimalRebuild': 'true',
    907             'ObjectFileName': 'a_file_name',
    908             'OmitDefaultLibName': 'true',
    909             'OmitFramePointers': 'true',
    910             'OpenMPSupport': 'true',
    911             'Optimization': 'Full',
    912             'PrecompiledHeader': 'Create',
    913             'PrecompiledHeaderFile': 'a_file_name',
    914             'PrecompiledHeaderOutputFile': 'a_file_name',
    915             'PreprocessKeepComments': 'true',
    916             'PreprocessorDefinitions': 'd1;d2;d3',
    917             'PreprocessSuppressLineNumbers': 'false',
    918             'PreprocessToFile': 'true',
    919             'ProgramDataBaseFileName': 'a_file_name',
    920             'RuntimeLibrary': 'MultiThreaded',
    921             'RuntimeTypeInfo': 'true',
    922             'ShowIncludes': 'true',
    923             'SmallerTypeCheck': 'true',
    924             'StringPooling': 'true',
    925             'StructMemberAlignment': '1Byte',
    926             'SuppressStartupBanner': 'true',
    927             'TreatWarningAsError': 'true',
    928             'TreatWChar_tAsBuiltInType': 'true',
    929             'UndefineAllPreprocessorDefinitions': 'true',
    930             'UndefinePreprocessorDefinitions': 'd1;d2;d3',
    931             'UseFullPaths': 'true',
    932             'WarningLevel': 'Level2',
    933             'WholeProgramOptimization': 'true',
    934             'XMLDocumentationFileName': 'a_file_name'},
    935         'Link': {
    936             'AdditionalDependencies': 'file1;file2;file3',
    937             'AdditionalLibraryDirectories': 'folder1;folder2;folder3',
    938             'AdditionalManifestDependencies': 'file1;file2;file3',
    939             'AdditionalOptions': 'a_string',
    940             'AddModuleNamesToAssembly': 'file1;file2;file3',
    941             'AllowIsolation': 'true',
    942             'AssemblyDebug': '',
    943             'AssemblyLinkResource': 'file1;file2;file3',
    944             'BaseAddress': 'a_string',
    945             'CLRImageType': 'ForceIJWImage',
    946             'CLRThreadAttribute': 'STAThreadingAttribute',
    947             'CLRUnmanagedCodeCheck': 'true',
    948             'DataExecutionPrevention': '',
    949             'DelayLoadDLLs': 'file1;file2;file3',
    950             'DelaySign': 'true',
    951             'Driver': 'Driver',
    952             'EmbedManagedResourceFile': 'file1;file2;file3',
    953             'EnableCOMDATFolding': '',
    954             'EnableUAC': 'true',
    955             'EntryPointSymbol': 'a_string',
    956             'FixedBaseAddress': 'false',
    957             'ForceSymbolReferences': 'file1;file2;file3',
    958             'FunctionOrder': 'a_file_name',
    959             'GenerateDebugInformation': 'true',
    960             'GenerateMapFile': 'true',
    961             'HeapCommitSize': 'a_string',
    962             'HeapReserveSize': 'a_string',
    963             'IgnoreAllDefaultLibraries': 'true',
    964             'IgnoreEmbeddedIDL': 'true',
    965             'IgnoreSpecificDefaultLibraries': 'file1;file2;file3',
    966             'ImportLibrary': 'a_file_name',
    967             'KeyContainer': 'a_file_name',
    968             'KeyFile': 'a_file_name',
    969             'LargeAddressAware': 'true',
    970             'LinkErrorReporting': 'NoErrorReport',
    971             'LinkTimeCodeGeneration': 'PGInstrument',
    972             'ManifestFile': 'a_file_name',
    973             'MapExports': 'true',
    974             'MapFileName': 'a_file_name',
    975             'MergedIDLBaseFileName': 'a_file_name',
    976             'MergeSections': 'a_string',
    977             'MidlCommandFile': 'a_file_name',
    978             'ModuleDefinitionFile': 'a_file_name',
    979             'NoEntryPoint': 'true',
    980             'OptimizeReferences': '',
    981             'OutputFile': 'a_file_name',
    982             'PerUserRedirection': 'true',
    983             'Profile': 'true',
    984             'ProfileGuidedDatabase': 'a_file_name',
    985             'ProgramDatabaseFile': 'a_file_name',
    986             'RandomizedBaseAddress': 'false',
    987             'RegisterOutput': 'true',
    988             'SetChecksum': 'true',
    989             'ShowProgress': 'NotSet',
    990             'StackCommitSize': 'a_string',
    991             'StackReserveSize': 'a_string',
    992             'StripPrivateSymbols': 'a_file_name',
    993             'SubSystem': 'Windows',
    994             'SupportUnloadOfDelayLoadedDLL': 'true',
    995             'SuppressStartupBanner': 'true',
    996             'SwapRunFromCD': 'true',
    997             'SwapRunFromNET': 'true',
    998             'TargetMachine': 'MachineARM',
    999             'TerminalServerAware': 'true',
   1000             'TurnOffAssemblyGeneration': 'true',
   1001             'TypeLibraryFile': 'a_file_name',
   1002             'TypeLibraryResourceID': '33',
   1003             'UACExecutionLevel': 'HighestAvailable',
   1004             'UACUIAccess': 'true',
   1005             'Version': 'a_string'},
   1006         'ResourceCompile': {
   1007             'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
   1008             'AdditionalOptions': 'a_string',
   1009             'Culture': '0x03eb',
   1010             'IgnoreStandardIncludePath': 'true',
   1011             'PreprocessorDefinitions': 'd1;d2;d3',
   1012             'ResourceOutputFileName': 'a_string',
   1013             'ShowProgress': 'true',
   1014             'SuppressStartupBanner': 'true',
   1015             'UndefinePreprocessorDefinitions': 'd1;d2;d3'},
   1016         'Midl': {
   1017             'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
   1018             'AdditionalOptions': 'a_string',
   1019             'CPreprocessOptions': 'a_string',
   1020             'DefaultCharType': 'Unsigned',
   1021             'DllDataFileName': 'a_file_name',
   1022             'EnableErrorChecks': 'All',
   1023             'ErrorCheckAllocations': 'true',
   1024             'ErrorCheckBounds': 'true',
   1025             'ErrorCheckEnumRange': 'true',
   1026             'ErrorCheckRefPointers': 'true',
   1027             'ErrorCheckStubData': 'true',
   1028             'GenerateStublessProxies': 'true',
   1029             'GenerateTypeLibrary': 'true',
   1030             'HeaderFileName': 'a_file_name',
   1031             'IgnoreStandardIncludePath': 'true',
   1032             'InterfaceIdentifierFileName': 'a_file_name',
   1033             'MkTypLibCompatible': 'true',
   1034             'OutputDirectory': 'a_string',
   1035             'PreprocessorDefinitions': 'd1;d2;d3',
   1036             'ProxyFileName': 'a_file_name',
   1037             'RedirectOutputAndErrors': 'a_file_name',
   1038             'StructMemberAlignment': '4',
   1039             'SuppressStartupBanner': 'true',
   1040             'TargetEnvironment': 'Win32',
   1041             'TypeLibraryName': 'a_file_name',
   1042             'UndefinePreprocessorDefinitions': 'd1;d2;d3',
   1043             'ValidateAllParameters': 'true',
   1044             'WarnAsError': 'true',
   1045             'WarningLevel': '4'},
   1046         'Lib': {
   1047             'AdditionalDependencies': 'file1;file2;file3',
   1048             'AdditionalLibraryDirectories': 'folder1;folder2;folder3',
   1049             'AdditionalOptions': 'a_string',
   1050             'ExportNamedFunctions': 'd1;d2;d3',
   1051             'ForceSymbolReferences': 'a_string',
   1052             'IgnoreAllDefaultLibraries': 'true',
   1053             'IgnoreSpecificDefaultLibraries': 'file1;file2;file3',
   1054             'ModuleDefinitionFile': 'a_file_name',
   1055             'OutputFile': 'a_file_name',
   1056             'SuppressStartupBanner': 'true',
   1057             'UseUnicodeResponseFiles': 'true'},
   1058         'Manifest': {
   1059             'AdditionalManifestFiles': 'file1;file2;file3',
   1060             'AdditionalOptions': 'a_string',
   1061             'AssemblyIdentity': 'a_string',
   1062             'ComponentFileName': 'a_file_name',
   1063             'GenerateCatalogFiles': 'true',
   1064             'InputResourceManifests': 'a_string',
   1065             'OutputManifestFile': 'a_file_name',
   1066             'RegistrarScriptFile': 'a_file_name',
   1067             'ReplacementsFile': 'a_file_name',
   1068             'SuppressStartupBanner': 'true',
   1069             'TypeLibraryFile': 'a_file_name',
   1070             'UpdateFileHashes': 'true',
   1071             'UpdateFileHashesSearchPath': 'a_file_name',
   1072             'VerboseOutput': 'true'},
   1073         'ManifestResourceCompile': {
   1074             'ResourceOutputFileName': 'my_name'},
   1075         'ProjectReference': {
   1076             'LinkLibraryDependencies': 'true',
   1077             'UseLibraryDependencyInputs': 'false'},
   1078         '': {
   1079             'EmbedManifest': 'true',
   1080             'GenerateManifest': 'true',
   1081             'IgnoreImportLibrary': 'true',
   1082             'LinkIncremental': 'false'}}
   1083     actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
   1084         msvs_settings,
   1085         self.stderr)
   1086     self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
   1087     self._ExpectedWarnings([])
   1088 
   1089   def testConvertToMSBuildSettings_actual(self):
   1090     """Tests the conversion of an actual project.
   1091 
   1092     A VS2008 project with most of the options defined was created through the
   1093     VS2008 IDE.  It was then converted to VS2010.  The tool settings found in
   1094     the .vcproj and .vcxproj files were converted to the two dictionaries
   1095     msvs_settings and expected_msbuild_settings.
   1096 
   1097     Note that for many settings, the VS2010 converter adds macros like
   1098     %(AdditionalIncludeDirectories) to make sure than inherited values are
   1099     included.  Since the Gyp projects we generate do not use inheritance,
   1100     we removed these macros.  They were:
   1101         ClCompile:
   1102             AdditionalIncludeDirectories:  ';%(AdditionalIncludeDirectories)'
   1103             AdditionalOptions:  ' %(AdditionalOptions)'
   1104             AdditionalUsingDirectories:  ';%(AdditionalUsingDirectories)'
   1105             DisableSpecificWarnings: ';%(DisableSpecificWarnings)',
   1106             ForcedIncludeFiles:  ';%(ForcedIncludeFiles)',
   1107             ForcedUsingFiles:  ';%(ForcedUsingFiles)',
   1108             PreprocessorDefinitions:  ';%(PreprocessorDefinitions)',
   1109             UndefinePreprocessorDefinitions:
   1110                 ';%(UndefinePreprocessorDefinitions)',
   1111         Link:
   1112             AdditionalDependencies:  ';%(AdditionalDependencies)',
   1113             AdditionalLibraryDirectories:  ';%(AdditionalLibraryDirectories)',
   1114             AdditionalManifestDependencies:
   1115                 ';%(AdditionalManifestDependencies)',
   1116             AdditionalOptions:  ' %(AdditionalOptions)',
   1117             AddModuleNamesToAssembly:  ';%(AddModuleNamesToAssembly)',
   1118             AssemblyLinkResource:  ';%(AssemblyLinkResource)',
   1119             DelayLoadDLLs:  ';%(DelayLoadDLLs)',
   1120             EmbedManagedResourceFile:  ';%(EmbedManagedResourceFile)',
   1121             ForceSymbolReferences:  ';%(ForceSymbolReferences)',
   1122             IgnoreSpecificDefaultLibraries:
   1123                 ';%(IgnoreSpecificDefaultLibraries)',
   1124         ResourceCompile:
   1125             AdditionalIncludeDirectories:  ';%(AdditionalIncludeDirectories)',
   1126             AdditionalOptions:  ' %(AdditionalOptions)',
   1127             PreprocessorDefinitions:  ';%(PreprocessorDefinitions)',
   1128         Manifest:
   1129             AdditionalManifestFiles:  ';%(AdditionalManifestFiles)',
   1130             AdditionalOptions:  ' %(AdditionalOptions)',
   1131             InputResourceManifests:  ';%(InputResourceManifests)',
   1132     """
   1133     msvs_settings = {
   1134         'VCCLCompilerTool': {
   1135             'AdditionalIncludeDirectories': 'dir1',
   1136             'AdditionalOptions': '/more',
   1137             'AdditionalUsingDirectories': 'test',
   1138             'AssemblerListingLocation': '$(IntDir)\\a',
   1139             'AssemblerOutput': '1',
   1140             'BasicRuntimeChecks': '3',
   1141             'BrowseInformation': '1',
   1142             'BrowseInformationFile': '$(IntDir)\\e',
   1143             'BufferSecurityCheck': 'false',
   1144             'CallingConvention': '1',
   1145             'CompileAs': '1',
   1146             'DebugInformationFormat': '4',
   1147             'DefaultCharIsUnsigned': 'true',
   1148             'Detect64BitPortabilityProblems': 'true',
   1149             'DisableLanguageExtensions': 'true',
   1150             'DisableSpecificWarnings': 'abc',
   1151             'EnableEnhancedInstructionSet': '1',
   1152             'EnableFiberSafeOptimizations': 'true',
   1153             'EnableFunctionLevelLinking': 'true',
   1154             'EnableIntrinsicFunctions': 'true',
   1155             'EnablePREfast': 'true',
   1156             'ErrorReporting': '2',
   1157             'ExceptionHandling': '2',
   1158             'ExpandAttributedSource': 'true',
   1159             'FavorSizeOrSpeed': '2',
   1160             'FloatingPointExceptions': 'true',
   1161             'FloatingPointModel': '1',
   1162             'ForceConformanceInForLoopScope': 'false',
   1163             'ForcedIncludeFiles': 'def',
   1164             'ForcedUsingFiles': 'ge',
   1165             'GeneratePreprocessedFile': '2',
   1166             'GenerateXMLDocumentationFiles': 'true',
   1167             'IgnoreStandardIncludePath': 'true',
   1168             'InlineFunctionExpansion': '1',
   1169             'KeepComments': 'true',
   1170             'MinimalRebuild': 'true',
   1171             'ObjectFile': '$(IntDir)\\b',
   1172             'OmitDefaultLibName': 'true',
   1173             'OmitFramePointers': 'true',
   1174             'OpenMP': 'true',
   1175             'Optimization': '3',
   1176             'PrecompiledHeaderFile': '$(IntDir)\\$(TargetName).pche',
   1177             'PrecompiledHeaderThrough': 'StdAfx.hd',
   1178             'PreprocessorDefinitions': 'WIN32;_DEBUG;_CONSOLE',
   1179             'ProgramDataBaseFileName': '$(IntDir)\\vc90b.pdb',
   1180             'RuntimeLibrary': '3',
   1181             'RuntimeTypeInfo': 'false',
   1182             'ShowIncludes': 'true',
   1183             'SmallerTypeCheck': 'true',
   1184             'StringPooling': 'true',
   1185             'StructMemberAlignment': '3',
   1186             'SuppressStartupBanner': 'false',
   1187             'TreatWChar_tAsBuiltInType': 'false',
   1188             'UndefineAllPreprocessorDefinitions': 'true',
   1189             'UndefinePreprocessorDefinitions': 'wer',
   1190             'UseFullPaths': 'true',
   1191             'UsePrecompiledHeader': '0',
   1192             'UseUnicodeResponseFiles': 'false',
   1193             'WarnAsError': 'true',
   1194             'WarningLevel': '3',
   1195             'WholeProgramOptimization': 'true',
   1196             'XMLDocumentationFileName': '$(IntDir)\\c'},
   1197         'VCLinkerTool': {
   1198             'AdditionalDependencies': 'zx',
   1199             'AdditionalLibraryDirectories': 'asd',
   1200             'AdditionalManifestDependencies': 's2',
   1201             'AdditionalOptions': '/mor2',
   1202             'AddModuleNamesToAssembly': 'd1',
   1203             'AllowIsolation': 'false',
   1204             'AssemblyDebug': '1',
   1205             'AssemblyLinkResource': 'd5',
   1206             'BaseAddress': '23423',
   1207             'CLRImageType': '3',
   1208             'CLRThreadAttribute': '1',
   1209             'CLRUnmanagedCodeCheck': 'true',
   1210             'DataExecutionPrevention': '0',
   1211             'DelayLoadDLLs': 'd4',
   1212             'DelaySign': 'true',
   1213             'Driver': '2',
   1214             'EmbedManagedResourceFile': 'd2',
   1215             'EnableCOMDATFolding': '1',
   1216             'EnableUAC': 'false',
   1217             'EntryPointSymbol': 'f5',
   1218             'ErrorReporting': '2',
   1219             'FixedBaseAddress': '1',
   1220             'ForceSymbolReferences': 'd3',
   1221             'FunctionOrder': 'fssdfsd',
   1222             'GenerateDebugInformation': 'true',
   1223             'GenerateManifest': 'false',
   1224             'GenerateMapFile': 'true',
   1225             'HeapCommitSize': '13',
   1226             'HeapReserveSize': '12',
   1227             'IgnoreAllDefaultLibraries': 'true',
   1228             'IgnoreDefaultLibraryNames': 'flob;flok',
   1229             'IgnoreEmbeddedIDL': 'true',
   1230             'IgnoreImportLibrary': 'true',
   1231             'ImportLibrary': 'f4',
   1232             'KeyContainer': 'f7',
   1233             'KeyFile': 'f6',
   1234             'LargeAddressAware': '2',
   1235             'LinkIncremental': '0',
   1236             'LinkLibraryDependencies': 'false',
   1237             'LinkTimeCodeGeneration': '1',
   1238             'ManifestFile':
   1239             '$(IntDir)\\$(TargetFileName).2intermediate.manifest',
   1240             'MapExports': 'true',
   1241             'MapFileName': 'd5',
   1242             'MergedIDLBaseFileName': 'f2',
   1243             'MergeSections': 'f5',
   1244             'MidlCommandFile': 'f1',
   1245             'ModuleDefinitionFile': 'sdsd',
   1246             'OptimizeForWindows98': '2',
   1247             'OptimizeReferences': '2',
   1248             'OutputFile': '$(OutDir)\\$(ProjectName)2.exe',
   1249             'PerUserRedirection': 'true',
   1250             'Profile': 'true',
   1251             'ProfileGuidedDatabase': '$(TargetDir)$(TargetName).pgdd',
   1252             'ProgramDatabaseFile': 'Flob.pdb',
   1253             'RandomizedBaseAddress': '1',
   1254             'RegisterOutput': 'true',
   1255             'ResourceOnlyDLL': 'true',
   1256             'SetChecksum': 'false',
   1257             'ShowProgress': '1',
   1258             'StackCommitSize': '15',
   1259             'StackReserveSize': '14',
   1260             'StripPrivateSymbols': 'd3',
   1261             'SubSystem': '1',
   1262             'SupportUnloadOfDelayLoadedDLL': 'true',
   1263             'SuppressStartupBanner': 'false',
   1264             'SwapRunFromCD': 'true',
   1265             'SwapRunFromNet': 'true',
   1266             'TargetMachine': '1',
   1267             'TerminalServerAware': '1',
   1268             'TurnOffAssemblyGeneration': 'true',
   1269             'TypeLibraryFile': 'f3',
   1270             'TypeLibraryResourceID': '12',
   1271             'UACExecutionLevel': '2',
   1272             'UACUIAccess': 'true',
   1273             'UseLibraryDependencyInputs': 'true',
   1274             'UseUnicodeResponseFiles': 'false',
   1275             'Version': '333'},
   1276         'VCResourceCompilerTool': {
   1277             'AdditionalIncludeDirectories': 'f3',
   1278             'AdditionalOptions': '/more3',
   1279             'Culture': '3084',
   1280             'IgnoreStandardIncludePath': 'true',
   1281             'PreprocessorDefinitions': '_UNICODE;UNICODE2',
   1282             'ResourceOutputFileName': '$(IntDir)/$(InputName)3.res',
   1283             'ShowProgress': 'true'},
   1284         'VCManifestTool': {
   1285             'AdditionalManifestFiles': 'sfsdfsd',
   1286             'AdditionalOptions': 'afdsdafsd',
   1287             'AssemblyIdentity': 'sddfdsadfsa',
   1288             'ComponentFileName': 'fsdfds',
   1289             'DependencyInformationFile': '$(IntDir)\\mt.depdfd',
   1290             'EmbedManifest': 'false',
   1291             'GenerateCatalogFiles': 'true',
   1292             'InputResourceManifests': 'asfsfdafs',
   1293             'ManifestResourceFile':
   1294             '$(IntDir)\\$(TargetFileName).embed.manifest.resfdsf',
   1295             'OutputManifestFile': '$(TargetPath).manifestdfs',
   1296             'RegistrarScriptFile': 'sdfsfd',
   1297             'ReplacementsFile': 'sdffsd',
   1298             'SuppressStartupBanner': 'false',
   1299             'TypeLibraryFile': 'sfsd',
   1300             'UpdateFileHashes': 'true',
   1301             'UpdateFileHashesSearchPath': 'sfsd',
   1302             'UseFAT32Workaround': 'true',
   1303             'UseUnicodeResponseFiles': 'false',
   1304             'VerboseOutput': 'true'}}
   1305     expected_msbuild_settings = {
   1306         'ClCompile': {
   1307             'AdditionalIncludeDirectories': 'dir1',
   1308             'AdditionalOptions': '/more /J',
   1309             'AdditionalUsingDirectories': 'test',
   1310             'AssemblerListingLocation': '$(IntDir)a',
   1311             'AssemblerOutput': 'AssemblyCode',
   1312             'BasicRuntimeChecks': 'EnableFastChecks',
   1313             'BrowseInformation': 'true',
   1314             'BrowseInformationFile': '$(IntDir)e',
   1315             'BufferSecurityCheck': 'false',
   1316             'CallingConvention': 'FastCall',
   1317             'CompileAs': 'CompileAsC',
   1318             'DebugInformationFormat': 'EditAndContinue',
   1319             'DisableLanguageExtensions': 'true',
   1320             'DisableSpecificWarnings': 'abc',
   1321             'EnableEnhancedInstructionSet': 'StreamingSIMDExtensions',
   1322             'EnableFiberSafeOptimizations': 'true',
   1323             'EnablePREfast': 'true',
   1324             'ErrorReporting': 'Queue',
   1325             'ExceptionHandling': 'Async',
   1326             'ExpandAttributedSource': 'true',
   1327             'FavorSizeOrSpeed': 'Size',
   1328             'FloatingPointExceptions': 'true',
   1329             'FloatingPointModel': 'Strict',
   1330             'ForceConformanceInForLoopScope': 'false',
   1331             'ForcedIncludeFiles': 'def',
   1332             'ForcedUsingFiles': 'ge',
   1333             'FunctionLevelLinking': 'true',
   1334             'GenerateXMLDocumentationFiles': 'true',
   1335             'IgnoreStandardIncludePath': 'true',
   1336             'InlineFunctionExpansion': 'OnlyExplicitInline',
   1337             'IntrinsicFunctions': 'true',
   1338             'MinimalRebuild': 'true',
   1339             'ObjectFileName': '$(IntDir)b',
   1340             'OmitDefaultLibName': 'true',
   1341             'OmitFramePointers': 'true',
   1342             'OpenMPSupport': 'true',
   1343             'Optimization': 'Full',
   1344             'PrecompiledHeader': 'NotUsing',  # Actual conversion gives ''
   1345             'PrecompiledHeaderFile': 'StdAfx.hd',
   1346             'PrecompiledHeaderOutputFile': '$(IntDir)$(TargetName).pche',
   1347             'PreprocessKeepComments': 'true',
   1348             'PreprocessorDefinitions': 'WIN32;_DEBUG;_CONSOLE',
   1349             'PreprocessSuppressLineNumbers': 'true',
   1350             'PreprocessToFile': 'true',
   1351             'ProgramDataBaseFileName': '$(IntDir)vc90b.pdb',
   1352             'RuntimeLibrary': 'MultiThreadedDebugDLL',
   1353             'RuntimeTypeInfo': 'false',
   1354             'ShowIncludes': 'true',
   1355             'SmallerTypeCheck': 'true',
   1356             'StringPooling': 'true',
   1357             'StructMemberAlignment': '4Bytes',
   1358             'SuppressStartupBanner': 'false',
   1359             'TreatWarningAsError': 'true',
   1360             'TreatWChar_tAsBuiltInType': 'false',
   1361             'UndefineAllPreprocessorDefinitions': 'true',
   1362             'UndefinePreprocessorDefinitions': 'wer',
   1363             'UseFullPaths': 'true',
   1364             'WarningLevel': 'Level3',
   1365             'WholeProgramOptimization': 'true',
   1366             'XMLDocumentationFileName': '$(IntDir)c'},
   1367         'Link': {
   1368             'AdditionalDependencies': 'zx',
   1369             'AdditionalLibraryDirectories': 'asd',
   1370             'AdditionalManifestDependencies': 's2',
   1371             'AdditionalOptions': '/mor2',
   1372             'AddModuleNamesToAssembly': 'd1',
   1373             'AllowIsolation': 'false',
   1374             'AssemblyDebug': 'true',
   1375             'AssemblyLinkResource': 'd5',
   1376             'BaseAddress': '23423',
   1377             'CLRImageType': 'ForceSafeILImage',
   1378             'CLRThreadAttribute': 'MTAThreadingAttribute',
   1379             'CLRUnmanagedCodeCheck': 'true',
   1380             'DataExecutionPrevention': '',
   1381             'DelayLoadDLLs': 'd4',
   1382             'DelaySign': 'true',
   1383             'Driver': 'UpOnly',
   1384             'EmbedManagedResourceFile': 'd2',
   1385             'EnableCOMDATFolding': 'false',
   1386             'EnableUAC': 'false',
   1387             'EntryPointSymbol': 'f5',
   1388             'FixedBaseAddress': 'false',
   1389             'ForceSymbolReferences': 'd3',
   1390             'FunctionOrder': 'fssdfsd',
   1391             'GenerateDebugInformation': 'true',
   1392             'GenerateMapFile': 'true',
   1393             'HeapCommitSize': '13',
   1394             'HeapReserveSize': '12',
   1395             'IgnoreAllDefaultLibraries': 'true',
   1396             'IgnoreEmbeddedIDL': 'true',
   1397             'IgnoreSpecificDefaultLibraries': 'flob;flok',
   1398             'ImportLibrary': 'f4',
   1399             'KeyContainer': 'f7',
   1400             'KeyFile': 'f6',
   1401             'LargeAddressAware': 'true',
   1402             'LinkErrorReporting': 'QueueForNextLogin',
   1403             'LinkTimeCodeGeneration': 'UseLinkTimeCodeGeneration',
   1404             'ManifestFile': '$(IntDir)$(TargetFileName).2intermediate.manifest',
   1405             'MapExports': 'true',
   1406             'MapFileName': 'd5',
   1407             'MergedIDLBaseFileName': 'f2',
   1408             'MergeSections': 'f5',
   1409             'MidlCommandFile': 'f1',
   1410             'ModuleDefinitionFile': 'sdsd',
   1411             'NoEntryPoint': 'true',
   1412             'OptimizeReferences': 'true',
   1413             'OutputFile': '$(OutDir)$(ProjectName)2.exe',
   1414             'PerUserRedirection': 'true',
   1415             'Profile': 'true',
   1416             'ProfileGuidedDatabase': '$(TargetDir)$(TargetName).pgdd',
   1417             'ProgramDatabaseFile': 'Flob.pdb',
   1418             'RandomizedBaseAddress': 'false',
   1419             'RegisterOutput': 'true',
   1420             'SetChecksum': 'false',
   1421             'ShowProgress': 'LinkVerbose',
   1422             'StackCommitSize': '15',
   1423             'StackReserveSize': '14',
   1424             'StripPrivateSymbols': 'd3',
   1425             'SubSystem': 'Console',
   1426             'SupportUnloadOfDelayLoadedDLL': 'true',
   1427             'SuppressStartupBanner': 'false',
   1428             'SwapRunFromCD': 'true',
   1429             'SwapRunFromNET': 'true',
   1430             'TargetMachine': 'MachineX86',
   1431             'TerminalServerAware': 'false',
   1432             'TurnOffAssemblyGeneration': 'true',
   1433             'TypeLibraryFile': 'f3',
   1434             'TypeLibraryResourceID': '12',
   1435             'UACExecutionLevel': 'RequireAdministrator',
   1436             'UACUIAccess': 'true',
   1437             'Version': '333'},
   1438         'ResourceCompile': {
   1439             'AdditionalIncludeDirectories': 'f3',
   1440             'AdditionalOptions': '/more3',
   1441             'Culture': '0x0c0c',
   1442             'IgnoreStandardIncludePath': 'true',
   1443             'PreprocessorDefinitions': '_UNICODE;UNICODE2',
   1444             'ResourceOutputFileName': '$(IntDir)%(Filename)3.res',
   1445             'ShowProgress': 'true'},
   1446         'Manifest': {
   1447             'AdditionalManifestFiles': 'sfsdfsd',
   1448             'AdditionalOptions': 'afdsdafsd',
   1449             'AssemblyIdentity': 'sddfdsadfsa',
   1450             'ComponentFileName': 'fsdfds',
   1451             'GenerateCatalogFiles': 'true',
   1452             'InputResourceManifests': 'asfsfdafs',
   1453             'OutputManifestFile': '$(TargetPath).manifestdfs',
   1454             'RegistrarScriptFile': 'sdfsfd',
   1455             'ReplacementsFile': 'sdffsd',
   1456             'SuppressStartupBanner': 'false',
   1457             'TypeLibraryFile': 'sfsd',
   1458             'UpdateFileHashes': 'true',
   1459             'UpdateFileHashesSearchPath': 'sfsd',
   1460             'VerboseOutput': 'true'},
   1461         'ProjectReference': {
   1462             'LinkLibraryDependencies': 'false',
   1463             'UseLibraryDependencyInputs': 'true'},
   1464         '': {
   1465             'EmbedManifest': 'false',
   1466             'GenerateManifest': 'false',
   1467             'IgnoreImportLibrary': 'true',
   1468             'LinkIncremental': ''
   1469             },
   1470         'ManifestResourceCompile': {
   1471             'ResourceOutputFileName':
   1472             '$(IntDir)$(TargetFileName).embed.manifest.resfdsf'}
   1473         }
   1474     actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
   1475         msvs_settings,
   1476         self.stderr)
   1477     self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
   1478     self._ExpectedWarnings([])
   1479 
   1480 
   1481 if __name__ == '__main__':
   1482   unittest.main()
   1483