public void TwoResourcesSingleLanguage_AllEntries_TranslationInEnglish()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
<languages>
  <language name=""English"" id=""en"">
    <displayoption>This is display option</displayoption>
    <displayoption2>This is display option 2</displayoption2>
  </language>
</languages>";

            var parser = new XmlDocumentParser();
            var doc    = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resource);
            Assert.True(resource.Count == 2);

            var firstResource = resource[1];

            Assert.Equal("/displayoption2", firstResource.ResourceKey);

            Assert.Equal(1, firstResource.Translations.Count);

            var firstTranslation = firstResource.Translations.First();

            Assert.Equal("en", firstTranslation.Language);
            Assert.Equal("This is display option 2", firstTranslation.Value);
        }
        public void OneResourceWithAttributeValueOnParent_CorrectResourceKey()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
<languages>
  <language name=""English"" id=""en"">
    <displayoptions>
        <displayoption name=""mobile"">
            <name>Mobile</name>
        </displayoption>
    </displayoptions>
  </language>
</languages>";

            var parser = new XmlDocumentParser();
            var doc    = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resource);
            Assert.Single(resource);

            var firstResource = resource[0];

            Assert.Equal(@"/displayoptions/displayoption[@name=""mobile""]/name", firstResource.ResourceKey);
        }
        public void NestedResourcesSingleLanguage_AllEntry_TranslationInEnglish()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
            <languages>
              <language name=""English"" id=""en"">
            <displayoptions>
            <displayoption>This is display option</displayoption>
            <displayoption2>This is display option 2</displayoption2>
            </displayoptions>
              </language>
            </languages>";

            var parser = new XmlDocumentParser();
            var doc = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resource);
            Assert.True(resource.Count == 2);

            var firstResource = resource[1];
            Assert.Equal("/displayoptions/displayoption2", firstResource.ResourceKey);

            Assert.Equal(1, firstResource.Translations.Count);

            var firstTranslation = firstResource.Translations.First();
            Assert.Equal("en", firstTranslation.Language);
            Assert.Equal("This is display option 2", firstTranslation.Value);
        }
        public void SingleResourceDuplicateLanguages_ExceptionNotThrownWithIgnoreDuplicateKeysOption()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
            <languages>
              <language name=""English"" id=""en"">
                <displayoption>This is display option</displayoption>
              </language>
              <language name=""English"" id=""en"">
                <displayoption>Whatever!</displayoption>
              </language>
            </languages>";

            var parser = new XmlDocumentParser();
            var doc    = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc, true, "in-memory").ToList();

            var firstResource = resource.First();

            Assert.Equal("/displayoption", firstResource.ResourceKey);

            Assert.Equal(1, firstResource.Translations.Count);

            var englishTranslation = firstResource.Translations.First(t => t.Language == "en");

            Assert.Equal("en", englishTranslation.Language);
            Assert.Equal("This is display option", englishTranslation.Value);
        }
        public void SingleResourceTwoLanguages_SingleEntry_TranslationBothLanguages()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
<languages>
  <language name=""English"" id=""en"">
    <displayoption>This is display option</displayoption>
  </language>
  <language name=""Norsk"" id=""no"">
    <displayoption>Det er skjemalternativ</displayoption>
  </language>
</languages>";

            var parser = new XmlDocumentParser();
            var doc    = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resource);
            Assert.True(resource.Count == 1);

            var firstResource = resource.First();

            Assert.Equal("/displayoption", firstResource.ResourceKey);

            Assert.Equal(2, firstResource.Translations.Count);

            var norwegianTranslation = firstResource.Translations.First(t => t.Language == "no");

            Assert.Equal("no", norwegianTranslation.Language);
            Assert.Equal("Det er skjemalternativ", norwegianTranslation.Value);
        }
        public void SingleResourceTwoLanguages_SingleEntry_TranslationBothLanguages()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
            <languages>
              <language name=""English"" id=""en"">
            <displayoption>This is display option</displayoption>
              </language>
              <language name=""Norsk"" id=""no"">
            <displayoption>Det er skjemalternativ</displayoption>
              </language>
            </languages>";

            var parser = new XmlDocumentParser();
            var doc = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resource);
            Assert.True(resource.Count == 1);

            var firstResource = resource.First();
            Assert.Equal("/displayoption", firstResource.ResourceKey);

            Assert.Equal(2, firstResource.Translations.Count);

            var norwegianTranslation = firstResource.Translations.First(t => t.Language == "no");
            Assert.Equal("no", norwegianTranslation.Language);
            Assert.Equal("Det er skjemalternativ", norwegianTranslation.Value);
        }
        public void EmptyList_NoEntries()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
