예제 #1
0
        public void Add_ToEmpty()
        {
            // Arrange
            var timeline1 = TimeBuilder.Empty;
            var timeline2 = TimeBuilder.From(2008, 1, 1).To(2008, 1, 3).Payload("Craft", 1.5m).Timeline;

            // Act
            var actual = (timeline1 + timeline2).GetIntervals();

            // Assert
            var expected = new []
            {
                TimeBuilder.From(2008, 1, 1).To(2008, 1, 3).Payload("Craft", 1.5m).Interval,
            };

            Assert.That(TimeMath.Equals(expected, actual), Is.True);
        }
예제 #2
0
        public void Add_Before()
        {
            // Arrange
            var timeline1 = new TimelinePayload <KeyCountPayload>(new LocalInterval(new LocalDateTime(2008, 1, 4, 0, 0), new LocalDateTime(2008, 1, 8, 0, 0)).AddPayload(new KeyCountPayload("Craft", 1.5m)));
            var timeline2 = new TimelinePayload <KeyCountPayload>(new LocalInterval(new LocalDateTime(2008, 1, 1, 0, 0), new LocalDateTime(2008, 1, 3, 0, 0)).AddPayload(new KeyCountPayload("Craft", 1.5m)));

            // Act
            var actual = (timeline1 + timeline2).GetIntervals();

            // Assert
            var expected = new LocalInterval[]
            {
                TimeBuilder.From(2008, 1, 1).To(2008, 1, 3).Payload("Craft", 1.5m).Interval,
                TimeBuilder.From(2008, 1, 4).To(2008, 1, 8).Payload("Craft", 1.5m).Interval,
            };

            Assert.That(TimeMath.Equals(expected, actual), Is.True);
        }
        public override Time ReadJson(JsonReader reader, Type objectType, Time existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            var builder = new TimeBuilder();

            if (reader.TokenType == JsonToken.StartObject)
            {
                while (reader.Read() && reader.TokenType != JsonToken.EndObject)
                {
                    if (reader.TryReadPropertyAsNullable(nameof(Time.TotalSeconds), serializer, e => e.ReadAsNumber(), out var totalSeconds))
                    {
                        builder.TotalSeconds = totalSeconds;
                    }
                    else if (reader.TryReadPropertyAsNullable(nameof(Time.Hours), serializer, e => e.ReadAsInt32(), out var hours))
                    {
                        builder.Hours = hours;
                    }
                    else if (reader.TryReadPropertyAsNullable(nameof(Time.Minutes), serializer, e => e.ReadAsInt32(), out var minutes))
                    {
                        builder.Minutes = minutes;
                    }
                    else if (reader.TryReadPropertyAsNullable(nameof(Time.Seconds), serializer, e => e.ReadAsNumber(), out var seconds))
                    {
                        builder.Seconds = seconds;
                    }
                    else if (reader.TryReadPropertyAsNullable(nameof(Time.IsNegative), serializer, e => e.ReadAsBoolean(), out var isNegative))
                    {
                        builder.IsNegative = isNegative;
                    }
                }
            }

            if (!builder.TryBuild(out var result))
            {
                throw new InvalidOperationException($"Could not read {typeof(Time)} from JSON.");
            }

            return(result);
        }
        public void Example_MoreComplex()
        {
            var alicesEmployment = TimeBuilder.From(2004, 11, 1).TimeZone(LocalTimeZone).Payload("DEV", 1).Timeline;

            // var localHolidays = new Holidays(LocalTimeZone, EnricoApi.Country.NewZealand, EnricoApi.Region.Auckland);
            //var jasonsTimeline = alicesEmployment & JasonsWorkPattern() & ~localHolidays | JasonsUnscheduled();

            var alicesTimeline = alicesEmployment & AlicesWorkPattern() | AlicesUnscheduledHours();

            LogTimeline("Alice's Timeline (PST)", alicesTimeline, LocalTimeZone);

            var billsEmployment =
                TimeBuilder.From(1995, 11, 1).TimeZone(NewYorkTimeZone).Payload("DEV", 1).Timeline +
                TimeBuilder.From(2000, 11, 1).TimeZone(NewYorkTimeZone).Payload("EXEC", 1).Timeline;

            var billsTimeline = billsEmployment & BillsWorkPattern();

            LogTimeline("Bill's Timeline (EST)", billsTimeline, NewYorkTimeZone);

            var meetingTimes = alicesTimeline & billsTimeline;

            LogTimeline("Meeting Times (PST)", meetingTimes, LocalTimeZone);
            LogTimeline("Meeting Times (EST)", meetingTimes, NewYorkTimeZone);
        }