Пример #1
0
        private bool CheckIfPersonAlreadyExists(TransactionExecutor transactionExecutor, string govId)
        {
            IIonValue ionGovId = this.valueFactory.NewString(govId);
            IEnumerable <IIonValue> selectResult = transactionExecutor.Execute("SELECT GovId FROM Person AS p WHERE p.GovId = ?", ionGovId);

            return(selectResult.Any(x => x.GetField("GovId").StringValue == govId));
        }
Пример #2
0
        public override bool IsEquivalentTo(IIonValue other)
        {
            if (!base.IsEquivalentTo(other))
            {
                return(false);
            }

            var otherDec = (IonDecimal)other;

            if (this.NullFlagOn())
            {
                return(otherDec.IsNull);
            }

            if (other.IsNull)
            {
                return(false);
            }

            if (this.BigDecimalValue.IsNegativeZero ^ otherDec.BigDecimalValue.IsNegativeZero)
            {
                return(false);
            }

            if (otherDec.BigDecimalValue.Scale > 0 || this.BigDecimalValue.Scale > 0)
            {
                // precision matters, make sure that this has the same precision
                return(this.BigDecimalValue.Scale == otherDec.BigDecimalValue.Scale &&
                       this.BigDecimalValue.IntVal == otherDec.BigDecimalValue.IntVal);
            }

            // this only compares values
            return(this.BigDecimalValue == otherDec.BigDecimalValue);
        }
Пример #3
0
 public MultisetField(SymbolToken name, IIonValue value)
 {
     Debug.Assert(name != null, "name is null");
     this.name  = name;
     this.value = value;
     this.Count = 0;
 }
Пример #4
0
        public Entity(Stream stream, int id, int type, ISymbolTable symbolTable, IonLoader loader)
        {
            using var reader = new BinaryReader(stream, Encoding.UTF8, true);
            Signature        = Encoding.ASCII.GetString(reader.ReadBytes(4));
            if (Signature != EntitySignature)
            {
                throw new Exception("Invalid signature");
            }

            Version = reader.ReadUInt16();
            if (!_allowedVersions.Contains(Version))
            {
                throw new Exception($"Version not supported ({Version})");
            }

            Length = reader.ReadUInt32();
            if (Length < MinHeaderLength)
            {
                throw new Exception("Header too short");
            }

            // Duplicated in KfxContainer
            // 10 = number of bytes read so far
            var containerInfoData = new MemoryStream(stream.ReadBytes((int)Length - 10));
            var entityInfo        = loader.LoadSingle <IonStruct>(containerInfoData);

            if (entityInfo == null)
            {
                throw new Exception("Bad container or something");
            }

            var compressionType = entityInfo.GetField(KfxSymbols.BcComprType).IntValue;

            if (compressionType != KfxContainer.DefaultCompressionType)
            {
                throw new Exception($"Unexpected bcComprType ({compressionType})");
            }

            var drmScheme = entityInfo.GetField(KfxSymbols.BcDrmScheme).IntValue;

            if (drmScheme != KfxContainer.DefaultDrmScheme)
            {
                throw new Exception($"Unexpected bcDRMScheme ({drmScheme})");
            }

            FragmentId   = symbolTable.FindKnownSymbol(id);
            FragmentType = symbolTable.FindKnownSymbol(type);

            Value = RawFragmentTypes.Contains(FragmentType)
                ? new IonBlob(new ReadOnlySpan <byte>(stream.ReadToEnd()))
                : ((IonDatagram)loader.Load(stream.ReadToEnd())).Single();

            // Skipping annotation handling for now

            //if ftype == fid and ftype in ROOT_FRAGMENT_TYPES and not self.pure:

            //fid = "$348"

            //return YJFragment(fid = fid if fid != "$348" else None, ftype = ftype, value = self.value)
        }
Пример #5
0
        private object DeserializeObject(Type type, IIonValue ionValue)
        {
            Object obj;
            // Get type's attributes
            IList <PropertyInfo> properties = new List <PropertyInfo>(type.GetProperties());

            // Array to hold parameters to create object
            object[] paramArray = new object[properties.Count];

            int count = 0;

            foreach (PropertyInfo property in properties)
            {
                Type propertyType = property.PropertyType;
                if (Type.GetTypeCode(propertyType) == TypeCode.Object)
                {
                    obj = DeserializeObject(propertyType, ionValue.GetField(property.Name));
                }
                else
                {
                    obj = DeserializingMappers(propertyType, ionValue.GetField(property.Name));
                }
                paramArray[count] = obj;
                count++;
            }

            // Create object by passing in array of parameters into constructor
            obj = Activator.CreateInstance(type, args: paramArray);
            return(obj);
        }
