public void WordsFragDoc_OneWordAndMultiGloss()
		{
			var wsEn = Cache.WritingSystemFactory.GetWsFromStr("en");
			IWritingSystem wsKal;
			Cache.ServiceLocator.WritingSystemManager.GetOrSet("qaa-x-kal", out wsKal);

			const string xml =
				@"<document>
					  <word>
						<item type='txt' lang='qaa-x-kal'>glossedtwice</item>
						<item type='gls' lang='en'>firstgloss</item>
						<item type='gls' lang='en'>secondgloss</item>
					  </word>
				</document>";

			var li = new BIRDFormatImportTests.LLIMergeExtension(Cache, null, null);
			Assert.DoesNotThrow(() => li.ImportWordsFrag(
				() => new MemoryStream(Encoding.ASCII.GetBytes(xml.ToCharArray())),
				LinguaLinksImport.ImportAnalysesLevel.WordGloss));

			var wordsRepo = Cache.ServiceLocator.GetInstance<IWfiWordformRepository>();
			var wff1 = wordsRepo.GetMatchingWordform(wsKal.Handle, "glossedtwice");
			Assert.That(wff1, Is.Not.Null);
			Assert.That(wff1.AnalysesOC, Has.Count.EqualTo(2), "multiple word glosses (without specifying morphology) should create separate WfiAnalyses with separate glosses");
			Assert.That(wff1.AnalysesOC.ElementAt(0).MeaningsOC, Has.Count.EqualTo(1));
			Assert.That(wff1.AnalysesOC.ElementAt(0).MeaningsOC.ElementAt(0).Form.get_String(wsEn).Text, Is.EqualTo("firstgloss"));
			Assert.That(wff1.AnalysesOC.ElementAt(1).MeaningsOC, Has.Count.EqualTo(1));
			Assert.That(wff1.AnalysesOC.ElementAt(1).MeaningsOC.ElementAt(0).Form.get_String(wsEn).Text, Is.EqualTo("secondgloss"));

			Assert.That(Cache.ServiceLocator.GetInstance<IWfiGlossRepository>().Count, Is.EqualTo(2));
			Assert.That(Cache.ServiceLocator.GetInstance<IWfiAnalysisRepository>().Count, Is.EqualTo(2));
			Assert.That(Cache.ServiceLocator.GetInstance<IWfiWordformRepository>().Count, Is.EqualTo(1));
		}
		public void WordsFragDoc_OneWordPhraseAndOneGloss_AvoidDuplicates()
		{
			var wsEn = Cache.WritingSystemFactory.GetWsFromStr("en");
			IWritingSystem wsKal;
			Cache.ServiceLocator.WritingSystemManager.GetOrSet("qaa-x-kal", out wsKal);

			const string xml =
				@"<document>
					  <word>
						<item type='txt' lang='qaa-x-kal'>support a phrase</item>
						<item type='gls' lang='en'>phrase gloss</item>
					  </word>
				</document>";

			var li = new BIRDFormatImportTests.LLIMergeExtension(Cache, null, null);
			// First Import
			Assert.DoesNotThrow(() => li.ImportWordsFrag(
				() => new MemoryStream(Encoding.ASCII.GetBytes(xml.ToCharArray())),
				LinguaLinksImport.ImportAnalysesLevel.WordGloss));
			// Second Import
			Assert.DoesNotThrow(() => li.ImportWordsFrag(
				() => new MemoryStream(Encoding.ASCII.GetBytes(xml.ToCharArray())),
				LinguaLinksImport.ImportAnalysesLevel.WordGloss));

			var wordsRepo = Cache.ServiceLocator.GetInstance<IWfiWordformRepository>();
			var wff1 = wordsRepo.GetMatchingWordform(wsKal.Handle, "support a phrase");
			Assert.That(wff1, Is.Not.Null);
			Assert.That(wff1.AnalysesOC, Has.Count.EqualTo(1));
			Assert.That(wff1.AnalysesOC.ElementAt(0).MeaningsOC, Has.Count.EqualTo(1));
			Assert.That(wff1.AnalysesOC.ElementAt(0).MeaningsOC.ElementAt(0).Form.get_String(wsEn).Text, Is.EqualTo("phrase gloss"));

			Assert.That(Cache.ServiceLocator.GetInstance<IWfiGlossRepository>().Count, Is.EqualTo(1));
			Assert.That(Cache.ServiceLocator.GetInstance<IWfiAnalysisRepository>().Count, Is.EqualTo(1));
			Assert.That(Cache.ServiceLocator.GetInstance<IWfiWordformRepository>().Count, Is.EqualTo(1));
		}
		public void DeserializeWordsFragDocument()
		{
			const string xml =
				@"<document>
					  <word>
						<item type='txt' lang='qaa-x-kal'>glossedonce</item>
						<item type='gls' lang='en'>onlygloss</item>
					  </word>
					  <word>
						<item type='txt' lang='qaa-x-kal'>glossedtwice</item>
						<item type='gls' lang='en'>firstgloss</item>
						<item type='gls' lang='en'>secondgloss</item>
					  </word>
					  <word>
						<item type='txt' lang='qaa-x-kal'>support a phrase</item>
						<item type='gls' lang='en'>phrase gloss</item>
					  </word>
				</document>";

			var li = new BIRDFormatImportTests.LLIMergeExtension(Cache, null, null);
			Assert.DoesNotThrow(() => li.ImportWordsFrag(
				() => new MemoryStream(Encoding.ASCII.GetBytes(xml.ToCharArray())),
				LinguaLinksImport.ImportAnalysesLevel.WordGloss));
		}