Example #1
0
        private static Job WithCore(this Job job, Action <Job> updateCallback)
        {
            var hasId = job.HasValue(Job.IdCharacteristic);

            var newJob = hasId ? new Job(job.Id, job) : new Job(job);

            updateCallback(newJob);
            return(newJob);
        }
        public static void Test02Modify()
        {
            var j = new Job("SomeId");

            Equal(j.Id, "SomeId");
            Equal(j.Env.Platform, Platform.AnyCpu);
            Equal(j.Run.LaunchCount, 0);

            False(j.HasValue(EnvMode.PlatformCharacteristic));
            False(j.Env.HasValue(EnvMode.PlatformCharacteristic));
            False(j.HasValue(RunMode.LaunchCountCharacteristic));
            False(j.Run.HasValue(RunMode.LaunchCountCharacteristic));

            AssertProperties(j, "Default");
            AssertProperties(j.Env, "Default");

            // 1. change values
            j.Env.Platform = Platform.X64;
            j.Run.LaunchCount = 1;

            Equal(j.Id, "SomeId");
            Equal(j.Env.Platform, Platform.X64);
            Equal(j.Run.LaunchCount, 1);

            True(j.HasValue(EnvMode.PlatformCharacteristic));
            True(j.Env.HasValue(EnvMode.PlatformCharacteristic));
            True(j.HasValue(RunMode.LaunchCountCharacteristic));
            True(j.Run.HasValue(RunMode.LaunchCountCharacteristic));

            AssertProperties(j, "Platform=X64, LaunchCount=1");
            AssertProperties(j.Env, "Platform=X64");
            AssertProperties(j.Run, "LaunchCount=1");

            // 2. reset Env mode (hack via Characteristic setting)
            var oldEnv = j.Env;
            Job.EnvCharacteristic[j] = new EnvMode();

            Equal(j.Id, "SomeId");
            Equal(j.Env.Platform, Platform.AnyCpu);
            Equal(j.Run.LaunchCount, 1);

            False(j.HasValue(EnvMode.PlatformCharacteristic));
            False(j.Env.HasValue(EnvMode.PlatformCharacteristic));
            True(j.HasValue(RunMode.LaunchCountCharacteristic));
            True(j.Run.HasValue(RunMode.LaunchCountCharacteristic));

            AssertProperties(j, "LaunchCount=1");
            AssertProperties(j.Env, "Default");
            AssertProperties(j.Run, "LaunchCount=1");

            // 2.1 proof that oldEnv was the same
            Equal(j.Id, "SomeId");
            Equal(oldEnv.Platform, Platform.X64);
            True(oldEnv.HasValue(EnvMode.PlatformCharacteristic));
            Equal(oldEnv.Id, "Platform=X64");

            // 3. update Env mode (hack via Characteristic setting)
            Job.EnvCharacteristic[j] = new EnvMode()
            {
                Platform = Platform.X86
            };

            Equal(j.Id, "SomeId");
            Equal(j.Env.Platform, Platform.X86);
            Equal(j.Run.LaunchCount, 1);

            True(j.HasValue(EnvMode.PlatformCharacteristic));
            True(j.Env.HasValue(EnvMode.PlatformCharacteristic));
            True(j.HasValue(RunMode.LaunchCountCharacteristic));
            True(j.Run.HasValue(RunMode.LaunchCountCharacteristic));

            AssertProperties(j, "Platform=X86, LaunchCount=1");
            AssertProperties(j.Env, "Platform=X86");
            AssertProperties(j.Run, "LaunchCount=1");

            // 4. Freeze-unfreeze:
            j = j.Freeze().UnfreezeCopy();

            Equal(j.Id, "Platform=X86, LaunchCount=1");
            Equal(j.Env.Platform, Platform.X86);
            Equal(j.Run.LaunchCount, 1);

            True(j.HasValue(EnvMode.PlatformCharacteristic));
            True(j.Env.HasValue(EnvMode.PlatformCharacteristic));
            True(j.HasValue(RunMode.LaunchCountCharacteristic));
            True(j.Run.HasValue(RunMode.LaunchCountCharacteristic));

            AssertProperties(j, "Platform=X86, LaunchCount=1");
            AssertProperties(j.Env, "Platform=X86");
            AssertProperties(j.Run, "LaunchCount=1");

            // 5. Test .With extensions
            j = j.Freeze()
                .WithId("NewId");
            Equal(j.Id, "NewId"); // id set

            j = j.Freeze()
                .With(Platform.X64)
                .WithLaunchCount(2);

            Equal(j.Id, "Platform=X64, LaunchCount=2"); // id lost
            Equal(j.Env.Platform, Platform.X64);
            Equal(j.Run.LaunchCount, 2);

            True(j.HasValue(EnvMode.PlatformCharacteristic));
            True(j.Env.HasValue(EnvMode.PlatformCharacteristic));
            True(j.HasValue(RunMode.LaunchCountCharacteristic));
            True(j.Run.HasValue(RunMode.LaunchCountCharacteristic));

            AssertProperties(j, "Platform=X64, LaunchCount=2");
            AssertProperties(j.Env, "Platform=X64");
            AssertProperties(j.Run, "LaunchCount=2");

        }
        public static void Test03IdDoesNotFlow()
        {
            var j = new Job(EnvMode.LegacyJitX64, RunMode.Long); // id will not flow, new Job
            False(j.HasValue(JobMode.IdCharacteristic));
            False(j.Env.HasValue(JobMode.IdCharacteristic));

            Job.EnvCharacteristic[j] = EnvMode.LegacyJitX86.UnfreezeCopy(); // id will not flow
            False(j.HasValue(JobMode.IdCharacteristic));
            False(j.Env.HasValue(JobMode.IdCharacteristic));

            var c = new CharacteristicSet(EnvMode.LegacyJitX64, RunMode.Long); // id will not flow, new CharacteristicSet
            False(c.HasValue(JobMode.IdCharacteristic));

            Job.EnvCharacteristic[c] = EnvMode.LegacyJitX86.UnfreezeCopy(); // id will not flow
            False(c.HasValue(JobMode.IdCharacteristic));

            JobMode.IdCharacteristic[c] = "MyId"; // id set explicitly
            Equal(c.Id, "MyId");

            j = new Job("MyId", EnvMode.LegacyJitX64, RunMode.Long); // id set explicitly
            Equal(j.Id, "MyId");
            Equal(j.Env.Id, "MyId");

            Job.EnvCharacteristic[j] = EnvMode.LegacyJitX86.UnfreezeCopy(); // id will not flow
            Equal(j.Id, "MyId");
            Equal(j.Env.Id, "MyId");

            j = j.With(Jit.RyuJit);  // id will not flow
            False(j.HasValue(JobMode.IdCharacteristic));
        }