Пример #6
0
        public void RespectPrettyTextSerializationFormat()
        {
            var serializer =
                new IonSerializer(new IonSerializationOptions {
                Format = IonSerializationFormat.PRETTY_TEXT
            });
            MemoryStream testStream = (MemoryStream)serializer.Serialize(TestObjects.John);
            string       testString = System.Text.Encoding.UTF8.GetString(testStream.ToArray());

            IIonValue    ionValue             = IonLoader.Default.Load(TestObjects.JohnIonText).GetElementAt(0);
            StringWriter expectedStringWriter = new StringWriter();

            using (var writer =
                       IonTextWriterBuilder.Build(expectedStringWriter, new IonTextOptions {
                PrettyPrint = true
            }))
            {
                ionValue.WriteTo(writer);
                writer.Finish();
            }

            string expectedString = expectedStringWriter.ToString();

            Assert.AreEqual(expectedString, testString);
        }
Пример #7
0
        private void RunTest(
            string testName,
            IIonValue testCase,
            IIonValue expectedHashLog,
            TestIonHasherProvider hasherProvider,
            IonHashTester testObject
            )
        {
            if (expectedHashLog == null)
            {
                return;
            }

            IIonValue ionValue  = testCase.GetField("ion");
            IIonValue ionBinary = testCase.GetField("10n");

            if (ionValue != null && ionBinary != null)
            {
                throw new Exception("Test must not define both 'ion' and '10n' fields");
            }

            var reader = ionValue == null
                ? testObject.GetIonReader(ContainerToBytes(ionBinary))
                : testObject.GetIonReader(ionValue);

            testObject.Traverse(reader, hasherProvider);

            IIonValue actualHashLog         = testObject.GetHashLog();
            IIonValue actualHashLogFiltered = FilterHashLog(actualHashLog, expectedHashLog);

            Assert.AreEqual(HashLogToString(expectedHashLog), HashLogToString(actualHashLogFiltered));
        }
        private async Task <bool> CheckIndexExistsAsync(string tableName, string field)
        {
            return(await Task.Run(async() =>
            {
                Amazon.QLDB.Driver.IAsyncResult result = await qldbDriver.Execute(async transactionExecutor =>
                {
                    IIonValue ionTableName = this.valueFactory.NewString(tableName);
                    return await transactionExecutor.Execute($"SELECT * FROM information_schema.user_tables WHERE name = ?", ionTableName);
                });

                List <IIonValue> ionValues = await result.ToListAsync();
                if (ionValues.Any())
                {
                    IIonList indexes = ionValues.First().GetField("indexes");
                    foreach (IIonValue index in indexes)
                    {
                        string expr = index.GetField("expr").StringValue;
                        if (expr.Contains(field))
                        {
                            return true;
                        }
                    }
                }

                return false;
            }));
        }
        public async Task ExecuteAsync_InsertDocumentWithMultipleFields_DocumentIsInserted()
        {
            // Given.
            // Create Ion struct to insert.
            IIonValue ionStruct = GetSingleValueIonStruct(IonString);

            ionStruct.SetField(Constants.SecondColumnName, ValueFactory.NewString(Constants.SingleDocumentValue));

            // When.
            var insertQuery = $"INSERT INTO {Constants.TableName} ?";

            Assert.AreEqual(1, await ExecuteWithParamAndReturnRowCount(insertQuery, ionStruct));

            // Then.
            var       searchQuery = $@"SELECT {Constants.ColumnName}, {Constants.SecondColumnName} FROM {Constants.TableName} 
                               WHERE {Constants.ColumnName} = '{Constants.SingleDocumentValue}' 
                               AND  {Constants.SecondColumnName} = '{Constants.SingleDocumentValue}'";
            IIonValue value       = await ExecuteAndReturnIonValue(searchQuery);

            var ionReader = IonReaderBuilder.Build(value);

            ionReader.MoveNext();
            ionReader.StepIn();
            ionReader.MoveNext();
            Assert.AreEqual(Constants.ColumnName, ionReader.CurrentFieldName);
            Assert.AreEqual(Constants.SingleDocumentValue, ionReader.StringValue());
            ionReader.MoveNext();
            Assert.AreEqual(Constants.SecondColumnName, ionReader.CurrentFieldName);
            Assert.AreEqual(Constants.SingleDocumentValue, ionReader.StringValue());
        }
