Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update 'ignoreComments' option #116

Closed
eGavr opened this issue Dec 30, 2014 · 35 comments · Fixed by #117
Closed

Update 'ignoreComments' option #116

eGavr opened this issue Dec 30, 2014 · 35 comments · Fixed by #117

Comments

@eGavr
Copy link
Member

eGavr commented Dec 30, 2014

The new realization of this option:

ignoreComments: {
    conditionalComments: false,
    normalComments: true
}
@eGavr eGavr mentioned this issue Dec 30, 2014
@arikon
Copy link
Member

arikon commented Feb 3, 2015

@j0tunn @eGavr Стоит сделать

@eGavr
Copy link
Member Author

eGavr commented Feb 3, 2015

А зачем нужны комментарии?

@alexbaumgertner
Copy link
Member

@eGavr чтобы не плодить файлы тестов, когда нужно проверить например разные модификаторы или разный проброс параметров в одинаковых блоках – можно в одном файле сделать несколько шаблонов
/cc @Coltspb

@alexbaumgertner
Copy link
Member

@j0tunn @eGavr @arikon очень стоит, для нас это Блокер

@j0tunn
Copy link

j0tunn commented Feb 3, 2015

@alexbaumgertner почему это блокер? Тесты подправить - да и все, тем более, что у тебя там просто нужно свойства местами поменять

@eGavr
Copy link
Member Author

eGavr commented Feb 3, 2015

Я вижу смысл в том, чтобы сейчас править тесты руками, а более умная проверка conditional comments появится вскоре.

@sipayRT
Copy link

sipayRT commented Feb 3, 2015

чтобы не плодить файлы тестов, когда нужно проверить например разные модификаторы или разный проброс параметров в одинаковых блоках – можно в одном файле сделать несколько шаблонов

зачем вообще хотеть такого? Давайте тогда уже сразу все в один файл писать :) Есть один независимый тест, не нужно смешивать.

@eGavr
Copy link
Member Author

eGavr commented Feb 3, 2015

Итак!

решили, что СС будут проверяться как строка, а внутреннее содержание - как тэги (с игнорированием последовательности атрибутов и т.д.)

Руководствуюсь этим алгоритмом. Все "ЗА"?

@alexbaumgertner
Copy link
Member

@j0tunn поправил, все равно не проходит:
2015-02-03 17-43-20 update ignorecomments option issue 116 bem html-differ

ПС: убрал еще пробелов и стало проходить

@eGavr
Copy link
Member Author

eGavr commented Feb 3, 2015

Дело в том, что эти комментарии на данном этапе сравниваются как обычный текст, поэтому пробелы и переносы строк будут учитваться вне зависимости от опции ignoreWhitespaces, так и было задумано по алгоритму, ведь по логике мы и должны так делать.

Кейс с CC я учту ASAP. Уж помучайтесь чуть-чуть и поудаляйте пробелы ;) Поправлю, и все будет как вам надо в скором времени.

Игнорировать комменты мы не можем, так как @sipayRT привел реальный пример баги.

@sipayRT
Copy link

sipayRT commented Feb 3, 2015

Руководствуюсь этим алгоритмом. Все "ЗА"?

я ЗА

@alexbaumgertner
Copy link
Member

@eGavr ок :)
@eGavr @j0tunn @sipayRT спасибо за разъяснения и коментарии, поправлю в библиотеках.

@sipayRT
Copy link

sipayRT commented Feb 3, 2015

image

@persidskiy
Copy link

Вы главное скажите, ручные комментарии можно будет писать в эталонных шаблонах?

@eGavr
Copy link
Member Author

eGavr commented Feb 3, 2015

Нет.

@persidskiy
Copy link

Нет, так не пойдет, давай сделаем сразу хорошо.

Предвещая вопрос зачем мне комментарии и что я этого не должен хотеть, отвечу сразу. Я могу хотеть держать эталонные файлы в опрятном состоянии. На это есть куча причин из жизни и если вы готовы потрать на это наше время, я могу в этом убедить)

@eGavr
Copy link
Member Author

eGavr commented Feb 3, 2015

