Skip to content

Commit 475be57

Browse files
authored
Release 2 (1.1.3) (#61)
2 parents 763edd4 + 7bb4faa commit 475be57

File tree

21 files changed

+1212
-176
lines changed

21 files changed

+1212
-176
lines changed

.github/workflows/CI.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
strategy:
1616
matrix:
1717
os: [ ubuntu-latest, windows-latest ]
18-
dotnet-version: [ '7.x', '8.x' ]
18+
dotnet-version: [ '9.x', '8.x' ]
1919
configuration: [ 'Debug' ]
2020
runs-on: ${{ matrix.os }}
2121

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace Px.Utils.UnitTests.ModelBuilderTests.Fixtures
8+
{
9+
internal static class PxFileMetaEntries_Robust_1_Language_With_Range_Time_Dimension
10+
{
11+
public static List<KeyValuePair<string, string>> Entries =
12+
[
13+
new("CHARSET", "\"ANSI\""),
14+
new("AXIS-VERSION", "\"2013\""),
15+
new("CODEPAGE", "\"iso-8859-15\""),
16+
new("LANGUAGE", "\"fi\""),
17+
new("CREATION-DATE", "\"20200121 09:00\""),
18+
new("NEXT-UPDATE", "\"20240131 08:00\""),
19+
new("TABLEID", "\"example_table_id_for_testing\""),
20+
new("DECIMALS", "0"),
21+
new("SHOWDECIMALS", "1"),
22+
new("MATRIX", "\"001_12ab_2022\""),
23+
new("SUBJECT-CODE", "\"ABCD\""),
24+
new("SUBJECT-AREA", "\"abcd\""),
25+
new("COPYRIGHT", "YES"),
26+
new("DESCRIPTION", "\"test_description_fi\""),
27+
new("TITLE", "\"test_title_fi\""),
28+
new("CONTENTS", "\"test_contents_fi\""),
29+
new("UNITS", "\"test_unit_fi\""),
30+
new("STUB", "\"Vuosi\",\"Alue\",\"Talotyyppi\""),
31+
new("HEADING", "\"Tiedot\""),
32+
new("CONTVARIABLE", "\"Tiedot\""),
33+
new("VALUES(\"Vuosi\")", "\"2015\",\"2016\",\"2017\",\"2018\",\"2019\",\"2020\",\"2021\",\"2022\""),
34+
new("VALUES(\"Alue\")", "\"Koko maa\",\"Pääkaupunkiseutu (PKS)\",\"Muu Suomi (koko maa pl. PKS)\",\"Helsinki\", \"Espoo-Kauniainen\",\"Vantaa\",\"Turku\""),
35+
new("VALUES(\"Talotyyppi\")", "\"Talotyypit yhteensä\",\"Rivitalot\",\"Kerrostalot\""),
36+
new("VALUES(\"Tiedot\")", "\"Indeksi (2015=100)\",\"Muutos edelliseen vuoteen (indeksi 2015=100)\",\"Kauppojen lukumäärä\""),
37+
new("TIMEVAL(\"Vuosi\")", "TLIST(A1, \"2015-2022\")"),
38+
new("CODES(\"Vuosi\")", "\"2015\",\"2016\",\"2017\",\"2018\",\"2019\",\"2020\",\"2021\",\"2022\""),
39+
new("CODES(\"Alue\")", "\"ksu\",\"pks\",\"msu\",\"091\",\"049\",\"092\",\"853\""),
40+
new("CODES(\"Talotyyppi\")", "\"0\",\"1\",\"3\""),
41+
new("CODES(\"Tiedot\")", "\"ketjutettu_lv\",\"vmuutos_lv\",\"lkm_julk_uudet\""),
42+
new("VARIABLE-TYPE(\"Vuosi\")", "\"Time\""),
43+
new("VARIABLE-TYPE(\"Alue\")", "\"Classificatory\""),
44+
new("VARIABLE-TYPE(\"Talotyyppi\")", "\"Classificatory\""),
45+
new("MAP(\"Alue\")", "\"Alue 2018\""),
46+
new("ELIMINATION(\"Talotyyppi\")", "\"Talotyypit yhteensä\""),
47+
new("PRECISION(\"Tiedot\",\"Muutos edelliseen vuoteen (indeksi 2015=100)\")", "1"),
48+
new("LAST-UPDATED(\"Indeksi (2015=100)\")", "\"20230131 08:00\""),
49+
new("LAST-UPDATED(\"Muutos edelliseen vuoteen (indeksi 2015=100)\")", "\"20230131 09:00\""),
50+
new("LAST-UPDATED(\"Kauppojen lukumäärä\")", "\"20230131 10:00\""),
51+
new("UNITS(\"Indeksi (2015=100)\")", "\"indeksipisteluku\""),
52+
new("UNITS(\"Muutos edelliseen vuoteen (indeksi 2015=100)\")", "\"%\""),
53+
new("UNITS", "\"lukumäärä\""), // table level units
54+
new("CONTACT(\"Indeksi (2015=100)\")", "\"test_contact1_fi\""),
55+
new("CONTACT(\"Muutos edelliseen vuoteen (indeksi 2015=100)\")", "\"test_contact2_fi\""),
56+
new("CONTACT(\"Kauppojen lukumäärä\")", "\"test_contact3_fi\""),
57+
new("SOURCE", "\"test_source_fi\""),
58+
new("OFFICIAL-STATISTICS", "YES"),
59+
new("NOTE", "\"test_note_fi\""),
60+
new("NOTE(\"Talotyyppi\")", "\"test_note_talotyyppi\""),
61+
new("VALUENOTE(\"Tiedot\",\"Indeksi (2015=100)\")", "\"test_value_note_tiedot_indeksi\""),
62+
new("VALUENOTE(\"Tiedot\",\"Muutos edelliseen vuoteen (indeksi 2015=100)\")", "\"test_value_note_tiedot_muutos\""),
63+
new("VALUENOTE(\"Tiedot\",\"Kauppojen lukumäärä\")", "\"test_value_note_tiedot_kauppojen_lukumäärä\"")
64+
];
65+
}
66+
}

Px.Utils.UnitTests/ModelBuilderTests/MatrixMetadataBuilderTests.cs

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ public class MatrixMetadataBuilderTests
2020
private MatrixMetadata Actual_1Lang_With_Table_Level_Units_And_Precision { get; } =
2121
new MatrixMetadataBuilder().Build(PxFileMetaEntries_Robust_1_Language_With_Table_Level_Units_And_Precision.Entries);
2222

23+
private MatrixMetadata Actual_1Lang_With_Range_Time_Dimension { get; } =
24+
new MatrixMetadataBuilder().Build(PxFileMetaEntries_Robust_1_Language_With_Range_Time_Dimension.Entries);
25+
2326
[TestMethod]
2427
public void IEnumerableBuildTest()
2528
{
@@ -228,7 +231,7 @@ public void SingleLangWithTableLevelUnitsAndPrecisionBuildTest()
228231
}
229232
Assert.IsFalse(Actual_1Lang_With_Table_Level_Units_And_Precision.AdditionalProperties.ContainsKey(PxFileConfiguration.Default.Tokens.KeyWords.Units));
230233
Assert.IsFalse(Actual_1Lang_With_Table_Level_Units_And_Precision.AdditionalProperties.ContainsKey(PxFileConfiguration.Default.Tokens.KeyWords.Decimals));
231-
Assert.IsFalse(Actual_1Lang_With_Table_Level_Units_And_Precision.AdditionalProperties.ContainsKey(PxFileConfiguration.Default.Tokens.KeyWords.ShowDecimals));
234+
Assert.IsTrue(Actual_1Lang_With_Table_Level_Units_And_Precision.AdditionalProperties.ContainsKey(PxFileConfiguration.Default.Tokens.KeyWords.ShowDecimals));
232235
}
233236