Пример #10
0
        public void TestMapper()
        {
            IIonValue ionStruct = IonLoader.Default
                                  .Load("{name: \"John\", age: 22, address: {city: \"cityName\", street: \"streetName\", isApartment: false}}");

            var    lossyIonMapper = IonMapper.LOSSY();
            Person person         = lossyIonMapper.FromIon <Person>(ionStruct);

            Console.WriteLine(person.ToString());

            IIonValue ionValue = lossyIonMapper.ToIon <Person>(person);

            Console.WriteLine(ionValue.ToPrettyString());

            Console.WriteLine("\n \n ==== Now with a customized mapper === \n");

            Func <IIonString, string> specialIonStringMapper = ionValue => (ionValue.StringValue).ToUpper();
            Func <IIonInt, int>       specialIonIntMapper    = ionValue => (ionValue.IntValue) * 3;
            Func <IIonBool, bool>     specialIonBoolMapper   = ionValue => !(ionValue.BoolValue);

            var customizedMapper = new CustomIonMapper(MapperTypes.LOSSY)
                                   .WithMapperFromIonTo <string>(specialIonStringMapper)
                                   .WithMapperFromIonTo <int>(specialIonIntMapper)
                                   .WithMapperFromIonTo <bool>(specialIonBoolMapper)
                                   .Build();

            person = customizedMapper.FromIon <Person>(ionStruct);
            Console.WriteLine(person.ToString());

            ionValue = customizedMapper.ToIon <Person>(person);
            Console.WriteLine(ionValue.ToPrettyString());
        }
Пример #11
0
        public override bool IsEquivalentTo(IIonValue other)
        {
            if (!base.IsEquivalentTo(other))
            {
                return(false);
            }

            var oFloat = (IonFloat)other;

            if (this.NullFlagOn())
            {
                return(oFloat.IsNull);
            }

            if (oFloat.IsNull)
            {
                return(false);
            }

            if (PrivateHelper.IsNegativeZero(this.d) ^ PrivateHelper.IsNegativeZero(oFloat.d))
            {
                return(false);
            }

            return(EqualityComparer <double> .Default.Equals(oFloat.DoubleValue, this.DoubleValue));
        }
        private bool CheckIfVinAlreadyExists(TransactionExecutor transactionExecutor, string vin)
        {
            IIonValue ionVin       = this.valueFactory.NewString(vin);
            IResult   selectResult = transactionExecutor.Execute("SELECT VIN FROM VehicleRegistration AS v WHERE v.VIN = ?", ionVin);

            return(selectResult.Any(x => x.GetField("VIN").StringValue == vin));
        }
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
        {
            Vehicle vehicle = JsonConvert.DeserializeObject <Vehicle>(request.Body);

            return(this.qldbDriver.Execute(transactionExecutor =>
            {
                context.Logger.Log($"Checking vehicle already exists for VIN {vehicle.Vin}.");
                if (CheckIfVinAlreadyExists(transactionExecutor, vehicle.Vin))
                {
                    context.Logger.Log($"Vehicle does exist for VIN {vehicle.Vin}, returning not modified.");
                    return new APIGatewayProxyResponse
                    {
                        StatusCode = (int)HttpStatusCode.NotModified
                    };
                }
                else
                {
                    context.Logger.Log($"Inserting vehicle for VIN {vehicle.Vin}.");

                    IIonValue ionVehicle = ConvertObjectToIonValue(vehicle);
                    transactionExecutor.Execute($"INSERT INTO Vehicle ?", ionVehicle);

                    context.Logger.Log($"Inserted ionVehicle for VIN {vehicle.Vin}, returning OK.");
                    return new APIGatewayProxyResponse
                    {
                        StatusCode = (int)HttpStatusCode.OK
                    };
                }
            }));
        }