<languages>
  <language name=""English"" id=""en"">
  </language>
</languages>";

            var parser = new XmlDocumentParser();
            var doc    = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.Empty(resource);
        }
        public void EmptyList_NoEntries()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
            <languages>
              <language name=""English"" id=""en"">
              </language>
            </languages>";

            var parser = new XmlDocumentParser();
            var doc = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.Empty(resource);
        }
        public void SingleResourceDuplicateLanguages_ExceptionThrown()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
<languages>
  <language name=""English"" id=""en"">
    <displayoption>This is display option</displayoption>
  </language>
  <language name=""English"" id=""en"">
    <displayoption>Whatever!</displayoption>
  </language>
</languages>";

            var parser = new XmlDocumentParser();
            var doc    = XDocument.Parse(xmlSample);

            Assert.Throws <NotSupportedException>(() => parser.ReadXml(doc).ToList());
        }
        public void SingleResourceDuplicateLanguages_ExceptionThrown()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
            <languages>
              <language name=""English"" id=""en"">
            <displayoption>This is display option</displayoption>
              </language>
              <language name=""English"" id=""en"">
            <displayoption>Whatever!</displayoption>
              </language>
            </languages>";

            var parser = new XmlDocumentParser();
            var doc = XDocument.Parse(xmlSample);

            Assert.Throws<NotSupportedException>(() => parser.ReadXml(doc).ToList());
        }
        public void SingleResourceWithIgnoredAttribute_SingleResource()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
<languages>
  <language name=""English"" id=""en"">
    <displayoptions>
        <displayoption file=""something.txt"">Mobile</displayoption>
    </displayoptions>
  </language>
</languages>";

            var parser = new XmlDocumentParser();
            var doc    = XDocument.Parse(xmlSample);

            var resources = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resources);
            Assert.Single(resources);

            var firstResource = resources.First();

            Assert.Equal(@"/displayoptions/displayoption", firstResource.ResourceKey);
        }
        public void SameKeyWithDifferentAttributeValue_TwoSeparateResourcesWithXPathInKey()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
<languages>
  <language name=""English"" id=""en"">
    <displayoptions>
        <displayoption name=""mobile"">Mobile</displayoption>
        <displayoption name=""desktop"">Desktop</displayoption>
    </displayoptions>
  </language>
</languages>";

            var parser = new XmlDocumentParser();
            var doc    = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resource);
            Assert.True(resource.Count == 2);

            var firstResource = resource[0];

            Assert.Equal(@"/displayoptions/displayoption[@name=""mobile""]", firstResource.ResourceKey);
        }
        public void SingleResourceWithIgnoredAttribute_SingleResource()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
            <languages>
              <language name=""English"" id=""en"">
            <displayoptions>
            <displayoption file=""something.txt"">Mobile</displayoption>
            </displayoptions>
              </language>
            </languages>";

            var parser = new XmlDocumentParser();
            var doc = XDocument.Parse(xmlSample);

            var resources = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resources);
            Assert.Single(resources);

            var firstResource = resources.First();
            Assert.Equal(@"/displayoptions/displayoption", firstResource.ResourceKey);
        }
        public void SameKeyWithDifferentAttributeValue_TwoSeparateResourcesWithXPathInKey()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
            <languages>
              <language name=""English"" id=""en"">
            <displayoptions>
            <displayoption name=""mobile"">Mobile</displayoption>
            <displayoption name=""desktop"">Desktop</displayoption>
            </displayoptions>
              </language>
            </languages>";

            var parser = new XmlDocumentParser();
            var doc = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resource);
            Assert.True(resource.Count == 2);

            var firstResource = resource[0];
            Assert.Equal(@"/displayoptions/displayoption[@name='mobile']", firstResource.ResourceKey);
        }
        public void OneResourceWithAttributeValueOnParent_CorrectResourceKey()
        {
            var xmlSample = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
            <languages>
              <language name=""English"" id=""en"">
            <displayoptions>
            <displayoption name=""mobile"">
            <name>Mobile</name>
            </displayoption>
            </displayoptions>
              </language>
            </languages>";

            var parser = new XmlDocumentParser();
            var doc = XDocument.Parse(xmlSample);

            var resource = parser.ReadXml(doc).ToList();

            Assert.NotEmpty(resource);
            Assert.Single(resource);

            var firstResource = resource[0];
            Assert.Equal(@"/displayoptions/displayoption[@name='mobile']/name", firstResource.ResourceKey);
        }