234237
#region Content Dimension Tests
@@ -371,6 +374,32 @@ public void MultiLangPrecisionTestFromRecommendedFixture(int index, int expected
371374
Assert.IsFalse(contentDimension?.Values[index].AdditionalProperties.ContainsKey("PRECISION"));
372375
}
373376

377+
[TestMethod]
378+
public void MultiLangContentDimensionAdditionalPropertiesTest()
379+
{
380+
ContentDimension? contentDimension = (ContentDimension?)Actual_3Lang.Dimensions.Find(d => d.Type == DimensionType.Content);
381+
Assert.IsNotNull(contentDimension);
382+
Assert.AreEqual(3, contentDimension.Values.Count);
383+
foreach (ContentDimensionValue value in contentDimension.Values)
384+
{
385+
Assert.IsTrue(value.AdditionalProperties.ContainsKey("VALUENOTE"));
386+
Assert.IsInstanceOfType<MultilanguageStringProperty>(value.AdditionalProperties["VALUENOTE"]);
387+
}
388+
}
389+
390+
[TestMethod]
391+
public void SingleLangContentDimensionAdditionalPropertiesTest()
392+
{
393+
ContentDimension? contentDimension = (ContentDimension?)Actual_1Lang.Dimensions.Find(d => d.Type == DimensionType.Content);
394+
Assert.IsNotNull(contentDimension);
395+
Assert.AreEqual(3, contentDimension.Values.Count);
396+
foreach (ContentDimensionValue value in contentDimension.Values)
397+
{
398+
Assert.IsTrue(value.AdditionalProperties.ContainsKey("VALUENOTE"));
399+
Assert.IsInstanceOfType<StringProperty>(value.AdditionalProperties["VALUENOTE"]);
400+
}
401+
}
402+
374403
#endregion
375404