Пример #14
0
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
        {
            string govId = request.QueryStringParameters["GovId"];

            IResult selectResult = this.qldbDriver.Execute(transactionExecutor =>
            {
                string personDocumentId = this.tableMetadataService.GetDocumentId(transactionExecutor, PersonTableName, "GovId", govId);
                context.Logger.Log($"Searching for vehicles where primary owner ID is {personDocumentId}.");

                IIonValue ionPersonDocumentId = this.valueFactory.NewString(personDocumentId);
                IResult result = transactionExecutor.Execute("SELECT v FROM Vehicle AS v INNER JOIN VehicleRegistration AS r "
                                                             + "ON v.VIN = r.VIN WHERE r.Owners.PrimaryOwner.PersonId = ?", ionPersonDocumentId);
                return(result);
            });

            IEnumerable <Vehicle> vehicles = selectResult.Select(x =>
            {
                var ionVehicle = x.GetField("v");
                return(new Vehicle
                {
                    Vin = ionVehicle.GetField("VIN").StringValue,
                    Type = ionVehicle.GetField("Type").StringValue,
                    Year = ionVehicle.GetField("Year").IntValue,
                    Make = ionVehicle.GetField("Make").StringValue,
                    Model = ionVehicle.GetField("Model").StringValue,
                    Color = ionVehicle.GetField("Color").StringValue
                });
            });

            return(new APIGatewayProxyResponse
            {
                StatusCode = vehicles.Any() ? (int)HttpStatusCode.OK : (int)HttpStatusCode.NotFound,
                Body = JsonConvert.SerializeObject(vehicles)
            });
        }
Пример #15
0
        public object ConvertTo(IIonValue value, Type type)
        {
            var props    = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
            var instance = Activator.CreateInstance(type);

            var members = type.GetMembers(BindingFlags.Public | BindingFlags.Instance)
                          .Where(m => (m.MemberType == MemberTypes.Field || m.MemberType == MemberTypes.Property));

            foreach (MemberInfo member in members)
            {
                var field        = value.GetField(member.Name);
                var memberType   = member.GetUnderlyingType();
                var fieldHandler = FieldHandlers.GetHandler(memberType);
                if (field != null)
                {
                    var fieldValue = fieldHandler.ConvertTo(field, memberType);
                    if (member.MemberType == MemberTypes.Field)
                    {
                        type.GetField(member.Name).SetValue(instance, fieldValue);
                        continue;
                    }

                    if (member.MemberType == MemberTypes.Property)
                    {
                        if (((PropertyInfo)member).CanWrite)
                        {
                            type.GetProperty(member.Name).SetValue(instance, fieldValue);
                        }
                    }
                }
            }

            return(instance);
        }
Пример #16
0
        public IIonValue ConvertFrom(object value)
        {
            IIonValue root = Factory.NewEmptyStruct();

            BuildChildren(root, value);
            return(root);
        }
Пример #17
0
 public MultisetField(SymbolToken name, IIonValue value)
 {
     Debug.Assert(name != null);
     _name  = name;
     _value = value;
     Count  = 0;
 }