Вроде бы как решили выше в переписках, что ничего лишнего быть не должно

@sipayRT
Copy link

sipayRT commented Feb 4, 2015

Я могу хотеть держать эталонные файлы в опрятном состоянии.

имхо, эталоны без комментариев - это и есть опрятность. Эталон - это то, что должно сгенериться в результате работы шаблонизатора. В итоговый результат не нужно записывать что-то еще. А название эталона должно говорить что там тестируется.

@eGavr
Copy link
Member Author

eGavr commented Feb 5, 2015

Давайте определяться...

@sipayRT всех убедил, что игнорировать комментарии мы не будем, и тесты должны быть без лишних комментариев?
Conditional comments будут сравниваться по общему принципу (то есть не будем учитывать порядок следования атрибутов в тэгах)

@sipayRT
Copy link

sipayRT commented Feb 5, 2015

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!--[if lt IE 9]>
       <script src="//yastatic.net/es5-shims/0.0.1/es5-shims.min.js"></script>
    <![endif]-->
    <meta charset="utf-8">
    <title>bem-components: select</title>
    <!--[if gt IE 8]><!-->
        <link rel="stylesheet" href="_simple.css">
    <!--<![endif]-->
    <!--[if IE 8]>
        <link rel="stylesheet" href="_simple.ie8.css"/>
    <![endif]-->
    <script type="text/javascript" charset="utf-8" src="//yastatic.net/jquery/2.1.3/jquery.min.js"></script>
</head>

@persidskiy
Copy link

@eGavr Нет, меня он не убедил.

Очень часто возникает необходимость объедить тесты, которые про одно и то же в один тестовый файл. Например, у меня есть блок dropdown, он работает с двумя блоками button и link, для каждого из случаев у меня написаны разные шаблоны. При этом в этих шаблонах есть разные условия про разные способы передачи параметров и разные модификаторы. В случае dropdown в Лего, там по 4 явно выраженных кейса с каждым свитчером.
Я как порядочный разработчик хочу добиться хорошего покрытия и проверить все возможные варианты передачи параметров.
Скажите, я могу хотеть сделать по файлу с тестами на каждый свитчер, чтобы я на одном экране мог сразу видеть, какие кейсы я покрыл? При этом я бы очень хотел их аккуратно отформатировать и подписать комментариями. Кроме этого, на этапе разработки тестов очень часто надо редактировать получившийся эталонный html. Для этого можно легко использовать мультивыделение в редакторе. В случае с несколькими файлами нужно их каждый раз открывать и ты начинаешь в них путаться. Тут тонкий момент. Когда у тебя есть 2 файла(один с bemjson, другой эталонный) ты в голове можешь держать мысль "мне надо во втором тесте исправить то-то"; переключаешься в другой файл и работаешь с ним. Если бы в моем случае было 8 файлов вместо 2, было бы сложно между ними переключаться. А еще бывает так, что на другом уровне переопределения доопределены шаблоны и для этого уровня нужно готовить отдельный файл эталонов. Таким образом, мы имеем 3 файла против 12. Дальше комбинаторика работает в полную силу. И таких блоков достаточно много.

А еще бывает нужно сгенерировать тест-кейсы динамически по какому-то заданному упрощенному массиву параметров, чтобы точно проверить все аспекты поведения. Как в таком случае быть? Тоже выносить тесты по разным файлам?

Так что если вы действительно хотите сделать ваш инструмент удобным потребителям, то давайте работать в этом направлении. Еще раз хочу напомннить, что html-differ в моем понимании, это инструмент, который позволяет сравнивать значимые части html. И conditional comment здесь значимый элемент. Он отвечает за загрузку разных стилей и влияет на итоговый результат работы html в браузере, а обычные комментарии - не значимые части, они нужны только для удобства разработчиков.

@eGavr
Copy link
Member Author

eGavr commented Feb 5, 2015

С точки зрения реализации, мне не принципиально как делать ;) В итоге все будет сводиться к тому, какие опции заюзать. Опцию ignoreComments я расширю и она будет такой:

