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; - -