// 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/file.dart'; import 'package:file/memory.dart'; import 'package:flutter_tools/src/project.dart'; import '../../src/common.dart'; const String kExampleManifest = r''' <?xml version="1.0" encoding="utf-8"?> <Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp"> <Identity Name="@PACKAGE_GUID@" Publisher="CN=CMake Test Cert" Version="2.3.1.4" /> <mp:PhoneIdentity PhoneProductId="@PACKAGE_GUID@" PhonePublisherId="00000000-0000-0000-0000-000000000000"/> <Properties> <DisplayName>@SHORT_NAME@</DisplayName> <PublisherDisplayName>CMake Test Cert</PublisherDisplayName> <Logo>Assets/StoreLogo.png</Logo> </Properties> <Dependencies> <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.65535.65535" /> </Dependencies> <Resources> <Resource Language="x-generate" /> </Resources> <Applications> <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="@SHORT_NAME@.App"> <uap:VisualElements DisplayName="@SHORT_NAME@" Description="@SHORT_NAME@" BackgroundColor="#336699" Square150x150Logo="Assets/Square150x150Logo.png" Square44x44Logo="Assets/Square44x44Logo.png" > <uap:SplashScreen Image="Assets/SplashScreen.png" /> </uap:VisualElements> </Application> </Applications> <Capabilities> <Capability Name="internetClientServer"/> <Capability Name="internetClient"/> <Capability Name="privateNetworkClientServer"/> <Capability Name="codeGeneration"/></Capabilities> </Package> '''; void main() { testWithoutContext('Project can parse the app version from the appx manifest', () { final FileSystem fileSystem = MemoryFileSystem.test(); fileSystem.file('winuwp/runner_uwp/appxmanifest.in') ..createSync(recursive: true) ..writeAsStringSync(kExampleManifest); final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); expect(flutterProject.windowsUwp.packageVersion, '2.3.1.4'); }); testWithoutContext('Project returns null if appx manifest does not exist', () { final FileSystem fileSystem = MemoryFileSystem.test(); final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); expect(flutterProject.windowsUwp.packageVersion, null); }); testWithoutContext('Project throws a tool exit if appxmanifest is not valid xml', () { final FileSystem fileSystem = MemoryFileSystem.test(); fileSystem.file('winuwp/runner_uwp/appxmanifest.in') ..createSync(recursive: true) ..writeAsStringSync('['); final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); expect(() => flutterProject.windowsUwp.packageVersion, throwsToolExit()); }); testWithoutContext('Can parse the PACKAGE_GUID from the Cmake manifest', () { final FileSystem fileSystem = MemoryFileSystem.test(); fileSystem.file('winuwp/runner_uwp/CMakeLists.txt') ..createSync(recursive: true) ..writeAsStringSync(r''' cmake_minimum_required (VERSION 3.8) set(CMAKE_SYSTEM_NAME WindowsStore) set(CMAKE_SYSTEM_VERSION 10.0) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED YES) include(CMakePrintHelpers) project ("TestBedUWP") set(APP_MANIFEST_NAME Package.appxmanifest) set(APP_MANIFEST_TARGET_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${APP_MANIFEST_NAME}) set(SHORT_NAME ${BINARY_NAME}) set(PACKAGE_GUID "F941A77F-8AE1-4E3E-9611-68FBD3C62AE8") '''); final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); expect(flutterProject.windowsUwp.packageGuid, 'F941A77F-8AE1-4E3E-9611-68FBD3C62AE8'); }); testWithoutContext('Returns null if the PACKAGE_GUID cannot be found in the Cmake file', () { final FileSystem fileSystem = MemoryFileSystem.test(); fileSystem.file('winuwp/runner_uwp/CMakeLists.txt') ..createSync(recursive: true) ..writeAsStringSync(r''' cmake_minimum_required (VERSION 3.8) set(CMAKE_SYSTEM_NAME WindowsStore) set(CMAKE_SYSTEM_VERSION 10.0) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED YES) include(CMakePrintHelpers) project ("TestBedUWP") set(APP_MANIFEST_NAME Package.appxmanifest) set(APP_MANIFEST_TARGET_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${APP_MANIFEST_NAME}) set(SHORT_NAME ${BINARY_NAME}) '''); final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); expect(flutterProject.windowsUwp.packageGuid, null); }); }