summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RhSolutions.Parsers.Tests/RautitanFittingsTests.cs52
-rw-r--r--RhSolutions.Parsers.Tests/RautitanPipesTests.cs1
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs59
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs7
4 files changed, 62 insertions, 57 deletions
diff --git a/RhSolutions.Parsers.Tests/RautitanFittingsTests.cs b/RhSolutions.Parsers.Tests/RautitanFittingsTests.cs
index 76a936b..95581af 100644
--- a/RhSolutions.Parsers.Tests/RautitanFittingsTests.cs
+++ b/RhSolutions.Parsers.Tests/RautitanFittingsTests.cs
@@ -7,13 +7,13 @@ public class RautitanFittingsTests : ProductParsersTests
[TestCase("Пресс-втулка 20", "Монтажная гильза 20")]
[TestCase("UPONOR Q&E EVOLUTION КОЛЬЦО БЕЛОЕ 16 '900Ф", "Монтажная гильза 16")]
public void SleeveTest(string query, string modified)
- => Invoke(productType: "Монтажная гильза", query, modified);
-
+ => Invoke(productType: "Монтажная гильза", query, modified);
+
[TestCase("Гофра 16", "Гофротруба защитн.для ПЭ-трубы 16/17")]
[TestCase("Гофра 20", "Гофротруба защитн.для ПЭ-трубы 20")]
public void ProtectivePipeTest(string query, string modified)
=> Invoke(productType: "Гофротруба RAUTITAN", query, modified);
-
+
[TestCase("Фиксирующий желоб для ПЭ-трубы 16", "Фиксирующий желоб для ПЭ-трубы 16/17")]
[TestCase("Фиксирующий желоб для ПЭ-трубы 20", "Фиксирующий желоб для ПЭ-трубы 20")]
public void SupportingClipTest(string query, string modified)
@@ -32,43 +32,45 @@ public class RautitanFittingsTests : ProductParsersTests
[TestCase("переходник 16-20", "Муфта соединительная переходная 20-16")]
[TestCase("Соединение труба-труба 20/20, бронза", "Муфта соединительная равнопроходная 20")]
[TestCase("Муфта соединительная переходная 20x16 для труб из сшитого полиэтилена аксиальный", "Муфта соединительная переходная 20-16")]
+ [TestCase("Муфта двухсторонняя переходная латунная 20/14", "Муфта соединительная переходная 20-16")]
public void CouplingTest(string query, string modified)
=> Invoke(productType: "Муфта соединительная", query, modified);
-
+
[TestCase("Переходник с внутренней резьбой 16xG 3/4\" для труб из сшитого полиэтилена аксиальный", "Переходник с внутренней резьбой -угольник-переходник 16 3/4")]
- [TestCase("Переходник на внутреннюю резьбу 20", "Переходник с внутренней резьбой -угольник-переходник 20 1/2")]
+ [TestCase("Переходник на внутреннюю резьбу 20", "Переходник с внутренней резьбой -угольник-переходник 20 1/2")]
[TestCase("32 Соединение прямое с внутренней резьбой, 40 х 1 1/2", "Переходник с внутренней резьбой -угольник-переходник 40 1 1/2")]
[TestCase("Переходник с вн. резьбой 16 20", "Переходник с внутренней резьбой -угольник-переходник 16 3/4")]
[TestCase("Переход 26х3/4\" ВР", "Переходник с внутренней резьбой -угольник-переходник 25 3/4")]
+ [TestCase("Муфта латунная РВ 14 Rp1/2", "Переходник с внутренней резьбой -угольник-переходник 16 1/2")]
public void AdapterInternalTest(string query, string modified)
=> Invoke(productType: "Переходник на внутреннюю резьбу", query, modified);
-
+
[TestCase("Угольник 90°, 40 PX", "Угольник -PLATINUM 90 40")]
public void ElbowTest(string query, string modified)
=> Invoke(productType: "Угольник RAUTITAN", query, modified);
-
+
[TestCase("Уголок соединительный с ниппелем 20 х 1/2'', бронза", "Угольник-переходник с наружной резьбой 20 1/2")]
public void ThreadElbowExternalTest(string query, string modified)
=> Invoke(productType: "Угольник с наружной резьбой", query, modified);
-
+
[TestCase("Уголок соединительный с муфтой 16 х 1/2\", бронза", "Угольник-переходник с внутренней резьбой 16 1/2")]
public void ThreadElbowInternalTest(string query, string modified)
=> Invoke(productType: "Угольник с внутренней резьбой", query, modified);
-
+
[TestCase("Угольник-переходник с накидной гайкой 16-G 1/2 RX+", "Угольник-переходник с накидной гайкой 16 1/2")]
[TestCase("Соединение угловое с накидной гайкой 16 х 1/2\", латунь", "Угольник-переходник с накидной гайкой 16 1/2")]
public void ScrewcapElbowTest(string query, string modified)
=> Invoke(productType: "Угольник с накидной гайкой", query, modified);
-
+
[TestCase("Тройник с внутр. резьбой на боков. проходе 25-Rp 1/2-25 RX+", "Тройник с внутр. резьбой на боков. проходе 25-Rp 1/2-25")]
[TestCase("Тройник настенный с внутренней резьбой 16-Rp1/2-16 RX+", "Тройник настенный с внутренней резьбой 16-Rp1/2-16")]
public void ThreadTPieceInternalTest(string query, string modified)
=> Invoke(productType: "Тройник RAUTITAN резьбовой внутренний", query, modified);
-
+
[TestCase("Тройник RAUTITAN RX+ с наружной резьбой 20-20-R 3/4", "Тройник с наружной резьбой 20-20-R 3/4")]
public void ThreadTPieceExternalTest(string query, string modified)
=> Invoke(productType: "Тройник RAUTITAN резьбовой наружный", query, modified);
-
+
[TestCase("Фиксатор поворота трубы 16/17/90°, без колец (оцинк. сталь)", "Фиксатор поворота 16/17/90°")]
[TestCase("Дуга 90° 25", "Фиксатор поворота 25/90°")]
[TestCase("Дуга 90° r/d >= 2.5. Ø25 (767025)", "Фиксатор поворота 25/90°")]
@@ -79,74 +81,74 @@ public class RautitanFittingsTests : ProductParsersTests
[TestCase("Фиксатор поворота с кольцами 45°, 16", "Фиксатор поворота с кольцами 45° 16")]
public void BendFormerSanitaryTest(string query, string modified)
=> Invoke(productType: "Фиксатор поворота водоснабжение", query, modified);
-
+
[TestCase("Угольник настенный с наружной резьбой 16-R 1/2 RX+", "Угольник настенный с наружной резьбой 16-R 1/2")]
public void ThreadElbowWallExternalTest(string query, string modified)
=> Invoke(productType: "Угольник настенный наружный", query, modified);
-
+
[TestCase("Угольник настенный с внутр. резьбой 16-Rp 1/2 RX+", "Угольник настенный внутр. резьба 16-Rp 1/2")]
[TestCase("Угольник настенный с длинным патрубком, внутр. резьба 16-Rp 1/2 RX+", "Угольник настенный внутр. резьба длинный 16-Rp 1/2")]
[TestCase("Уголок с настенным креплением, удлиненный, 16 х 1/2'', бронза", "Угольник настенный внутр. резьба длинный 16-Rp 1/2")]
public void ThreadElbowWallInternalTest(string query, string modified)
=> Invoke(productType: "Угольник настенный внутренний", query, modified);
-
+
[TestCase("Проточный настенный угольник 16/16-Rp 1/2 длинный RX+", "Проточный настенный угольник 16/16-Rp 1/2 длинный")]
[TestCase("Проточный настенный угольник 16/16-Rp 1/2 короткий RX+", "Проточный настенный угольник 16/16-Rp 1/2 короткий")]
public void ThreadElbowDoubleWallInternalTest(string query, string modified)
=> Invoke(productType: "Проточный настенный угольник", query, modified);
-
+
[TestCase("Трубка из. нерж. стали для подкл. радиатора, Г-образная 16/250", "Трубка Г-образная 16/250")]
[TestCase("Монтажная трубка для радиатора, конечная, 16 х 15 х 300 мм", "Трубка Г-образная 16/250")]
[TestCase("L-образная латунная трубка для радиатора РОС 16х15х300", "Трубка Г-образная 16/250")]
public void ConnectionBendTest(string query, string modified)
=> Invoke(productType: "Трубка Г-образная", query, modified);
-
+
[TestCase("Трубка из. нерж. стали для подкл. радиатора, Т-образная 16/250", "Трубка Т-образная 16/250")]
[TestCase("Монтажная трубка для радиатора, проходная 20 х 15 х 300 мм", "Трубка Т-образная 20/250")]
[TestCase("T-образная латунная трубка для радиатора РОС 16х15х300", "Трубка Т-образная 16/250")]
public void ConnectionTeeTest(string query, string modified)
=> Invoke(productType: "Трубка Т-образная", query, modified);
-
+
[TestCase("Заглушка для полимерн. трубы 16 RX+", "Заглушка для полимерн. трубы 16")]
[TestCase("Заглушка 20", "Заглушка для полимерн. трубы 20")]
[TestCase("Заглушка, 16, латунь", "Заглушка для полимерн. трубы 16")]
public void DummyPlugTest(string query, string modified)
=> Invoke(productType: "Заглушка труб RAUTITAN", query, modified);
-
+
[TestCase("Концовка разб. 3/4'' (еврок) для универс. трубы 16", "Резьбозажимное соединение flex/pink 16х2,2xG3/4")]
[TestCase("Переходник компрессионный PEX 20х2.8-G 3/4\" Евроконус", "Резьбозажимное соединение flex/pink 20х2,8xG3/4")]
[TestCase("Резьбозажимное соединение flex/pink 20х2,8xG3/4", "Резьбозажимное соединение flex/pink 20х2,8xG3/4")]
public void EuroconeFlexTest(string query, string modified)
=> Invoke(productType: "Резьбозажимное flex", query, modified);
-
+
[TestCase("Резьбозажимное соединение stabil 16,2x2,6xG3/4", "Резьбозажимное соединение stabil 16,2x2,6xG3/4")]
[TestCase("Резьбозажимное соединение stabil 20x2,9xG3/4", "Резьбозажимное соединение stabil 20x2,9xG3/4")]
[TestCase("Концовка разб.3/4''(еврок.) для PE-Xc и PE-MDXс 16", "Резьбозажимное соединение stabil 16,2x2,6xG3/4")]
public void EuroconeStabilTest(string query, string modified)
=> Invoke(productType: "Резьбозажимное stabil", query, modified);
-
+
[TestCase("Переходник на евроконус 16-G 3/4", "Переходник на евроконус 16-G 3/4")]
[TestCase("Соед.прям. с вн.резьбой (н.гайка, еврок.) 16 ник.", "Переходник на евроконус 16-G 3/4")]
[TestCase("Переходник с накидной гайкой 16x2.2 -G 3/4\" Евроконус, c гильзой в комплекте", "Переходник на евроконус 16-G 3/4")]
public void EuroconeAdapterTest(string query, string modified)
=> Invoke(productType: "Переходник на евроконус", query, modified);
-
+
[TestCase("Резьбозажимное соединение для металлической трубки G 3/4 -15", "Резьбозажимное соединение для металлической трубки G 3/4 -15")]
[TestCase("Концовка для монтажной трубы 15 х 1/2''", "Резьбозажимное соединение для металлической трубки G 3/4 -15")]
[TestCase("Фитинг подключения L и T-образной медной трубки - D15 - G 3/4", "Резьбозажимное соединение для металлической трубки G 3/4 -15")]
public void EuroconeConnectionBendTest(string query, string modified)
=> Invoke(productType: "Резьбозажимное для трубки", query, modified);
-
+
[TestCase("Ниппель", "К-т двух резьбозажим. нипелей с нар.резьбой 1/2х3/4")]
public void NippelTest(string query, string modified)
=> Invoke(productType: "Ниппель", query, modified);
-
+
[TestCase("Распределительный коллектор G1 2 отвода G 3/4", "Распределительный коллектор G1 2")]
[TestCase("Коллектор Квартирный с отсекающими кранами, латунь ДУ20, НР-ВР 3/4\", 3 контура НР 1/2", "Распределительный коллектор G1 3")]
[TestCase("Коллектор Квартирный с отсекающими кранами, латунь ДУ20, НР-ВР 3/\", 4 контура НР 1/2\"", "Распределительный коллектор G1 4")]
public void ManifoldG1Test(string query, string modified)
=> Invoke(productType: "Коллектор G1", query, modified);
-
+
[TestCase("Распределительный коллектор HLV на 2 группы нерж. сталь", "Распределительный коллектор HLV на 2 групп")]
[TestCase("Распределительный коллектор HLV на 12 групп нерж. сталь", "Распределительный коллектор HLV на 12 групп")]
public void ManifoldHLVTest(string query, string modified)
diff --git a/RhSolutions.Parsers.Tests/RautitanPipesTests.cs b/RhSolutions.Parsers.Tests/RautitanPipesTests.cs
index d08cff1..37f2dff 100644
--- a/RhSolutions.Parsers.Tests/RautitanPipesTests.cs
+++ b/RhSolutions.Parsers.Tests/RautitanPipesTests.cs
@@ -7,6 +7,7 @@ public class RautitanPipesTests : ProductParsersTests
[TestCase("Труба flex 16", "Труба РЕХАУ FLEX 16x2,2")]
[TestCase("Унив.труба RAUTITAN flex 32x4,4, прям.отрезки 6м", "Труба РЕХАУ FLEX 32x4,4")]
[TestCase("Труба flex 32", "Труба РЕХАУ FLEX 32x4,4")]
+ [TestCase("Труба PERTAL² в серой изоляции 6 мм - бухта 14×2,0", "Труба РЕХАУ FLEX 16x2,2")]
public void FlexPipeTest(string query, string modified)
=> Invoke(productType: "Flex", query, modified);
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs
index 7dba12c..867e886 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs
@@ -4,35 +4,36 @@ namespace RhSolutions.Parsers.Fittings;
public abstract class DrinkingWaterHeatingFitting : IProductParser
{
- protected static readonly Regex _diameter =
- new(@"(?<!^)[\b\D]?(?<Diameter>16|20|25|32|40|50|63|15|26)[\b\D]?");
- protected static readonly Regex _angle =
- new(@"(?<!^)([\b\D])(?<Angle>45|90)([\b\D]|$)");
- protected static readonly Regex _thread =
- new(@"(?<!^)([\b\D])(?<Thread>1\s+1/4|1\s+1/2|1/2|3/4|2|1)([\b\D]|$)");
+ protected static readonly Regex _diameter =
+ new(@"(?<!^|\d)(?<Diameter>16|20|25|32|40|50|63|14|15|26)(?!\d)");
+ protected static readonly Regex _angle =
+ new(@"(?<!^|\d)(?<Angle>45|90)(?!\d)");
+ protected static readonly Regex _thread =
+ new(@"(?<!^|\d)(?<Thread>1\s+1/4|1\s+1/2|1/2|3/4|2|1)(?!\d)");
- protected virtual string _title { get; } = string.Empty;
+ protected virtual string _title { get; } = string.Empty;
- public virtual bool TryParse(string input, out string output)
- {
- var match = _diameter.Match(input);
- if (match.Success)
- {
- output = $"{_title} {match.Groups["Diameter"]}";
- return true;
- }
- else
- {
- output = string.Empty;
- return false;
- }
- }
- protected string NormalizeDiameter(string diameter)
- {
- return diameter switch
- {
- "26" => "25",
- _ => diameter
- };
- }
+ public virtual bool TryParse(string input, out string output)
+ {
+ var match = _diameter.Match(input);
+ if (match.Success)
+ {
+ output = $"{_title} {match.Groups["Diameter"]}";
+ return true;
+ }
+ else
+ {
+ output = string.Empty;
+ return false;
+ }
+ }
+ protected string NormalizeDiameter(string diameter)
+ {
+ return diameter switch
+ {
+ "14" => "16",
+ "26" => "25",
+ _ => diameter
+ };
+ }
}
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs b/RhSolutions.Parsers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs
index 250d129..b8845f5 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs
@@ -5,8 +5,8 @@ namespace RhSolutions.Parsers.Pipes;
public abstract class DrinkingWaterHeatingPipe : IProductParser
{
protected static readonly Regex _diameter =
- new(@"([\b\D]|^)?(?<Diameter>16|20|25|32|40|50|63|26)([\b\D]|$)");
- protected static readonly Regex _type =
+ new(@"(?<!^|\d)(?<Diameter>16|20|25|32|40|50|63|14|15|26)(?!\d)");
+ protected static readonly Regex _type =
new(@"([\b\W])(?<Type>бухт|отр|штанг)([\b\w\.\s])");
protected virtual string _title { get; } = string.Empty;
@@ -53,11 +53,12 @@ public abstract class DrinkingWaterHeatingPipe : IProductParser
}
return true;
}
-
+
protected string NormalizeDiameter(string diameter)
{
return diameter switch
{
+ "14" => "16",
"26" => "25",
_ => diameter
};