ignoreComments: {
    normalComments: true || false,
    conditionalComments: true || false
}

а вот какие значения указать этой опции в БЭМ-пресете уже договариваться вам.

@persidskiy
Copy link

Так в чем тогда проблема? Я же и просил - дайте возможность писать простые комментарии в эталонных шаблонах. А вы пытаетесь убедить меня, что я не так тесты пишу)

@eGavr
Copy link
Member Author

eGavr commented Feb 5, 2015

Я пишу html-differ)
А не тесты на шаблоны ;) и спор возник у тебя с человеком, который их тоже пишет и что-то в этом понимает.

@arikon
Copy link
Member

arikon commented Feb 5, 2015

@eGavr Ок, Женя, запили эту фичу. Подробнее отвечу в Стартреке.

@sipayRT
Copy link

sipayRT commented Feb 5, 2015

@Coltspb я все равно не понимаю смысла в комментариях. Эталон - это эталон, а не кусок кода, который можно комментировать. Насчет кучи тестов в одном файле - ты пишешь много проверок в одном it, когда пишешь тесты на js? Если да, то как ты потом понимаешь что именно не так, когда этот тест падает? Такая же (ну почти такая же) ситуация и тут - ты хочешь в одном тесте проверить кучу кейсов. Но если Жека расширяет ignoreComments, то все это уже не важно :)

@eGavr
Copy link
Member Author

eGavr commented Feb 5, 2015

Важно, чтобы вы решили, какой БЭМ-пресет будет!
Расширить - я расширю, НО все это крутится в enb-bem-tmpl-specs, и эта тулза использует html-differ с определенными опциями, и надо определиться всем, как именно конфигурировать проверку комментов. Либо проверяем обычные комменты, либо нет.

@blond
Copy link
Member

blond commented Feb 5, 2015

Важно, чтобы вы решили, какой БЭМ-пресет будет!

Понятно же, что такой:

ignoreComments: {
    normalComments: true,
    conditionalComments: false
}

@eGavr
Copy link
Member Author

eGavr commented Feb 5, 2015

@sipayRT не видит смысла игнорировать обычные комментарии, так как они не могут туда попасть, если их не писать дополнительно руками.

@blond
Copy link
Member

blond commented Feb 5, 2015

@sipayRT не видит смысла игнорировать обычные комментарии, так как они не могут туда попасть, если их не писать дополнительно руками.

Инструменты не должны никого ограничивать без реальной на то необходимости. Поэтому пресет надо подбирать таким, чтобы используя его были довольны все, и те кто хочет писать коментарии, и те, кто не хочет писать коментарии.

@eGavr
Copy link
Member Author

eGavr commented Feb 5, 2015

@andrewblond , может сделать так, чтобы conditional comment проверялись всегда, а конфигурировать только проверку обычный комментов?

А смысл НЕ проверять conditional comments? они ломают работоспособность, если отключить проверку и т д.

@sipayRT
Copy link

sipayRT commented Feb 6, 2015

@sipayRT не видит смысла игнорировать обычные комментарии, так как они не могут туда попасть, если их не писать дополнительно руками.

@eGavr да, смысла я не вижу. Но если можно расширить инструмент так, чтобы все остались довольны, то так и делай ;)

@blond
Copy link
Member

blond commented Feb 6, 2015

может сделать так, чтобы conditional comment проверялись всегда, а конфигурировать только проверку обычный комментов?

По мне идея годная, я тоже не вижу смысла не проверять conditional comments.

@eGavr
Copy link
Member Author

eGavr commented Feb 6, 2015

Хорошо! Тогда решено, что опция в структуре не меняется и остается как и была, только она не зависимо от ее значения всегда учитывает conditional comments и их содержимое проверяет как обычный HTML.

Для БЭМ-пресета эта опция будет принимать значение true, то есть в итоге обычные комментарии всегда игнорируются (по сильной просьбе @Coltspb )

@sipayRT
Copy link

sipayRT commented Feb 6, 2015

может сделать так, чтобы conditional comment проверялись всегда, а конфигурировать только проверку обычный комментов?

Да, мне тоже ок

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants