public async Task TestSymbolResolution() { CdmCorpusDefinition corpus = TestHelper.GetLocalCorpus(TestsSubpath, "TestSymbolResolution"); // load the file CdmEntityDefinition ent = await corpus.FetchObjectAsync <CdmEntityDefinition>("local:/symbolEntity.cdm.json/symbolEnt"); ResolveOptions resOpt = new ResolveOptions(ent.InDocument); // resolve a reference to the trait object CdmObjectBase traitDef = corpus.ResolveSymbolReference( resOpt, ent.InDocument, "symbolEnt/exhibitsTraits/someTraitOnEnt", CdmObjectType.TraitDef, false ); Assert.IsTrue(traitDef is CdmTraitDefinition); // resolve a path to the reference object that contains the trait CdmObjectBase traitRef = corpus.ResolveSymbolReference( resOpt, ent.InDocument, "symbolEnt/exhibitsTraits/someTraitOnEnt/(ref)", CdmObjectType.TraitDef, false ); Assert.IsTrue(traitRef is CdmTraitReference); // FetchObjectDefinition on a path to a reference should fetch the actual object CdmTraitDefinition traitRefDefinition = traitRef.FetchObjectDefinition <CdmTraitDefinition>(resOpt); CdmTraitDefinition traitDefDefinition = traitDef.FetchObjectDefinition <CdmTraitDefinition>(resOpt); Assert.AreEqual(traitRefDefinition, traitDef); Assert.AreEqual(traitDefDefinition, traitDef); CdmObjectBase groupRef = corpus.ResolveSymbolReference( resOpt, ent.InDocument, "symbolEnt/hasAttributes/someGroupRef/(ref)", CdmObjectType.AttributeGroupDef, false ); Assert.IsTrue(groupRef is CdmAttributeGroupReference); CdmObjectBase groupDef = corpus.ResolveSymbolReference( resOpt, ent.InDocument, "symbolEnt/hasAttributes/someGroupRef", CdmObjectType.AttributeGroupDef, false ); Assert.IsTrue(groupDef is CdmAttributeGroupDefinition); // calling FetchObjectDefinition on a symbol to a ref or def should both give the definition CdmAttributeGroupDefinition groupRefDefinition = groupRef.FetchObjectDefinition <CdmAttributeGroupDefinition>(resOpt); CdmAttributeGroupDefinition groupDefDefinition = groupDef.FetchObjectDefinition <CdmAttributeGroupDefinition>(resOpt); Assert.AreEqual(groupRefDefinition, groupDef); Assert.AreEqual(groupDefDefinition, groupDef); CdmObjectBase typeAtt = corpus.ResolveSymbolReference( resOpt, ent.InDocument, "symbolEnt/hasAttributes/someGroupRef/members/someAttribute", CdmObjectType.AttributeGroupDef, false ); Assert.IsTrue(typeAtt is CdmTypeAttributeDefinition); }