376405
#region Time Dimension Tests
@@ -525,5 +554,56 @@ public void MultilanguageTableWithCustomMetaPropertiesAndPropetyTypes()
525554
Assert.AreEqual(MetaPropertyType.TextArray, actual.AdditionalProperties["SINGLEITEMTEXTARRAYPROPERTY"].Type);
526555
Assert.AreEqual(MetaPropertyType.MultilanguageTextArray, actual.AdditionalProperties["SINGLEITEMMULTILANGUAGETEXTARRAYPROPERTY"].Type);
527556
}
557+
558+
[TestMethod]
559+
public void MultilanguageTableRemovesDimensionTypeAndTimeValEntriesTest()
560+
{
561+
Assert.IsTrue(Actual_3Lang.Dimensions.Exists(dim => dim.Type == DimensionType.Time));
562+
foreach (Dimension dim in Actual_3Lang.Dimensions)
563+
{
564+
Assert.IsFalse(dim.AdditionalProperties.ContainsKey(PxFileConfiguration.Default.Tokens.KeyWords.DimensionType));
565+
566+
if (dim.Type == DimensionType.Time)
567+
{
568+
Assert.IsTrue(dim.AdditionalProperties.TryGetValue(PxFileConfiguration.Default.Tokens.KeyWords.TimeVal, out MetaProperty? value));
569+
Assert.AreEqual(MetaPropertyType.TextArray, value.Type);
570+
StringListProperty property = (StringListProperty)value;
571+
Assert.AreEqual(8, property.Value.Count);
572+
}
573+
}
574+
}
575+
576+
[TestMethod]
577+
public void MultilanguageWithRangeTimeDimensionTest()
578+
{
579+
Assert.IsTrue(Actual_1Lang_With_Range_Time_Dimension.Dimensions.Exists(dim => dim.Type == DimensionType.Time));
580+
foreach (Dimension dim in Actual_1Lang_With_Range_Time_Dimension.Dimensions)
581+
{
582+
Assert.IsFalse(dim.AdditionalProperties.ContainsKey(PxFileConfiguration.Default.Tokens.KeyWords.DimensionType));
583+
584+
if (dim.Type == DimensionType.Time)
585+
{
586+
Assert.IsTrue(dim.AdditionalProperties.TryGetValue(PxFileConfiguration.Default.Tokens.KeyWords.TimeVal, out MetaProperty? value));
587+
Assert.AreEqual(MetaPropertyType.Text, value.Type);
588+
StringProperty property = (StringProperty)value;
589+
Assert.AreEqual("2015-2022", property.Value);
590+
}
591+
}
592+
}
593+
594+
[TestMethod]
595+
public void MultilanguageRemovesTableLevelMetaEntriesTest()
596+
{
597+
string[] keywords = [
598+
PxFileConfiguration.Default.Tokens.KeyWords.Units,
599+
PxFileConfiguration.Default.Tokens.KeyWords.Precision,
600+
PxFileConfiguration.Default.Tokens.KeyWords.Decimals
601+
];
602+
603+
foreach (string keyword in keywords)
604+
{
605+
Assert.IsFalse(Actual_3Lang.AdditionalProperties.ContainsKey(keyword));
606+
}
607+
}
528608
}
529609
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using Px.Utils.ModelBuilders;
2+
3+
namespace Px.Utils.UnitTests.ModelBuilderTests.ValueParserUtilitiesTests
4+
{
5+
[TestClass]
6+
public class GetTimeValValueRangeStringTests
7+
{
8+
[TestMethod]
9+
public void GetTimeValValueRangeStringTestEmptyInputThrowsException()
10+
{
11+
string input = "TLIST(A1)";
12+
Assert.ThrowsException<ArgumentException>(() => ValueParserUtilities.GetTimeValValueRangeString(input));
13+
}
14+
15+
[TestMethod]
16+
public void GetTimeValValueRangeStringTestListInputThrowsException()
17+
{
18+
string input = "TLIST(A1), \"9000\", \"9001\", \"9002\", \"9003\", \"9004\"";
19+
Assert.ThrowsException<ArgumentException>(() => ValueParserUtilities.GetTimeValValueRangeString(input));
20+
}
21+
22+
[TestMethod]
23+
public void GetTimeValValueRangeStringTestInvalidRangeFormatThrowsException()
24+
{
25+
string input = "TLIST(A1, \"9001\")";
26+
Assert.ThrowsException<ArgumentException>(() => ValueParserUtilities.GetTimeValValueRangeString(input));
27+
}
28+
29+
[TestMethod]
30+
public void GetTimeValueStringTestValidInputReturnsString()
31+
{
32+
string input = "TLIST(A1, \"9000-9001\")";
33+
string expected = "9000-9001";
34+
string actual = ValueParserUtilities.GetTimeValValueRangeString(input);
35+
36+
Assert.AreEqual(expected, actual);
37+
}
38+
39+
[TestMethod]
40+
public void GetTimeValueStringTestInputWithTwoRangesThrowsException()
41+
{
42+
string input = "TLIST(A1, \"9000-9001\", \"9002-9003\")";
43+
Assert.ThrowsException<ArgumentException>(() => ValueParserUtilities.GetTimeValValueRangeString(input));
44+
}
45+
46+
[TestMethod]
47+
public void GetTimeValueStringTestInputWithRangeOfThreePartRangeThrowsException()
48+
{
49+
string input = "TLIST(A1, \"9000-9001-9002\")";
50+
Assert.ThrowsException<ArgumentException>(() => ValueParserUtilities.GetTimeValValueRangeString(input));
51+
}
52+
53+
[TestMethod]
54+
public void GetTimeValueStringTestInputRangeWithoutStringDelimetersThrowsException()
55+
{
56+
string input = "TLIST(A1, 9000-9001)";
57+
Assert.ThrowsException<ArgumentException>(() => ValueParserUtilities.GetTimeValValueRangeString(input));
58+
}
59+
60+
[TestMethod]
61+
public void GetTimeValueStringTestInputRangeWithExtraWhitespaceReturnsString()
62+
{
63+
string input = "TLIST(A1, \"9000-9001\" )";
64+
string expected = "9000-9001";
65+
string actual = ValueParserUtilities.GetTimeValValueRangeString(input);
66+
67+
Assert.AreEqual(expected, actual);
68+
}
69+
}
70+
}

0 commit comments

Comments
 (0)