public void throws_when_argument_string_is_invalid()
            {
                var builder = new ChangesEnRouteRecordBuilder();

                Assert.Throws<ArgumentNullException>(() => builder.BuildRecord(null));
                Assert.Throws<ArgumentNullException>(() => builder.BuildRecord(string.Empty));
                Assert.Throws<ArgumentNullException>(() => builder.BuildRecord(" \t"));
            }
            public void returns_expected_result()
            {
                var builder = new ChangesEnRouteRecordBuilder();

                string record = "CRHULL    XX1J22    111808920 DMUS   075      S S                               ";

                var result = builder.BuildRecord(record);

                var expectedResult = new ChangesEnRouteRecord
                {
                    Tiploc = "HULL",
                    TiplocSuffix = string.Empty,
                    Category = "XX",
                    TrainIdentity = "1J22",
                    HeadCode = string.Empty,
                    CourseIndicator = "1",
                    ServiceCode = "11808920",
                    PortionId = string.Empty,
                    PowerType = "DMU",
                    TimingLoad = "S",
                    Speed = "075",
                    OperatingCharacteristics = string.Empty,
                    SeatingClass = "S",
                    Sleepers = string.Empty,
                    Reservations = "S",
                    ConnectionIndicator = string.Empty,
                    CateringCode = string.Empty,
                    ServiceBranding = string.Empty,
                    UicCode = string.Empty,
                    Rsid = string.Empty
                };

                Assert.AreEqual(expectedResult.Tiploc, result.Tiploc);
                Assert.AreEqual(expectedResult.TiplocSuffix, result.TiplocSuffix);
                Assert.AreEqual(expectedResult.Category, result.Category);
                Assert.AreEqual(expectedResult.TrainIdentity, result.TrainIdentity);
                Assert.AreEqual(expectedResult.HeadCode, result.HeadCode);
                Assert.AreEqual(expectedResult.CourseIndicator, result.CourseIndicator);
                Assert.AreEqual(expectedResult.ServiceCode, result.ServiceCode);
                Assert.AreEqual(expectedResult.PortionId, result.PortionId);
                Assert.AreEqual(expectedResult.PowerType, result.PowerType);
                Assert.AreEqual(expectedResult.TimingLoad, result.TimingLoad);
                Assert.AreEqual(expectedResult.Speed, result.Speed);
                Assert.AreEqual(expectedResult.OperatingCharacteristics, result.OperatingCharacteristics);
                Assert.AreEqual(expectedResult.SeatingClass, result.SeatingClass);
                Assert.AreEqual(expectedResult.Sleepers, result.Sleepers);
                Assert.AreEqual(expectedResult.Reservations, result.Reservations);
                Assert.AreEqual(expectedResult.ConnectionIndicator, result.ConnectionIndicator);
                Assert.AreEqual(expectedResult.CateringCode, result.CateringCode);
                Assert.AreEqual(expectedResult.ServiceBranding, result.ServiceBranding);
                Assert.AreEqual(expectedResult.UicCode, result.UicCode);
                Assert.AreEqual(expectedResult.Rsid, result.Rsid);
            }