diff --git a/.github/workflows/qa.yaml b/.github/workflows/qa.yaml
new file mode 100644
index 0000000..7f91360
--- /dev/null
+++ b/.github/workflows/qa.yaml
@@ -0,0 +1,15 @@
+name: Контроль качества
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ sonar:
+ uses: autumn-library/workflows/.github/workflows/sonar.yml@v1
+ with:
+ github_repository: oscript-library/xml-parser
+ coveralls: true
+ secrets:
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
new file mode 100644
index 0000000..83d9909
--- /dev/null
+++ b/.github/workflows/release.yaml
@@ -0,0 +1,15 @@
+name: Публикация релиза
+
+on:
+ release:
+ types:
+ - published
+ workflow_dispatch:
+
+jobs:
+ release:
+ uses: autumn-library/workflows/.github/workflows/release.yml@v1
+ with:
+ package_mask: "xml-parser-*.ospx"
+ secrets:
+ PUSH_TOKEN: ${{ secrets.PUSH_TOKEN }}
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
new file mode 100644
index 0000000..c732468
--- /dev/null
+++ b/.github/workflows/test.yaml
@@ -0,0 +1,10 @@
+name: Тестирование
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ test:
+ uses: autumn-library/workflows/.github/workflows/test.yml@v1
diff --git a/.gitignore b/.gitignore
index f16a9fb..a54b066 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,6 @@ bdd-log*.xml
bin/*
tests.xml
*.ospx
-
-coverage/*
\ No newline at end of file
+oscript_modules/
+.bsl-ls-cache/
+out/*
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index a4903c4..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,77 +0,0 @@
-sudo: required
-language: generic
-
-notifications:
- email: false
-env:
- global:
- - CHANNEL=dev
- - PACKAGE_NAME=xml-parser
- matrix:
- - OSCRIPT_VERSION=1_0_20
- - OSCRIPT_VERSION=night-build
-matrix:
- allow_failures:
- - env: OSCRIPT_VERSION=night-build
-
-services:
- - docker
-
-addons:
- sonarqube: true
-
-jdk:
- - oraclejdk8
-
-before_install:
- # Load cached docker images
- - if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi
-
-before_cache:
- # Save tagged docker images
- - >
- mkdir -p $HOME/docker && docker images -a --filter='dangling=false' --format '{{.Repository}}:{{.Tag}} {{.ID}}'
- | xargs -n 2 -t sh -c 'test -e $HOME/docker/$1.tar.gz || docker save $0 | gzip -2 > $HOME/docker/$1.tar.gz'
-
-install:
- - docker pull evilbeaver/onescript:1.0.19
-
-script:
- - docker version
- - docker run -it -e OSCRIPT_VERSION=$OSCRIPT_VERSION -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; sh /work_dir/travis-ci.sh; exit' | tee /tmp/test.log
- - grep 'Результат прогона тестов <Да>' /tmp/test.log
-after_success:
- - bash <(curl -s https://codecov.io/bash) -f coverage/coverage.json
- - ./sonar-qube.sh
-
-cache:
- directories:
- - '$HOME/.m2/repository'
- - '$HOME/.sonar/cache'
- - '$HOME/docker'
-jobs:
- include:
- - stage: Сборка и публикация github & hub.oscript.io
- script: skip
- before_deploy:
- - docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm build ./ ; exit'
- deploy:
- - provider: releases
- api_key: "$GITHUB_OAUTH_TOKEN"
- file_glob: true
- file: $PACKAGE_NAME*.ospx
- skip_cleanup: true
- on:
- branch: master
- tags: true
- - provider: script
- skip_cleanup: true
- script: docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel dev --file ./$PACKAGE_NAME-*.ospx; exit'
- on:
- branch: develop
- - provider: script
- skip_cleanup: true
- script: docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel stable --file ./$PACKAGE_NAME-*.ospx; exit'
- on:
- branch: master
- tags: true
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..82c1d86
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,21 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+
+ {
+ "name": "Отладка 1Script",
+ "type": "oscript",
+ "request": "launch",
+ "program": "${file}",
+ "args": [],
+ "cwd": "${workspaceRoot}",
+ "env": {},
+ "runtimeExecutable": "/home/nfedkin/.local/share/ovm/current/bin/oscript",
+ "runtimeArgs": [],
+ "debugPort": 2801
+ }
+ ]
+}
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index 261eeb9..e42dd92 100644
--- a/LICENSE
+++ b/LICENSE
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
- Copyright [yyyy] [name of copyright owner]
+ Copyright 2018 khorevaa
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/README.md b/README.md
index 8311c29..2cc9f2c 100644
--- a/README.md
+++ b/README.md
@@ -55,6 +55,8 @@ opm install xml-parser
* Чтение данных из файла
```bsl
+ #Использовать xml-parser
+
//<ФайлПФР>
// <ИмяФайла>
// <НазваниеФормата>fb2НазваниеФормата>
@@ -75,12 +77,14 @@ opm install xml-parser
* Запись данных в файл
```bsl
- ПутьКФайлу = "ТутНуженПутьКФайлу";
+ #Использовать xml-parser
+
+ ПутьКФайлу = "ТутНуженПутьКФайлу";
ПроцессорXML = Новый СериализацияДанныхXML();
ДанныеЗаписиXML = Новый Структура("name", "Наименование");
- ПроцессорXML.ЗаписатьВФайл(ПутьКФайлу);
+ ПроцессорXML.ЗаписатьВФайл(ДанныеЗаписиXML, ПутьКФайлу);
// Содержимое файла
//Наименование
diff --git a/features/build.feature b/features/build.feature
deleted file mode 100644
index 6c1fdba..0000000
--- a/features/build.feature
+++ /dev/null
@@ -1,25 +0,0 @@
-# language: ru
-
-Функционал: Проверка сборки продукта
- Как Пользователь
- Я хочу автоматически проверять сборку моего продукта
- Чтобы гарантировать возможность установку моего продукта у пользователей
-
-Контекст: Отключение отладки в логах
- Допустим Я выключаю отладку лога с именем "oscript.lib.v8metadata-config"
- И Я очищаю параметры команды "opm" в контексте
-
-Сценарий: Выполнение команды без параметров
- Когда Я добавляю параметр "build ." для команды "opm"
- И Я выполняю команду "opm"
- Тогда Вывод команды "opm" содержит "Сборка пакета завершена"
- И Вывод команды "opm" не содержит "Внешнее исключение"
- И Код возврата команды "opm" равен 0
-
-Сценарий: Сборка независимого приложения
- Когда Я добавляю параметр "build" для команды "opm"
- И Я добавляю параметр "." для команды "opm"
- И Я выполняю команду "opm"
- Тогда Вывод команды "opm" содержит "Сборка пакета завершена"
- И Вывод команды "opm" не содержит "Внешнее исключение"
- И Код возврата команды "opm" равен 0
\ No newline at end of file
diff --git a/packagedef b/packagedef
index be29105..81e1f38 100644
--- a/packagedef
+++ b/packagedef
@@ -4,13 +4,25 @@
//
Описание.Имя("xml-parser")
- .Версия("0.1.1")
+ .Версия("0.2.0")
.Автор("Khorev Aleksey")
.АдресАвтора("Khorevaa@gmail.com")
.Описание("Библиотека для cериализации данных в xml")
- .ВерсияСреды("1.0.20")
+ .ВерсияСреды("1.9.3")
.ВключитьФайл("src")
.ВключитьФайл("docs")
+ .ВключитьФайл("README.md")
+ .ВключитьФайл("LICENSE")
+ .ВключитьФайл("tests")
+
.ЗависитОт("logos")
+
+ .РазработкаЗависитОт("1bdd")
+ .РазработкаЗависитОт("1testrunner")
+ .РазработкаЗависитОт("asserts")
+ .РазработкаЗависитОт("json")
+ .РазработкаЗависитОт("coverage")
+ .РазработкаЗависитОт("fs")
+
.ОпределяетКласс("СериализацияДанныхXML", "src/Классы/СериализацияДанныхXML.os")
;
diff --git a/sonar-project.properties b/sonar-project.properties
index 5b342b5..ad4fe2b 100644
--- a/sonar-project.properties
+++ b/sonar-project.properties
@@ -1,6 +1,5 @@
# must be unique in a given SonarQube instance
-sonar.projectKey=opensource-oscript-xml-parser
-sonar.organization=sonar-opensource-add
+sonar.projectKey=xml-parser
# this is the name displayed in the SonarQube UI
sonar.projectName=XML parser tool for OScript
@@ -15,4 +14,5 @@ sonar.sources=./src
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
-sonar.coverageReportPaths=coverage/genericCoverage.xml
+sonar.coverageReportPaths=out/genericCoverage.xml
+#sonar.testExecutionReportPaths=out/genericExecution.xml
diff --git a/sonar-qube.sh b/sonar-qube.sh
deleted file mode 100755
index f56f2f2..0000000
--- a/sonar-qube.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-temp=`cat packagedef | grep ".Версия(" | sed 's|[^"]*"||' | sed -r 's/".+//'`
-version=${temp##*|}
-
-if [ "$TRAVIS_SECURE_ENV_VARS" == "true" ]; then
- if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
- sonar-scanner \
- -Dsonar.host.url=https://sonar.silverbulleters.org \
- -Dsonar.analysis.mode=issues \
- -Dsonar.github.pullRequest=$TRAVIS_PULL_REQUEST \
- -Dsonar.github.repository=$TRAVIS_REPO_SLUG \
- -Dsonar.github.oauth=$GITHUB_OAUTH_TOKEN \
- -Dsonar.login=$SONAR_TOKEN \
- -Dsonar.scanner.skip=false
-
- elif [ "$TRAVIS_BRANCH" == "develop" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
- sonar-scanner \
- -Dsonar.host.url=https://sonar.silverbulleters.org \
- -Dsonar.login=$SONAR_TOKEN \
- -Dsonar.projectVersion=$version\
- -Dsonar.scanner.skip=false
- fi
-fi
\ No newline at end of file
diff --git a/sonarlint.json b/sonarlint.json
deleted file mode 100644
index 46765a9..0000000
--- a/sonarlint.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "$schema": "https://raw.githubusercontent.com/silverbulleters/sonarqube-inject-vsc/master/schemas/sonarlint.json",
- "serverId": "SB",
- "projectKey": "opensource-cli"
-}
\ No newline at end of file
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\224\320\260\320\275\320\275\321\213\321\205XML.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\224\320\260\320\275\320\275\321\213\321\205XML.os"
index e982d55..c210319 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\224\320\260\320\275\320\275\321\213\321\205XML.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\224\320\260\320\275\320\275\321\213\321\205XML.os"
@@ -1,3 +1,17 @@
+// Copyright 2018 khorevaa
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#Использовать logos
Перем Лог;
@@ -20,16 +34,18 @@
//
// Параметры:
// ПутьКФайлу - Строка - путь к файлу с данными xml
+// ИспользоватьПолноеИмяУзла - Булево - читать полные имена узлов xml, локальные имена если "Ложь" (по умолчанию)
//
// Возвращаемое значение:
// Соответствие, Структура - результат чтения данных xml
//
-Функция ПрочитатьИзФайла(Знач ПутьКФайлу) Экспорт
+Функция ПрочитатьИзФайла(Знач ПутьКФайлу, Знач ИспользоватьПолноеИмяУзла = Ложь) Экспорт
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу);
+ Чтение.ИгнорироватьПробелы = Ложь;
- Результат = ПрочитатьXML(Чтение);
+ Результат = ПрочитатьXML(Чтение, , ИспользоватьПолноеИмяУзла);
Чтение.Закрыть();
@@ -40,7 +56,7 @@
// Выполняет сериализацию данных в файла
//
// Параметры:
-// ДанныеЗаписиXML - Соответствие, Массив, Структура, Число, Строка. Дата - данные для сериализации в XML
+// ДанныеЗаписиXML - Соответствие, Массив, Структура, Число, Строка, Дата - данные для сериализации в XML
// ПутьКФайлу - Строка - путь к файлу с данными xml
// ЗаписатьОбъявлениеXML - Булево - признак добавления записи объявления XML
//
@@ -64,12 +80,13 @@
// Параметры:
// ЧтениеXML - ЧтениеXML - <описание параметра>
// ИмяКорневогоУзла - Строка - имя текущего узла, для вызова рекурсии
+// ИспользоватьПолноеИмяУзла - Булево - читать полные имена узлов xml, локальные имена если "Ложь" (по умолчанию)
//
// Возвращаемое значение:
// Соответствие, Структура - результат чтения данных xml
//
-Функция ПрочитатьXML(Знач ЧтениеXML, Знач ИмяКорневогоУзла = "") Экспорт
-
+Функция ПрочитатьXML(Знач ЧтениеXML, Знач ИмяКорневогоУзла = "", Знач ИспользоватьПолноеИмяУзла = Ложь) Экспорт
+
РезультатЧтения = Новый Структура;
Атрибуты = Новый Соответствие;
Элементы = Новый Соответствие;
@@ -82,7 +99,7 @@
ПрочитатьАтрибуты(ЧтениеXML, Атрибуты);
Если Не ЧтениеXML.ТипУзла = ТипУзлаXML.КонецСущности Тогда
- ПрочитатьУзлы(ЧтениеXML, РезультатЧтения, ИмяКорневогоУзла);
+ ПрочитатьУзлы(ЧтениеXML, РезультатЧтения, ИмяКорневогоУзла, ИспользоватьПолноеИмяУзла);
КонецЕсли;
УпроститьРезультатЧтения(РезультатЧтения);
@@ -97,7 +114,7 @@
//
// Параметры:
// ЗаписьXML - ЗаписьXML - подготовленная запись ЗаписьXML
-// ДанныеЗаписиXML - Соответствие, Массив, Структура, Число, Строка. Дата - данные для сериализации в XM
+// ДанныеЗаписиXML - Соответствие, Массив, Структура, Число, Строка, Дата - данные для сериализации в XM
//
Процедура ЗаписатьXML(Знач ЗаписьXML, Знач ДанныеЗаписиXML) Экспорт
@@ -187,6 +204,12 @@
КонецПроцедуры
+Процедура ЗаписатьПробельныеСимволы(ЗаписьXML, Текст)
+
+ ЗаписьXML.ЗаписатьБезОбработки(Текст);
+
+КонецПроцедуры
+
Процедура ЗаписатьМассивВXML(ЗаписьXML, Знач ДанныеМассива)
Для каждого ЭлементМассива Из ДанныеМассива Цикл
@@ -223,6 +246,11 @@
ЗаписатьЗначениеXML(ЗаписьXML, КлючЗначение.Значение);
Продолжить;
КонецЕсли;
+
+ Если КлючЗначение.Ключ = "_ПробельныеСимволы" Тогда
+ ЗаписатьПробельныеСимволы(ЗаписьXML, КлючЗначение.Значение);
+ Продолжить;
+ КонецЕсли;
ЗаписатьЗначениеXML(ЗаписьXML, КлючЗначение.Значение, КлючЗначение.Ключ);
@@ -281,23 +309,25 @@
КонецПроцедуры
-Процедура ПрочитатьУзлы(Знач ЧтениеXML, КорневойУзел, Знач ИмяКорневогоУзла)
+Процедура ПрочитатьУзлы(Знач ЧтениеXML, КорневойУзел, Знач ИмяКорневогоУзла, Знач ИспользоватьПолноеИмяУзла)
Пока ЧтениеXML.Прочитать() Цикл
Лог.Отладка("Тип узла <%1>", ЧтениеXML.ТипУзла);
- Лог.Отладка("Имя узла <%1>", ЧтениеXML.ЛокальноеИмя);
+
+ ИмяУзла = ИмяУзла(ЧтениеXML, ИспользоватьПолноеИмяУзла);
+ Лог.Отладка("Имя узла <%1>", ИмяУзла);
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента
- И ЧтениеXML.ЛокальноеИмя = ИмяКорневогоУзла Тогда
+ И ИмяУзла = ИмяКорневогоУзла Тогда
Прервать;
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
- ИмяНовогоУзла = ЧтениеXML.ЛокальноеИмя;
+ ИмяНовогоУзла = ИмяУзла(ЧтениеXML, ИспользоватьПолноеИмяУзла);
Лог.Отладка("Новый узел <%1>", ИмяНовогоУзла);
- СоответствиеУзла = ПрочитатьXML(ЧтениеXML, ИмяНовогоУзла);
+ СоответствиеУзла = ПрочитатьXML(ЧтениеXML, ИмяНовогоУзла, ИспользоватьПолноеИмяУзла);
ВставитьЭлементУзла(КорневойУзел, ИмяНовогоУзла, СоответствиеУзла);
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
@@ -316,6 +346,11 @@
Лог.Отладка("Прочитана СекцияCDATA " + ЗначениеСвойства);
КорневойУзел.Вставить("_CDATA", ЗначениеСвойства);
+ ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.ПробельныеСимволы Тогда
+ ЗначениеСвойства = ЧтениеXML.Значение;
+ Лог.Отладка("Прочитаны пробельные символы " + ЗначениеСвойства);
+ КорневойУзел.Вставить("_ПробельныеСимволы", ЗначениеСвойства);
+
КонецЕсли;
КонецЦикла;
@@ -362,4 +397,16 @@
КонецПроцедуры
+Функция ИмяУзла(ЧтениеXML, Знач ИспользоватьПолноеИмяУзла)
+
+ Если ИспользоватьПолноеИмяУзла Тогда
+ ИмяУзла = ЧтениеXML.Имя;
+ Иначе
+ ИмяУзла = ЧтениеXML.ЛокальноеИмя;
+ КонецЕсли;
+
+ Возврат ИмяУзла;
+
+КонецФункции
+
#КонецОбласти
\ No newline at end of file
diff --git a/tasks/coverage.os b/tasks/coverage.os
index 5e59531..fe41290 100644
--- a/tasks/coverage.os
+++ b/tasks/coverage.os
@@ -1,31 +1,31 @@
-#Использовать "../src"
#Использовать 1commands
-#Использовать coverage
#Использовать fs
+#Использовать coverage
+
+СистемнаяИнформация = Новый СистемнаяИнформация;
+ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
-ФС.ОбеспечитьПустойКаталог("coverage");
-ПутьКСтат = "coverage/stat.json";
+ФС.ОбеспечитьПустойКаталог("out");
+ПутьКСтат = "out/stat.json";
Команда = Новый Команда;
Команда.УстановитьКоманду("oscript");
-Команда.ДобавитьПараметр("-encoding=utf-8");
-Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат));
-Команда.ДобавитьПараметр("tasks/test.os");
+Если НЕ ЭтоWindows Тогда
+ Команда.ДобавитьПараметр("-encoding=utf-8");
+КонецЕсли;
+Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат));
+Команда.ДобавитьПараметр("tasks/test.os"); // Файла запуска тестов
Команда.ПоказыватьВыводНемедленно(Истина);
КодВозврата = Команда.Исполнить();
-Файл_Стат = Новый Файл(ПутьКСтат);
-
-ИмяПакета = "ххх";
-
ПроцессорГенерации = Новый ГенераторОтчетаПокрытия();
ПроцессорГенерации.ОтносительныеПути()
- .ФайлСтатистики(Файл_Стат.ПолноеИмя)
+ .РабочийКаталог("out")
+ .ИмяФайлаСтатистики()
.GenericCoverage()
.Cobertura()
- .Clover(ИмяПакета)
.Сформировать();
-ЗавершитьРаботу(КодВозврата);
\ No newline at end of file
+ЗавершитьРаботу(КодВозврата);
diff --git a/tasks/oscript.cfg b/tasks/oscript.cfg
new file mode 100644
index 0000000..4101683
--- /dev/null
+++ b/tasks/oscript.cfg
@@ -0,0 +1 @@
+lib.additional=../oscript_modules
diff --git a/tasks/test.os b/tasks/test.os
index 59bf4a9..944ba1e 100644
--- a/tasks/test.os
+++ b/tasks/test.os
@@ -1,86 +1,43 @@
-#Использовать "../src"
-#Использовать 1bdd
#Использовать 1testrunner
+#Использовать fs
Функция ПрогнатьТесты()
-
+
Тестер = Новый Тестер;
+ Тестер.УстановитьФорматЛогФайла(Тестер.ФорматыЛогФайла().GenericExec);
- ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests");
- ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, "..");
+ ПутьКТестам = "tests";
+ ПутьКОтчетуJUnit = "out";
- КаталогТестов = Новый Файл(ПутьКТестам);
- Если Не КаталогТестов.Существует() Тогда
- Сообщить(СтрШаблон("Не найден каталог тестов %1", ПутьКТестам));
- Возврат Истина;
- КонецЕсли;
+ ФС.ОбеспечитьПустойКаталог(ПутьКОтчетуJUnit);
РезультатТестирования = Тестер.ТестироватьКаталог(
- КаталогТестов,
+ Новый Файл(ПутьКТестам),
Новый Файл(ПутьКОтчетуJUnit)
);
Успешно = РезультатТестирования = 0;
-
+
Возврат Успешно;
КонецФункции // ПрогнатьТесты()
-Функция ПрогнатьФичи()
-
- ПутьОтчетаJUnit = "./bdd-log.xml";
-
- КаталогФич = ОбъединитьПути(".", "features");
-
- Файл_КаталогФич = Новый Файл(КаталогФич);
- Если Не Файл_КаталогФич.Существует() Тогда
- Сообщить(СтрШаблон("Не найден каталог фич %1", КаталогФич));
- Возврат Истина;
- КонецЕсли;
-
- ИсполнительБДД = Новый ИсполнительБДД;
- РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич);
- ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
-
- СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся;
- Если РезультатыВыполнения.Строки.Количество() > 0 Тогда
-
- СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
-
- КонецЕсли;
-
- ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit;
- ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit);
-
- Сообщить(СтрШаблон("Результат прогона фич <%1>
- |", ИтоговыйРезультатВыполнения));
+// основной код
- Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался;
-КонецФункции // ПрогнатьФичи()
-
-ТестыПрошли = Истина;
+ТекКаталог = ТекущийКаталог();
Попытка
ТестыПрошли = ПрогнатьТесты();
-
Исключение
ТестыПрошли = Ложь;
Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
-ФичиПрошли = Истина;
-
-Попытка
- ФичиПрошли = ПрогнатьФичи();
-Исключение
- ФичиПрошли = Ложь;
- Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно
- |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
-КонецПопытки;
+УстановитьТекущийКаталог(ТекКаталог);
-Если Не ТестыПрошли Или Не ФичиПрошли Тогда
+Если Не ТестыПрошли Тогда
ВызватьИсключение "Тестирование завершилось неудачно!";
Иначе
Сообщить(СтрШаблон("Результат прогона тестов <%1>
|", ТестыПрошли));
-КонецЕсли;
\ No newline at end of file
+КонецЕсли;
diff --git a/tests/fixtures/test-full-names.xml b/tests/fixtures/test-full-names.xml
new file mode 100644
index 0000000..1fb4563
--- /dev/null
+++ b/tests/fixtures/test-full-names.xml
@@ -0,0 +1,3 @@
+
+ Значение
+
diff --git a/tests/fixtures/test-rewrite.xml b/tests/fixtures/test-rewrite.xml
new file mode 100644
index 0000000..e55fbfa
--- /dev/null
+++ b/tests/fixtures/test-rewrite.xml
@@ -0,0 +1,3 @@
+
+ InformationRegister.РегистрСведений1
+
diff --git "a/tests/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\224\320\260\320\275\320\275\321\213\321\205XML_test.os" "b/tests/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\224\320\260\320\275\320\275\321\213\321\205XML_test.os"
index 854a834..a83df23 100644
--- "a/tests/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\224\320\260\320\275\320\275\321\213\321\205XML_test.os"
+++ "b/tests/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\224\320\260\320\275\320\275\321\213\321\205XML_test.os"
@@ -1,36 +1,17 @@
+// BSLLS:LineLength-off
#Использовать "../src"
#Использовать asserts
#Использовать logos
#Использовать tempfiles
#Использовать json
-Перем юТест;
Перем Лог;
-Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
-
- юТест = Тестирование;
-
- ИменаТестов = Новый Массив;
-
- ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеXMLВСоответствие");
- ИменаТестов.Добавить("ТестДолжен_ПроверитьЗаписьXMLИзСоответствия");
-
- Возврат ИменаТестов;
-
-КонецФункции
-
-
-
+&Тест
Процедура ТестДолжен_ПроверитьЧтениеXMLВСоответствие() Экспорт
Лог = Логирование.ПолучитьЛог("oscript.lib.xml-reader-test");
Лог.УстановитьУровень(УровниЛога.Отладка);
- // Лог2 = Логирование.ПолучитьЛог("oscript.lib.parser-xml");
- // Лог2.УстановитьУровень(УровниЛога.Отладка);
-
- // ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "fake-rules.xml");
- // ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "fake-Configuration.xml");
ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-file.xml");
ПроцессорXML = Новый СериализацияДанныхXML();
@@ -40,19 +21,18 @@
ПоказатьНастройкиВРежимеОтладки(РезультатЧтения);
Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][0]["ИмяФайла"]["НазваниеФормата"], "fb2", "Результат должен совпадать с ожиданиями.");
- Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["_Элементы"]["Запрос"]["_Атрибуты"]["name"], "Имя", "Результат должен совпадать с ожиданиями.");
- Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["_Элементы"]["ОписаниеТиповФайла"], "Внешний", "Результат должен совпадать с ожиданиями.");
- Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["_Комментарий"], " <Запрос/> ", "Результат должен совпадать с ожиданиями.");
+ Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["Запрос"]["_Атрибуты"]["name"], "Имя", "Результат должен совпадать с ожиданиями.");
+ Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["ОписаниеТиповФайла"], "Внешний", "Результат должен совпадать с ожиданиями.");
+ // TODO: Расскоментировать, когда/если движок снова начнет читать комментарии в элементе с под-элементами.
+ // Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["_Комментарий"], " <Запрос/> ", "Результат должен совпадать с ожиданиями.");
КонецПроцедуры
+&Тест
Процедура ТестДолжен_ПроверитьЗаписьXMLИзСоответствия() Экспорт
Лог = Логирование.ПолучитьЛог("oscript.lib.xml-reader-test");
Лог.УстановитьУровень(УровниЛога.Отладка);
-
- // ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "fake-rules.xml");
- // ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "fake-Configuration.xml");
ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-file.xml");
ПроцессорXML = Новый СериализацияДанныхXML();
@@ -65,9 +45,70 @@
РезультатЧтения = ПроцессорXML.ПрочитатьИзФайла(ФейковыйФайл);
Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][0]["ИмяФайла"]["НазваниеФормата"], "fb2", "Результат должен совпадать с ожиданиями.");
- Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["_Элементы"]["Запрос"]["_Атрибуты"]["name"], "Имя", "Результат должен совпадать с ожиданиями.");
- Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["_Элементы"]["ОписаниеТиповФайла"], "Внешний", "Результат должен совпадать с ожиданиями.");
- Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["_Комментарий"], " <Запрос/> ", "Результат должен совпадать с ожиданиями.");
+ Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["Запрос"]["_Атрибуты"]["name"], "Имя", "Результат должен совпадать с ожиданиями.");
+ Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["ОписаниеТиповФайла"], "Внешний", "Результат должен совпадать с ожиданиями.");
+ // TODO: Расскоментировать, когда/если движок снова начнет читать комментарии в элементе с под-элементами.
+ // Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["_Комментарий"], " <Запрос/> ", "Результат должен совпадать с ожиданиями.");
+
+КонецПроцедуры
+
+&Тест
+&Параметры(Истина, "frst:data", "scnd:data")
+&Параметры(Ложь, "data", "data")
+Процедура ТестДолжен_ПроверитьЧтениеПолныхИменXML(ИспользоватьПолноеИмяУзла, ИмяУзлаПервогоУровня, ИмяУзлаВторогоУровня) Экспорт
+
+ Лог = Логирование.ПолучитьЛог("oscript.lib.xml-reader-test");
+
+ ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-full-names.xml");
+
+ ПроцессорXML = Новый СериализацияДанныхXML();
+
+ РезультатЧтения = ПроцессорXML.ПрочитатьИзФайла(ФейковыйФайл, ИспользоватьПолноеИмяУзла);
+
+ УзелПервогоУровня = РезультатЧтения[ИмяУзлаПервогоУровня];
+ Утверждения.ПроверитьНеРавенство(УзелПервогоУровня, Неопределено, "Должен быть найден узел первого уровня");
+
+ УзелВторогоУровня = УзелПервогоУровня._Элементы[ИмяУзлаВторогоУровня];
+ Утверждения.ПроверитьРавенство(УзелВторогоУровня, "Значение", "Должно быть найдено значение узла второго уровня");
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьСохранениеПолныхИменXMLПриПерезаписи() Экспорт
+
+ Лог = Логирование.ПолучитьЛог("oscript.lib.xml-reader-test");
+
+ ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-rewrite.xml");
+
+ ПроцессорXML = Новый СериализацияДанныхXML();
+
+ РезультатЧтенияДо = ПроцессорXML.ПрочитатьИзФайла(ФейковыйФайл, Истина);
+
+ ВременныйФайл = ВременныеФайлы.НовоеИмяФайла("xml");
+
+ ПроцессорXML.ЗаписатьВФайл(РезультатЧтенияДо, ВременныйФайл);
+
+ РезультатЧтенияПосле = ПроцессорXML.ПрочитатьИзФайла(ВременныйФайл, Истина);
+
+ Утверждения.ПроверитьРавенство(
+ РезультатЧтенияДо["MetaDataObject"]._Атрибуты["xmlns:xr"],
+ РезультатЧтенияПосле["MetaDataObject"]._Атрибуты["xmlns:xr"],
+ "Значения после перезаписи должны совпадать");
+
+ Утверждения.ПроверитьРавенство(
+ РезультатЧтенияДо["MetaDataObject"]._Атрибуты["xmlns:xsi"],
+ РезультатЧтенияПосле["MetaDataObject"]._Атрибуты["xmlns:xsi"],
+ "Значения после перезаписи должны совпадать");
+
+ Утверждения.ПроверитьРавенство(
+ РезультатЧтенияДо["MetaDataObject"]._Элементы["xr:Item"]._Значение,
+ РезультатЧтенияПосле["MetaDataObject"]._Элементы["xr:Item"]._Значение,
+ "Значения после перезаписи должны совпадать");
+
+ Утверждения.ПроверитьРавенство(
+ РезультатЧтенияДо["MetaDataObject"]._Элементы["xr:Item"]._Атрибуты["xmlns:xsi"],
+ РезультатЧтенияПосле["MetaDataObject"]._Элементы["xr:Item"]._Атрибуты["xmlns:xsi"],
+ "Значения после перезаписи должны совпадать");
КонецПроцедуры
diff --git a/travis-ci.sh b/travis-ci.sh
deleted file mode 100644
index 21745b9..0000000
--- a/travis-ci.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-set -e
-echo "Устанавливаю версию OScript <$OSCRIPT_VERSION>"
-curl http://oscript.io/downloads/$OSCRIPT_VERSION/deb > oscript.deb
-dpkg -i oscript.deb
-rm -f oscript.deb
-
-opm install 1testrunner;
-opm install 1bdd;
-opm install notify;
-opm install coverage;
-opm install;
-
-opm run coverage;
-
-