Size: a a a

Scala User Group

2021 July 01

L

LevT in Scala User Group
Зато в воркшит моде типа всё ОК, и в скачти и локально

Main.run
res0: cats.effect.IO[Unit] = IO(...)

Что бы это значило? Рантайм это не выполнял?
источник

λ

λoλcat in Scala User Group
has always been
источник

DN

Dima Naumenko in Scala User Group
В идее для Plain Worksheet каждый раз запускается отдельный процесс.
Но для консольного приложения лучше просто запускать Run Configuration мышкой, там тоже каждый раз отдельный процесс будет запускаться
И input/output будет
источник

DN

Dima Naumenko in Scala User Group
источник

L

LevT in Scala User Group
И что следует из того, что запускается отдельный процесс?
То что жвм не шарится в скасти?
Так пытается Main.run там запуститься в воркшит моде? или только компиляется с res0 и ок?

Про ран конфиг я знаю, спасибо.
источник

L

LevT in Scala User Group
Локально в Plain моде воркшит по ощущению работает(или делает вид) аналогично скасти воркшиту, и для IOApp тоже
источник

DN

Dima Naumenko in Scala User Group
>Локально в Plain моде воркшит по ощущению работает(или делает вид) аналогично скасти воркшиту, и для IOApp тоже

Main.run - вызов метода, который возвращает IO[Unit] и процесс благополучно завершается.
То есть оно работает, но вряд-ли так как вы ожидаете.
И в идее и в scalastie  (в worksheet моде).

Для того, чтобы запустилось консольное приложение должен быть метод main
https://docs.oracle.com/javase/tutorial/getStarted/application/index.html#MAIN
Он определён в cats.effect.IOApp.main, который после компиляции добавляется к object Main.
Там под капотом уже вызывается Main.run и делается с ним какая-то магия, можете покопаться.

В не-worksheet scalastie тоже вызывается main (кто именно ХЗ).
Там не работает из-за того, что там ХЗ чей JVM ХЗ как и кем загаженный.
Run Configurations IDEA - самый чистый способ, так как там запускается чистая JVM и никто не успевает её загадить.
источник

DN

Dima Naumenko in Scala User Group
источник

DN

Dima Naumenko in Scala User Group
Не используйте Worksheet для консольного приложения с input-ом от пользователя.
источник

DN

Dima Naumenko in Scala User Group
Кстати, если в Worksheet использовать Main.main(Array()) то тоже будет ошибка
источник

DN

Dima Naumenko in Scala User Group
источник

DN

Dima Naumenko in Scala User Group
Я немного наврал,
Plain mode по дефолту запускается не в отдельном процессе, а в Compile Server процессе.
Тоже вызыает main в новом потоке.
В CS процессе тоже достаточно загажено.
Для того, чтобы запускать в отдельном процессе нужно выключить
File | Settings | Languages & Frameworks | Scala | Worksheet | Run worksheet in the compiler process
Но тогда, по очевидным причинам воркшит тупо зависнет, так как нет никакого ввода.
источник

T

Tim in Scala User Group
коллеги, а есть ли какой-то изящный способ между ScalaTest spec общие ресурсы делить
не fixture которая для всех тестов спеки одна а именно что-то что создастся для первой спеки, и будет существовать до 99й
источник

GP

Grigory Pomadchin in Scala User Group
неа, ничего такого нету, но если ты изуми используешь то там можно (вроде)

другой вариант можешь создать сам мета тест и там руками ранить тесты которые будут шарить ресурс
источник

T

Tim in Scala User Group
нету изуми
пока ко второму варианту склоняюсь, одна реальная моноспека и все остальные квазиспеки из неё как-то, гм, импортируются
только там возникает вопрос как гонять спеки по отдельности, а в CI пайплайне запускать моноспеку
источник

T

Tim in Scala User Group
но тоже вроде можно решить
источник

GP

Grigory Pomadchin in Scala User Group
типа


class MySpec extends TestContainersForAll {
 // тут всякие ресурсы и так далее объявляешь
 it should "run cool “specs in withContainers { container =>
   List(new SupaSpec1(container), …, new SupaSpecn(container)).map(_.run) // ну что-то такое надо собрать результаты
 }
}
источник

GP

Grigory Pomadchin in Scala User Group
ну в таком случае по отдельности тяжело будет, но ты всегда можешь testOnly использовать
источник

GP

Grigory Pomadchin in Scala User Group
`testOnly MySpec — -z “SupaSpec1 description”`
источник

T

Tim in Scala User Group
да да, спасибо, понятно
источник