Ejemplo n.º 1
0
        public void CompilerVisitRuntimeType()
        {
            var package = new Package();
            // ReSharper disable once UnusedVariable - we need a package session to compile
            var packageSession = new PackageSession(package);
            var otherAssets    = new List <AssetItem>
            {
                new AssetItem("contentRB", new MyAssetContentType(0), package),
                new AssetItem("contentRA", new MyAssetContentType(1), package),
                new AssetItem("content0B", new MyAssetContentType(2), package),
                new AssetItem("content0M", new MyAssetContentType(3), package),
                new AssetItem("content0A", new MyAssetContentType(4), package),
                new AssetItem("content1B", new MyAssetContentType(5), package),
                new AssetItem("content1M", new MyAssetContentType(6), package),
                new AssetItem("content1A", new MyAssetContentType(7), package),
                new AssetItem("content2B", new MyAssetContentType(8), package),
                new AssetItem("content2M", new MyAssetContentType(9), package),
                new AssetItem("content2A", new MyAssetContentType(10), package),
                new AssetItem("content3B", new MyAssetContentType(11), package),
                new AssetItem("content3M", new MyAssetContentType(12), package),
                new AssetItem("content3A", new MyAssetContentType(13), package),
                new AssetItem("content4B", new MyAssetContentType(14), package),
                new AssetItem("content4M", new MyAssetContentType(15), package),
                new AssetItem("content4A", new MyAssetContentType(16), package),
            };

            var assetToVisit = new MyAsset1();

            assetToVisit.Before = AttachedReferenceManager.CreateProxyObject <MyContentType>(otherAssets[0].Id, otherAssets[0].Location);
            assetToVisit.Zafter = AttachedReferenceManager.CreateProxyObject <MyContentType>(otherAssets[1].Id, otherAssets[1].Location);
            assetToVisit.RuntimeTypes.Add(CreateRuntimeType(otherAssets[2], otherAssets[3], otherAssets[4]));
            assetToVisit.RuntimeTypes.Add(CreateRuntimeType(otherAssets[5], otherAssets[6], otherAssets[7]));
            assetToVisit.RuntimeTypes.Add(CreateRuntimeType(otherAssets[8], otherAssets[9], otherAssets[10]));
            assetToVisit.RuntimeTypes.Add(CreateRuntimeType(otherAssets[11], otherAssets[12], otherAssets[13]));
            assetToVisit.RuntimeTypes.Add(CreateRuntimeType(otherAssets[14], otherAssets[15], otherAssets[16]));
            assetToVisit.RuntimeTypes[0].A = assetToVisit.RuntimeTypes[1];
            assetToVisit.RuntimeTypes[0].B = assetToVisit.RuntimeTypes[2];
            assetToVisit.RuntimeTypes[1].A = assetToVisit.RuntimeTypes[3];
            assetToVisit.RuntimeTypes[1].B = assetToVisit.RuntimeTypes[4];

            otherAssets.ForEach(x => package.Assets.Add(x));
            var assetItem = new AssetItem("asset", assetToVisit, package);

            package.Assets.Add(assetItem);
            package.RootAssets.Add(new AssetReference(assetItem.Id, assetItem.Location));

            // Create context
            var context = new AssetCompilerContext {
                CompilationContext = typeof(AssetCompilationContext)
            };

            // Builds the project
            var assetBuilder = new PackageCompiler(new RootPackageAssetEnumerator(package));

            context.Properties.Set(BuildAssetNode.VisitRuntimeTypes, true);
            var assetBuildResult = assetBuilder.Prepare(context);

            Assert.AreEqual(16, assetBuildResult.BuildSteps.Count);
        }
