public FakeDbaseSchema() { Fields = new[] { DbaseField.CreateInt32Field(new DbaseFieldName(nameof(Id)), new DbaseFieldLength(4)) }; }
// shared by dbase int16, nullable int16 public static int?ReadAsNullableInt32(this BinaryReader reader, DbaseField field) { int?result = default; if (reader.PeekChar() == '\0') { var read = reader.ReadBytes(field.Length.ToInt32()); if (read.Length != field.Length.ToInt32()) { throw new EndOfStreamException( $"Unable to read beyond the end of the stream. Expected stream to have {field.Length.ToInt32()} byte(s) available but only found {read.Length} byte(s) as part of reading field {field.Name.ToString()}." ); } } else { var unpadded = reader.ReadLeftPaddedString(field.Name.ToString(), field.Length.ToInt32(), ' '); result = int.TryParse(unpadded, DbaseNumber.IntegerNumberStyle, CultureInfo.InvariantCulture, out var parsed) ? (int?)parsed : default; } return(result); }
public static void WriteAsNullableDecimal(this BinaryWriter writer, DbaseField field, NumberFormatInfo provider, decimal?value) { if (value.HasValue) { var unpadded = value.Value.ToString("F", provider); if (unpadded.Length < field.Length.ToInt32() && field.DecimalCount.ToInt32() > 0) { // Pad with decimal zeros if space left. var parts = unpadded.Split(provider.NumberDecimalSeparator.Single()); if (parts.Length == 2 && parts[1].Length < field.DecimalCount.ToInt32()) { unpadded = string.Concat( unpadded, new string( '0', field.DecimalCount.ToInt32() - parts[1].Length ) ); } } writer.WriteLeftPaddedString(unpadded, field.Length.ToInt32(), ' '); } else { writer.Write(new string(' ', field.Length.ToInt32()).ToCharArray()); // or writer.Write(new byte[Field.Length]); // to determine } }
// shared by dbase decimal, nullable decimal public static decimal?ReadAsNullableDecimal(this BinaryReader reader, DbaseField field, NumberFormatInfo provider) { decimal?result = default; if (reader.PeekChar() == '\0') { var read = reader.ReadBytes(field.Length.ToInt32()); if (read.Length != field.Length.ToInt32()) { throw new EndOfStreamException( $"Unable to read beyond the end of the stream. Expected stream to have {field.Length.ToInt32()} byte(s) available but only found {read.Length} byte(s) as part of reading field {field.Name.ToString()}." ); } } else { var unpadded = reader.ReadLeftPaddedString(field.Name.ToString(), field.Length.ToInt32(), ' '); result = decimal.TryParse(unpadded, DbaseNumber.DoubleNumberStyle, provider, out var parsed) ? (decimal?)parsed : default; } return(result); }
public DbaseLogical(DbaseField field, bool?value = null) : base(field) { if (field == null) { throw new ArgumentNullException(nameof(field)); } if (field.FieldType != DbaseFieldType.Logical) { throw new ArgumentException( $"The field {field.Name}'s type must be logical to use it as a logical field.", nameof(field)); } if (field.DecimalCount.ToInt32() != 0) { throw new ArgumentException( $"The logical field {field.Name}'s decimal count must be 0 to use it as a logical field.", nameof(field)); } if (field.Length.ToInt32() != 1) { throw new ArgumentException( $"The logical field {field.Name}'s length must be 1 to use it as a logical field.", nameof(field)); } Value = value; }
public FakeDbaseSchema() { Fields = new[] { DbaseField.CreateNumberField(new DbaseFieldName(nameof(Id)), new DbaseFieldLength(4), new DbaseDecimalCount(0)) }; }
public DbaseSingle(DbaseField field, float?value = null) : base(field) { if (field == null) { throw new ArgumentNullException(nameof(field)); } if (field.FieldType != DbaseFieldType.Float) { throw new ArgumentException( $"The field {field.Name} 's type must be float to use it as a single field.", nameof(field)); } if (field.Length < MinimumLength || field.Length > MaximumLength) { throw new ArgumentException( $"The field {field.Name} 's length ({field.Length}) must be between {MinimumLength} and {MaximumLength}.", nameof(field)); } Provider = new NumberFormatInfo { NumberDecimalDigits = DbaseDecimalCount.Min(MaximumDecimalCount, field.DecimalCount).ToInt32(), NumberDecimalSeparator = "." }; Value = value; }
public void CreateSingleFieldReturnsExpectedResult() { var name = _fixture.Create <DbaseFieldName>(); var length = _fixture.GenerateDbaseSingleLength(); var decimalCount = _fixture.GenerateDbaseSingleDecimalCount(length); var positiveIntegerDigits = decimalCount != new DbaseDecimalCount(0) ? new DbaseIntegerDigits(length.ToInt32() - 1 - decimalCount.ToInt32()) : new DbaseIntegerDigits(length.ToInt32()); var negativeIntegerDigits = positiveIntegerDigits != new DbaseIntegerDigits(0) ? positiveIntegerDigits.Minus(new DbaseIntegerDigits(1)) : new DbaseIntegerDigits(0); var result = DbaseField.CreateSingleField( name, length, decimalCount); Assert.Equal(name, result.Name); Assert.Equal(DbaseFieldType.Float, result.FieldType); Assert.Equal(ByteOffset.Initial, result.Offset); Assert.Equal(length, result.Length); Assert.Equal(decimalCount, result.DecimalCount); Assert.Equal(positiveIntegerDigits, result.PositiveIntegerDigits); Assert.Equal(negativeIntegerDigits, result.NegativeIntegerDigits); }
private bool Equals(DbaseField other) => other != null && Name.Equals(other.Name) && FieldType.Equals(other.FieldType) && Offset.Equals(other.Offset) && Length.Equals(other.Length) && DecimalCount.Equals(other.DecimalCount);
public DbaseField After(DbaseField field) { if (field == null) { throw new ArgumentNullException(nameof(field)); } return(new DbaseField(Name, FieldType, field.Offset.Plus(field.Length), Length, DecimalCount)); }
public void ReadingCharacterWithDateTimeValueHasExpectedResult() { var value = _fixture.Create <DateTime>(); var fields = new[] { new DbaseField( _fixture.Create <DbaseFieldName>(), DbaseFieldType.DateTime, ByteOffset.Initial, new DbaseFieldLength(15), new DbaseDecimalCount(0) ) }; var values = new DbaseFieldValue[] { new DbaseDateTime( fields[0], value ) }; using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream, Encoding.ASCII, true)) { new AnonymousDbaseRecord(values).Write(writer); writer.Flush(); } stream.Position = 0; using (var reader = new BinaryReader(stream, Encoding.ASCII, true)) { fields[0] = new DbaseField( fields[0].Name, DbaseFieldType.Character, ByteOffset.Initial, new DbaseFieldLength(15), new DbaseDecimalCount(0) ); var sut = new AnonymousDbaseRecord(fields); //Act sut.Read(reader); Assert.False(sut.IsDeleted); Assert.Equal(new DbaseFieldValue[] { new DbaseDateTime( fields[0], value ) }, sut.Values, new DbaseFieldValueEqualityComparer()); } } }
public void CreateLogicalFieldValueReturnsExpectedResult() { var sut = DbaseField.CreateLogicalField(_fixture.Create <DbaseFieldName>()); var result = sut.CreateFieldValue(); Assert.Equal(sut, result.Field); Assert.IsType <DbaseBoolean>(result); }
public static void WriteAsNullableString(this BinaryWriter writer, DbaseField field, string value) { if (value == null) { writer.Write(new byte[field.Length.ToInt32()]); } else { writer.WriteRightPaddedString(value, field.Length.ToInt32(), ' '); } }
public void CreateSingleFieldThrowsWhenDecimalCountGreaterThanZeroAndLengthSmallerThan3(int smallerThan3) { var name = _fixture.Create <DbaseFieldName>(); var length = new DbaseFieldLength(smallerThan3); var decimalCount = new DbaseDecimalCount(1); Assert.Throws <ArgumentException>(() => DbaseField.CreateSingleField( name, length, decimalCount)); }
public void CreateSingleFieldThrowsWhenDecimalCountGreaterThanOrEqualToLength(int plus) { var name = _fixture.Create <DbaseFieldName>(); var length = _fixture.GenerateDbaseSingleLength(); var decimalCount = new DbaseDecimalCount(length.ToInt32()).Plus(new DbaseDecimalCount(plus)); Assert.Throws <ArgumentException>(() => DbaseField.CreateSingleField( name, length, decimalCount)); }
public void DateTimeHoursMinutesSecondsAndMillisecondsAreRemovedUponConstruction() { var field = new DbaseField( _fixture.Create <DbaseFieldName>(), DbaseFieldType.Date, _fixture.Create <ByteOffset>(), new DbaseFieldLength(8), new DbaseDecimalCount(0)); var sut = new DbaseDate(field, new DateTime(1, 1, 1, 1, 1, 1, 1)); Assert.Equal(new DateTime(1, 1, 1, 0, 0, 0, 0), sut.Value); }
public void AcceptsStringValueReturnsExpectedResult(int length, string value, bool accepted) { var sut = new DbaseCharacter( DbaseField.CreateCharacterField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length) )); var result = sut.AcceptsValue(value); Assert.Equal(accepted, result); }
public void AcceptsDateTimeOffsetValueReturnsExpectedResult(int length, DbaseCharacterOptions options, DateTimeOffset value, bool accepted) { var sut = new DbaseCharacter( DbaseField.CreateCharacterField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length) ), options: options); var result = sut.AcceptsValue(value); Assert.Equal(accepted, result); }
public static void WriteAsNullableInt32(this BinaryWriter writer, DbaseField field, int?value) { if (value.HasValue) { var unpadded = DbaseInt32.FormatAsString(value.Value); writer.WriteLeftPaddedString(unpadded, field.Length.ToInt32(), ' '); } else { writer.Write(new string(' ', field.Length.ToInt32()).ToCharArray()); // or writer.Write(new byte[Field.Length]); // to determine } }
public void TryGetValueAsDateTimeOffsetReturnsExpectedResult(int length, DbaseCharacterOptions options, string value, bool gotten, DateTimeOffset gottenValueAsDateTimeOffset) { var sut = new DbaseCharacter( DbaseField.CreateCharacterField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length) ), value, options); var result = sut.TryGetValueAsDateTimeOffset(out var valueAsDateTime); Assert.Equal(gotten, result); Assert.Equal(gottenValueAsDateTimeOffset, valueAsDateTime); }
public void TrySetValueAsNullableInt16ReturnsExpectedResult(int length, short?value, bool expected) { var sut = new DbaseNumber( DbaseField.CreateNumberField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length), new DbaseDecimalCount(0) )); var result = sut.TrySetValueAsNullableInt16(value); Assert.Equal(expected, result); }
public void TrySetValueAsInt32ReturnsExpectedResult(int length, int value, bool expected) { var sut = new DbaseFloat( DbaseField.CreateFloatField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length), new DbaseDecimalCount(0) )); var result = sut.TrySetValueAsInt32(value); Assert.Equal(expected, result); }
public void TrySetValueAsNullableDateTimeOffsetReturnsExpectedResult(int length, DbaseCharacterOptions options, DateTimeOffset?value, bool expected) { var sut = new DbaseCharacter( DbaseField.CreateCharacterField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length) ), options: options); var result = sut.TrySetValueAsNullableDateTimeOffset(value); Assert.Equal(expected, result); }
public void AcceptsNullableInt32ValueReturnsExpectedResult(int length, int?value, bool accepted) { var sut = new DbaseFloat( DbaseField.CreateFloatField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length), new DbaseDecimalCount(0) )); var result = sut.AcceptsValue(value); Assert.Equal(accepted, result); }
public void AcceptsInt16ValueReturnsExpectedResult(int length, short value, bool accepted) { var sut = new DbaseNumber( DbaseField.CreateNumberField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length), new DbaseDecimalCount(0) )); var result = sut.AcceptsValue(value); Assert.Equal(accepted, result); }
public void CreateDateTimeFieldValueReturnsExpectedResult() { var sut = new DbaseField( _fixture.Create <DbaseFieldName>(), DbaseFieldType.DateTime, _fixture.Create <ByteOffset>(), new DbaseFieldLength(15), new DbaseDecimalCount(0)); var result = sut.CreateFieldValue(); Assert.Equal(sut, result.Field); Assert.IsType <DbaseDateTime>(result); }
public void CreateDateTimeFieldReturnsExpectedResult() { var name = _fixture.Create <DbaseFieldName>(); var result = DbaseField.CreateDateTimeField(name); Assert.Equal(name, result.Name); Assert.Equal(DbaseFieldType.DateTime, result.FieldType); Assert.Equal(ByteOffset.Initial, result.Offset); Assert.Equal(new DbaseFieldLength(15), result.Length); Assert.Equal(new DbaseDecimalCount(0), result.DecimalCount); Assert.Equal(new DbaseIntegerDigits(0), result.PositiveIntegerDigits); Assert.Equal(new DbaseIntegerDigits(0), result.NegativeIntegerDigits); }
public void TryGetValueAsInt32ReturnsExpectedResult(int length, double?value, bool gotten, int gottenValueAsInt32) { var sut = new DbaseNumber( DbaseField.CreateNumberField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length), new DbaseDecimalCount(0) ), value); var result = sut.TryGetValueAsInt32(out var valueAsInt32); Assert.Equal(gotten, result); Assert.Equal(gottenValueAsInt32, valueAsInt32); }
public void DateTimeMillisecondsAreRemovedUponSet() { var field = new DbaseField( _fixture.Create <DbaseFieldName>(), DbaseFieldType.DateTime, _fixture.Create <ByteOffset>(), new DbaseFieldLength(15), new DbaseDecimalCount(0)); var sut = new DbaseDateTime(field); sut.Value = new DateTime(1, 1, 1, 1, 1, 1, 1); Assert.Equal(new DateTime(1, 1, 1, 1, 1, 1, 0), sut.Value); }
public void TryGetValueAsNullableInt16ReturnsExpectedResult(int length, float?value, bool gotten, short?gottenValueAsInt16) { var sut = new DbaseFloat( DbaseField.CreateFloatField( _fixture.Create <DbaseFieldName>(), new DbaseFieldLength(length), new DbaseDecimalCount(0) ), value); var result = sut.TryGetValueAsNullableInt16(out var valueAsInt16); Assert.Equal(gotten, result); Assert.Equal(gottenValueAsInt16, valueAsInt16); }