Files
sbox-public/engine/Sandbox.Test/Package/PackageLoader.CodeArchive.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

63 lines
2.0 KiB
C#

namespace Packages;
partial class PackageLoader
{
/// <summary>
/// We should be able to download a package with cll files and compile them successfully
/// </summary>
[TestMethod]
[DataRow( "facepunch.testbed" )]
[DataRow( "softsplit.donut" )]
[DataRow( "jeraldsjunk.carexplorer" )]
//[DataRow( "facepunch.hc1" )]
[DataRow( "carsonk.instagib" )]
[DataRow( "facepunch.pool" )]
[DataRow( "baks.func" )]
[DataRow( "facepunch.sandbox" )]
[DataRow( "facepunch.mazing" )] // todo - add hundreds of these
public async Task CompileCodeArchive( string packageName )
{
var packageLoader = new Sandbox.PackageLoader( "Test", GetType().Assembly );
var enroller = packageLoader.CreateEnroller( "test-enroller" );
var packageInfo = await Package.FetchAsync( packageName, false );
await packageInfo.Revision.DownloadManifestAsync();
// get all the code archives
var codeArchives = packageInfo.Revision.Manifest.Files.Where( x => x.Path.EndsWith( ".cll" ) ).ToArray();
Assert.AreNotEqual( 0, codeArchives.Length, "We have package files mounted" );
var group = new CompileGroup( packageName );
foreach ( var file in codeArchives )
{
System.Console.WriteLine( $"Downloading {file.Url}" );
// Download it successfully
var bytes = await Sandbox.Utility.Web.GrabFile( file.Url, default );
Assert.AreNotEqual( null, bytes );
System.Console.WriteLine( $" .. finished {bytes.Length}b (expecting {file.Size}b)" );
Assert.AreEqual( file.Size, bytes.Length );
// Deserialize to a code archive
var archive = new CodeArchive( bytes );
// Create a compiler for it
var compiler = group.GetOrCreateCompiler( archive.CompilerName );
compiler.UpdateFromArchive( archive );
}
// Compile that bad boy
await group.BuildAsync();
System.Console.WriteLine( $"Build result: {group.BuildResult.Success}" );
System.Console.WriteLine( $"{group.BuildResult.BuildDiagnosticsString()}" );
// Should be successful
Assert.IsTrue( group.BuildResult.Success );
}
}