Ejemplo n.º 2
0
        public void TestRuntime()
        {
            var package = new Package();
            // ReSharper disable once UnusedVariable - we need a package session to compile
            var packageSession = new PackageSession(package);
            var otherAssets    = new List <AssetItem>
            {
                new AssetItem("asset11", new MyAsset11(), package),
                new AssetItem("asset12", new MyAsset12(), package),
                new AssetItem("asset13", new MyAsset13(), package),
            };

            otherAssets.ForEach(x => package.Assets.Add(x));

            var compileAssetReference = new MyAsset4
            {
                CompileAssetReference   = CreateRef <MyContent11>(otherAssets[0]),
                CompileContentReference = CreateRef <MyContent12>(otherAssets[1]),
                CompileRuntimeReference = CreateRef <MyContent13>(otherAssets[2]),
            };
            var assetItem = new AssetItem("asset4", compileAssetReference, package);

            package.Assets.Add(assetItem);

            var asset = new MyAsset1 {
                CompileAssetReference = CreateRef <MyContent2>(assetItem)
            };

            assetItem = new AssetItem("asset1", asset, package);
            package.Assets.Add(assetItem);
            package.RootAssets.Add(new AssetReference(assetItem.Id, assetItem.Location));

            // Create context
            var context = new AssetCompilerContext {
                CompilationContext = typeof(AssetCompilationContext)
            };

            // Builds the project
            Exception ex = null;

            MyAsset1Compiler.AssertFunc = (url, ass, pkg) =>
            {
                AssertInThread(ref ex, () => Assert.AreEqual(1, TestCompilerBase.CompiledAssets.Count));
                AssertInThread(ref ex, () => Assert.AreEqual(compileAssetReference.Id, TestCompilerBase.CompiledAssets.First().Id));
            };

            var assetBuilder     = new PackageCompiler(new RootPackageAssetEnumerator(package));
            var assetBuildResult = assetBuilder.Prepare(context);

            // Since MyAsset4 is a Runtime reference, it should be compiled, so we should have 2 asset (MyAsset1 and MyAsset4) to compile.
            Assert.AreEqual(2, assetBuildResult.BuildSteps.Count);
            var builder = new Builder(GlobalLogger.GetLogger("Test"), "", "", "");

            builder.Root.Add(assetBuildResult.BuildSteps);
            builder.Run(Builder.Mode.Build, false);
            RethrowAssertsFromThread(ex);
        }
Ejemplo n.º 3
0
        public void TestCompileAsset()
        {
            var package = new Package();
            // ReSharper disable once UnusedVariable - we need a package session to compile
            var packageSession = new PackageSession(package);
            var otherAssets    = new List <AssetItem>
            {
                new AssetItem("asset5", new MyAsset5(), package),
                new AssetItem("asset6", new MyAsset6(), package),
                new AssetItem("asset7", new MyAsset7(), package),
            };

            otherAssets.ForEach(x => package.Assets.Add(x));

            var compileAssetReference = new MyAsset2
            {
                CompileAssetReference   = CreateRef <MyContent5>(otherAssets[0]),
                CompileContentReference = CreateRef <MyContent6>(otherAssets[1]),
                CompileRuntimeReference = CreateRef <MyContent7>(otherAssets[2]),
            };
            var assetItem = new AssetItem("asset2", compileAssetReference, package);

            package.Assets.Add(assetItem);

            var asset = new MyAsset1 {
                CompileAssetReference = CreateRef <MyContent2>(assetItem)
            };

            assetItem = new AssetItem("asset1", asset, package);
            package.Assets.Add(assetItem);
            package.RootAssets.Add(new AssetReference(assetItem.Id, assetItem.Location));

            // Create context
            var context = new AssetCompilerContext {
                CompilationContext = typeof(AssetCompilationContext)
            };
            // Builds the project
            Exception ex = null;

            MyAsset1Compiler.AssertFunc = (url, ass, pkg) =>
            {
                // Nothing must have been compiled before
                AssertInThread(ref ex, () => Assert.Empty(TestCompilerBase.CompiledAssets));
            };

            var assetBuilder     = new PackageCompiler(new RootPackageAssetEnumerator(package));
            var assetBuildResult = assetBuilder.Prepare(context);

            // Since MyAsset2 is a CompileAsset reference, it should not be compiled, so we should have only 1 asset (MyAsset1) to compile.
            Assert.Equal(1, assetBuildResult.BuildSteps.Count);
            var builder = new Builder(GlobalLogger.GetLogger("Test"), "", "");

            builder.Root.Add(assetBuildResult.BuildSteps);
            builder.Run(Builder.Mode.Build, false);
            RethrowAssertsFromThread(ex);
        }