Пример #18
0
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
        {
            Person person = JsonConvert.DeserializeObject <Person>(request.Body, new JsonSerializerSettings {
                DateFormatString = "yyyy-MM-dd"
            });

            return(this.qldbDriver.Execute(transactionExecutor =>
            {
                context.Logger.Log($"Checking person already exists for GovId {person.GovId}.");
                if (CheckIfPersonAlreadyExists(transactionExecutor, person.GovId))
                {
                    context.Logger.Log($"Person does exist for GovId {person.GovId}, returning not modified.");
                    return new APIGatewayProxyResponse
                    {
                        StatusCode = (int)HttpStatusCode.NotModified
                    };
                }
                else
                {
                    context.Logger.Log($"Inserting person for GovId {person.GovId}.");

                    IIonValue ionPerson = ConvertObjectToIonValue(person);
                    transactionExecutor.Execute($"INSERT INTO Person ?", ionPerson);

                    context.Logger.Log($"Inserted person for GovId {person.GovId}, returning OK.");
                    return new APIGatewayProxyResponse
                    {
                        StatusCode = (int)HttpStatusCode.OK
                    };
                }
            }));
        }
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
        {
            VehicleRegistration vehicleRegistration = JsonConvert.DeserializeObject <VehicleRegistration>(request.Body);

            return(this.qldbDriver.Execute(transactionExecutor =>
            {
                context.Logger.Log($"Checking vehicle registration already exists for VIN {vehicleRegistration.Vin}.");
                if (!CheckIfVinAlreadyExists(transactionExecutor, vehicleRegistration.Vin))
                {
                    context.Logger.Log($"Vehicle registration does not exist for VIN {vehicleRegistration.Vin}, returning not found.");
                    return new APIGatewayProxyResponse
                    {
                        StatusCode = (int)HttpStatusCode.NotFound
                    };
                }

                context.Logger.Log($"Vehicle registration already exists, checking what's changed between current value and request.");

                IEnumerable <string> existingSecondaryOwners = GetSecondaryOwners(transactionExecutor, vehicleRegistration.Vin);
                IEnumerable <string> newSecondaryOwnersGovIds = vehicleRegistration.Owners.SecondaryOwners
                                                                .Select(x => x.PersonId)
                                                                .Except(existingSecondaryOwners);
                if (!newSecondaryOwnersGovIds.Any())
                {
                    context.Logger.Log($"Nothing changed, returning not modified.");
                    return new APIGatewayProxyResponse
                    {
                        StatusCode = (int)HttpStatusCode.NotModified
                    };
                }

                string secondaryOwnerPersonDocumentId = this.tableMetadataService.GetDocumentId(transactionExecutor, PersonTableName, "GovId", newSecondaryOwnersGovIds.First());
                if (!CheckIfSecondaryOwnerExists(existingSecondaryOwners, secondaryOwnerPersonDocumentId))
                {
                    context.Logger.Log($"Secondary owner does not exists with document ID {secondaryOwnerPersonDocumentId}, adding secondary owner.");
                    IIonValue ionVin = this.valueFactory.NewString(vehicleRegistration.Vin);
                    IIonValue ionSecondaryOwner = ConvertOwnerToIonValue(new Owner {
                        PersonId = secondaryOwnerPersonDocumentId
                    });

                    IResult result = transactionExecutor.Execute($"FROM VehicleRegistration AS v WHERE v.VIN = ? " +
                                                                 "INSERT INTO v.Owners.SecondaryOwners VALUE ?", ionVin, ionSecondaryOwner);

                    context.Logger.Log($"Secondary owner added with document ID {secondaryOwnerPersonDocumentId}, returning OK.");
                    return new APIGatewayProxyResponse
                    {
                        StatusCode = (int)HttpStatusCode.OK
                    };
                }
                else
                {
                    context.Logger.Log($"Secondary owner already exists, returning not modified.");
                    return new APIGatewayProxyResponse
                    {
                        StatusCode = (int)HttpStatusCode.NotModified
                    };
                }
            }));
        }
Пример #20
0
        public IIonValue ConvertFrom(object value)
        {
            IIonValue list            = Factory.NewEmptyList();
            var       enumerableValue = (IEnumerable)value;

            BuildIonList(list, enumerableValue);
            return(list);
        }
