| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:file/memory.dart'; |
| import 'package:file_testing/file_testing.dart'; |
| import 'package:flutter_tools/src/base/file_system.dart'; |
| import 'package:flutter_tools/src/windows/visual_studio_project.dart'; |
| |
| import '../../src/common.dart'; |
| |
| void main() { |
| group('Visual Studio Project', () { |
| String generateProjectContents({String guid, String name}) { |
| // A bare-bones project. |
| return ''' |
| <?xml version="1.0" encoding="utf-8"?> |
| <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| <ItemGroup Label="ProjectConfigurations"> |
| <ProjectConfiguration Include="Debug|x64"> |
| <Configuration>Debug</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Release|x64"> |
| <Configuration>Release</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| </ItemGroup> |
| <PropertyGroup Label="Globals"> |
| <VCProjectVersion>15.0</VCProjectVersion> |
| ${guid == null ? '' : '<ProjectGuid>{$guid}</ProjectGuid>'} |
| ${name == null ? '' : '<ProjectName>$name</ProjectName>'} |
| <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
| </PropertyGroup> |
| <Import Project="\$(VCTargetsPath)\\Microsoft.Cpp.Default.props" /> |
| <PropertyGroup Label="Configuration"> |
| <PlatformToolset>v142</PlatformToolset> |
| </PropertyGroup> |
| <Import Project="\$(VCTargetsPath)\\Microsoft.Cpp.props" /> |
| <ImportGroup Label="ExtensionSettings"> |
| </ImportGroup> |
| <ImportGroup Label="Shared"> |
| </ImportGroup> |
| <ImportGroup Label="PropertySheets" /> |
| <PropertyGroup Label="UserMacros" /> |
| <PropertyGroup /> |
| <ItemDefinitionGroup /> |
| <ItemGroup> |
| </ItemGroup> |
| <Import Project="\$(VCTargetsPath)\\Microsoft.Cpp.targets" /> |
| <ImportGroup Label="ExtensionTargets"> |
| </ImportGroup> |
| </Project>'''; |
| } |
| |
| test('Property extraction works on a simple vcxproj', () async { |
| final FileSystem fileSystem = MemoryFileSystem(); |
| const String guid = '017C4BAC-FEBA-406D-8A2C-3099FFE9D811'; |
| const String name = 'Test'; |
| final File projectFile = fileSystem.file('aproject.vcxproj'); |
| projectFile.writeAsStringSync(generateProjectContents(guid: guid, name: name)); |
| |
| final VisualStudioProject project = VisualStudioProject(projectFile, fileSystem: fileSystem); |
| expect(project.formatUnderstood, true); |
| expect(project.guid, guid); |
| expect(project.name, name); |
| }); |
| |
| test('Missing GUID returns null', () async { |
| final FileSystem fileSystem = MemoryFileSystem(); |
| final File projectFile = fileSystem.file('aproject.vcxproj'); |
| projectFile.writeAsStringSync(generateProjectContents()); |
| |
| final VisualStudioProject project = VisualStudioProject(projectFile, fileSystem: fileSystem); |
| expect(project.formatUnderstood, true); |
| expect(project.guid, null); |
| }); |
| |
| test('Missing project name uses filename', () async { |
| final FileSystem fileSystem = MemoryFileSystem(); |
| final File projectFile = fileSystem.file('aproject.vcxproj'); |
| projectFile.writeAsStringSync(generateProjectContents()); |
| |
| final VisualStudioProject project = VisualStudioProject(projectFile, fileSystem: fileSystem); |
| expect(project.formatUnderstood, true); |
| expect(project.name, 'aproject'); |
| }); |
| |
| test('Unknown file contents creates an object, and return false for formatUnderstood', () async { |
| final FileSystem fileSystem = MemoryFileSystem(); |
| final File projectFile = fileSystem.file('aproject.vcxproj'); |
| projectFile.writeAsStringSync('This is not XML!'); |
| |
| final VisualStudioProject project = VisualStudioProject(projectFile, fileSystem: fileSystem); |
| expect(project.formatUnderstood, false); |
| }); |
| |
| test('Missing project file throws on creation', () async { |
| final FileSystem fileSystem = MemoryFileSystem(); |
| final File projectFile = fileSystem.file('aproject.vcxproj'); |
| |
| expect(() => VisualStudioProject(projectFile, fileSystem: fileSystem), throwsFileSystemException()); |
| }); |
| }); |
| } |