Пример #21
0
            public Field(IIonValue ionValue, bool strict)
            {
                _name = ionValue.FieldNameSymbol.Text ??
                        $"{UnknownSymbolTextPrefix}{ionValue.FieldNameSymbol.Sid}";

                _ionValue = ionValue;
                _strict   = strict;
                Count     = 0;
            }
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
        {
            string vin = request.QueryStringParameters["VIN"];
            IEnumerable <IIonValue> selectResult = this.qldbDriver.Execute(transactionExecutor =>
            {
                string vehicleRegistrationDocumentId = this.tableMetadataService.GetDocumentId(transactionExecutor, VehicleRegistrationTableName, "VIN", vin);
                context.Logger.Log($"Getting history for vehicle registration where document ID is {vehicleRegistrationDocumentId}.");

                IIonValue ionVehicleRegistrationDocumentId = this.valueFactory.NewString(vehicleRegistrationDocumentId);
                IResult result = transactionExecutor.Execute("SELECT data, data.Owners.PrimaryOwner AS PrimaryOwner, data.Owners.SecondaryOwners AS SecondaryOwners, metadata.version "
                                                             + $"FROM history(VehicleRegistration) "
                                                             + "AS history WHERE history.metadata.id = ?", ionVehicleRegistrationDocumentId);
                return(result);
            });

            IEnumerable <VehicleRegistrationHistory> vehicles = selectResult.Select(x =>
            {
                IIonValue ionData    = x.GetField("data");
                IIonValue ionVersion = x.GetField("version");

                Owners owners = new Owners
                {
                    PrimaryOwner = new Owner {
                        PersonId = x.GetField("PrimaryOwner").GetField("PersonId").StringValue
                    }
                };

                var ionSecondaryOwners = x.GetField("SecondaryOwners") as IIonList;
                foreach (var secondaryOwner in ionSecondaryOwners)
                {
                    owners.SecondaryOwners.Add(new Owner {
                        PersonId = secondaryOwner.GetField("PersonId").StringValue
                    });
                }

                return(new VehicleRegistrationHistory
                {
                    Version = ionVersion.IntValue,
                    VehicleRegistration = new VehicleRegistration
                    {
                        Vin = ionData.GetField("VIN").StringValue,
                        LicensePlateNumber = ionData.GetField("LicensePlateNumber").StringValue,
                        State = ionData.GetField("State").StringValue,
                        PendingPenaltyTicketAmount = Convert.ToDouble(ionData.GetField("PendingPenaltyTicketAmount").DecimalValue),
                        ValidFromDate = DateTime.Parse(ionData.GetField("ValidFromDate").StringValue),
                        ValidToDate = DateTime.Parse(ionData.GetField("ValidToDate").StringValue),
                        Owners = owners
                    }
                });
            });

            return(new APIGatewayProxyResponse
            {
                StatusCode = vehicles.Any() ? (int)HttpStatusCode.OK : (int)HttpStatusCode.NotFound,
                Body = JsonConvert.SerializeObject(vehicles, Formatting.Indented)
            });
        }
Пример #23
0
        private static bool AssertDatagramEquivalent(IIonValue d1, IIonValue d2)
        {
            IonValue[] values1 = GetIonValues(d1);
            IonValue[] values2 = GetIonValues(d2);

            var eq = values1.SequenceEqual(values2, IonValueComparer);

            return(eq);
        }
Пример #24
0
        public IIonValue ConvertFrom(object value)
        {
            IIonValue dict = Factory.NewEmptyStruct();

            var enumerableValue = (IDictionary)value;

            BuildDictionary(dict, enumerableValue);
            return(dict);
        }
Пример #25
0
 public void RunWriterTest(
     string testName,
     IIonValue testCase,
     IIonValue expectedHashLog,
     TestIonHasherProvider hasherProvider
     )
 {
     RunTest(testName, testCase, expectedHashLog, hasherProvider, new WriterTest());
 }
Пример #26
0
        public T MapFromIonBoolTo <T>(IIonValue ionValue)
        {
            if (IIonBoolTo != null)
            {
                return((T)IIonBoolTo(ionValue));
            }

            return(Mapper.MapFromIonBoolTo <T>(ionValue));
        }
Пример #27
0
        public virtual void Add(IIonValue item)
        {
            if (!(item is IonValueLite ionValueLite))
            {
                throw new InvalidOperationException();
            }

            AddChild(ChildCount, ionValueLite);
        }
Пример #28
0
 public void StepOut()
 {
     if (_top < 1)
     {
         throw new IonException("Cannot stepOut any further, already at top level.");
     }
     Pop();
     _current = null;
 }
Пример #29
0
            internal override IIonReader GetIonReader(IIonValue ionValue)
            {
                MemoryStream ms     = new MemoryStream();
                IIonWriter   writer = IonBinaryWriterBuilder.Build(ms);

                ionValue.WriteTo(writer);
                writer.Flush();
                return(IonReaderBuilder.Build(ms.ToArray()));
            }
Пример #30
0
        public void HasAnnotation_AssertUnknownSymbolException()
        {
            string    input = "$ion_symbol_table::{ imports:[{ name: \"abc\", version: 1, max_id: 1}],symbols: [\"foo\"]}$10::$11::\"value\"";
            IIonValue data  = IonLoader.Default.Load(input);

            UserTreeReader reader = new UserTreeReader(data);

            ReaderTestCommon.HasAnnotation_AssertUnknownSymbolException(reader);
        }