Git Product home page Git Product logo

barometer's People

Contributors

gbui avatar jjtparadox avatar tdaffin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

barometer's Issues

Tests that don't use @RunWith(BarometerTester.class) do not always run in v0.0.7

There is a problem with the fix for the FMLSecurityException:

If you also have tests that do not use BarometerTester then they don't always run, because the last test that does run with BarometerTester causes the test process to exit.

I've pushed an example to my repo: 1.12...tdaffin:junit-bug

In the example the test com.jjtparadox.barometer.otherpackage.test.NotBarometerTest#testThatAllJUnitTestsRun does not get run unless I set systemProperty "barometer.exitWhenCompleted", false in build.gradle, but that brings back the security exception.

FYI: This is also a problem for CyclopsMC/IntegratedDynamics#562 as IntegratedDynamics also has a bunch of jUnit only tests.

If it helps I can submit this example test as a PR.

Questions on Current state

Hello !

I'm strongly interested in using Barometer for automated tests for my mod (https://github.com/Lythom/capsule). I'm currently updating the mod for latests 1.10, 1.11 and 1.12 version of forge and would like to test automatically compatibility with other mods.

Is Barometer usable as is for latest 1.10.2 of forge ?
How much effort would it take to make it compatible with 1.11 and 1.12 ? (An estimate of the time it would take me on a fork to get it work).

More questions on capabilities :
Can barometer simulate player logging / actions / interactions ? Would it be done only by simulating network packets ?
I saw in the code : "TODO Make a nice empty world for tests". Did you have some progress on the feature ? What king of difficulty should I expect to put it in ?

Thank you for sharing your work on the topic of automated tests !

I can't run the tests in 0.0.4-1.12

If I try to run the tests using ./gradlew tests on the 0.0.4-1.12 tag version I get the following errors:

Testing started at 5:04 PM ...
5:04:56 PM: Executing task 'test'...

#################################################
         ForgeGradle 2.3-SNAPSHOT-e7c1878        
  https://github.com/MinecraftForge/ForgeGradle  
#################################################
               Powered by MCP unknown               
             http://modcoderpack.com             
         by: Searge, ProfMobius, Fesh0r,         
         R4wk, ZeuX, IngisKahn, bspkrs           
#################################################
:deobfCompileDummyTask
:deobfProvidedDummyTask
:getVersionJson
:extractNatives SKIPPED
:extractUserdev UP-TO-DATE
:getAssetIndex UP-TO-DATE
:getAssets
:makeStart SKIPPED
:sourceApiKotlin UP-TO-DATE
:compileApiKotlin UP-TO-DATE
:sourceApiJava UP-TO-DATE
:compileApiJava UP-TO-DATE
:copyApiKotlinClasses UP-TO-DATE
:processApiResources UP-TO-DATE
:apiClasses UP-TO-DATE
:sourceMainKotlin UP-TO-DATE
:compileKotlin
Using kotlin incremental compilation
w: /home/tom/dev/mcmods/Barometer/build/sources/main/kotlin/com/jjtparadox/barometer/Barometer.kt: (61, 17): Parameter 'event' is never used
w: /home/tom/dev/mcmods/Barometer/build/sources/main/kotlin/com/jjtparadox/barometer/Barometer.kt: (97, 28): Parameter 'event' is never used
w: /home/tom/dev/mcmods/Barometer/build/sources/main/kotlin/com/jjtparadox/barometer/Barometer.kt: (101, 23): Parameter 'event' is never used
w: /home/tom/dev/mcmods/Barometer/build/sources/main/kotlin/com/jjtparadox/barometer/Barometer.kt: (111, 23): Parameter 'event' is never used
:sourceMainJava UP-TO-DATE
:compileJava UP-TO-DATE
:copyMainKotlinClasses UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:sourceTestKotlin UP-TO-DATE
:compileTestKotlin
Using kotlin incremental compilation
:sourceTestJava UP-TO-DATE
:compileTestJava
:copyTestKotlinClasses UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses
:test
Connected to the target VM, address: '127.0.0.1:33879', transport: 'socket'
[17:05:12] [Test worker/INFO] [GradleStart]: Extra: [--noCoreSearch, nogui]
[17:05:12] [Test worker/INFO] [GradleStart]: GradleStart coremod searching disabled!
[17:05:12] [Test worker/INFO] [GradleStart]: Running with arguments: [--tweakClass, com.jjtparadox.barometer.tester.TestTweaker, nogui]
[17:05:12] [Test worker/INFO] [LaunchWrapper]: Loading tweak class name com.jjtparadox.barometer.tester.TestTweaker
[17:05:12] [Test worker/INFO] [LaunchWrapper]: Using primary tweak class name com.jjtparadox.barometer.tester.TestTweaker
[17:05:12] [Test worker/INFO] [LaunchWrapper]: Calling tweak class com.jjtparadox.barometer.tester.TestTweaker
2018-03-20 17:05:13,252 Test worker WARN Disabling terminal, you're running in an unsupported environment.

Class com.google.common.base.Functions$IdentityFunction does not implement the requested interface java.util.function.Function
java.lang.IncompatibleClassChangeError: Class com.google.common.base.Functions$IdentityFunction does not implement the requested interface java.util.function.Function
	at net.minecraftforge.server.console.TerminalConsoleAppender.formatEvent(TerminalConsoleAppender.java:186)
	at net.minecraftforge.server.console.TerminalConsoleAppender.append(TerminalConsoleAppender.java:180)
	at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
	at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448)
	at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:433)
	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:403)
	at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
	at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
	at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2091)
	at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2029)
	at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1908)
	at org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1442)
	at net.minecraftforge.fml.relauncher.FMLLaunchHandler.setupHome(FMLLaunchHandler.java:92)
	at net.minecraftforge.fml.relauncher.FMLLaunchHandler.setupServer(FMLLaunchHandler.java:85)
	at net.minecraftforge.fml.relauncher.FMLLaunchHandler.configureForServerLaunch(FMLLaunchHandler.java:47)
	at net.minecraftforge.fml.common.launcher.FMLServerTweaker.injectIntoClassLoader(FMLServerTweaker.java:62)
	at com.jjtparadox.barometer.tester.TestTweaker.injectIntoClassLoader(Tests.kt:147)
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:115)
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
	at com.jjtparadox.barometer.tester.GradleStartTestServer.launch(Tests.kt:118)
	at com.jjtparadox.barometer.tester.BarometerTester$Companion.load(Tests.kt:60)
	at com.jjtparadox.barometer.tester.BarometerTester$Companion.access$load(Tests.kt:39)
	at com.jjtparadox.barometer.tester.BarometerTester.<init>(Tests.kt:37)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
	at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

com.jjtparadox.barometer.test.BarometerExampleTest > initializationError FAILED
    java.lang.IncompatibleClassChangeError

lateinit property taskQueue has not been initialized
kotlin.UninitializedPropertyAccessException: lateinit property taskQueue has not been initialized
	at com.jjtparadox.barometer.tester.BarometerTester$Companion.getTaskQueue(Tests.kt:45)
	at com.jjtparadox.barometer.tester.BarometerTester.runChild(Tests.kt:109)
	at com.jjtparadox.barometer.tester.BarometerTester.runChild(Tests.kt:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at com.jjtparadox.barometer.tester.BarometerTester.run(Tests.kt:79)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

com.jjtparadox.barometer.test.BarometerExampleTestJava > classMethod FAILED
    kotlin.UninitializedPropertyAccessException
java.lang.SecurityException: Cannot replace the FML security manager
	at net.minecraftforge.fml.relauncher.FMLSecurityManager.checkPermission(FMLSecurityManager.java:54)
	at java.lang.System.setSecurityManager0(System.java:300)
	at java.lang.System.setSecurityManager(System.java:291)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:77)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:45)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:76)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:34)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:85)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:45)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:61)
</event></ijLog>
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:66)
com.jjtparadox.barometer.otherpackage.test.BarometerExampleTest > classMethod FAILED
    kotlin.UninitializedPropertyAccessException
Exception in thread "main" net.minecraftforge.fml.relauncher.FMLSecurityManager$ExitTrappedException
	at net.minecraftforge.fml.relauncher.FMLSecurityManager.checkPermission(FMLSecurityManager.java:49)
	at java.lang.SecurityManager.checkExit(SecurityManager.java:761)
	at java.lang.Runtime.exit(Runtime.java:107)
	at java.lang.System.exit(System.java:971)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:70)
Disconnected from the target VM, address: '127.0.0.1:33879', transport: 'socket'
3 tests completed, 3 failed
:test FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> Process 'Gradle Test Executor 1' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 17.062 secs
Process 'Gradle Test Executor 1' finished with non-zero exit value 1
5:05:14 PM: Task execution finished 'test'.

Barometer is not running any tests for me

When I run ./gradlew test for my mod, it will not actually run the tests. I know this because I have a call to fail in one of the tests, which should always fail that test. See line 40 of the test class.

build.gradle + test class: https://gist.github.com/milandamen/fa0e35162d61fc4b02b993ddf09d9f73
Running version 0.0.7 of Barometer.

Gradlew log:

To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/2.14/userguide/gradle_daemon.html.
This mapping 'snapshot_20171003' was designed for MC 1.12! Use at your own peril.
#################################################
         ForgeGradle 2.3-SNAPSHOT-3996470        
  https://github.com/MinecraftForge/ForgeGradle  
#################################################
                 Powered by MCP                  
             http://modcoderpack.com             
     by: Searge, ProfMobius, R4wk, ZeuX          
     Fesh0r, IngisKahn, bspkrs, LexManos         
#################################################
:deobfCompileDummyTask
:deobfProvidedDummyTask
:sourceApiJava UP-TO-DATE
:compileApiJava UP-TO-DATE
:processApiResources UP-TO-DATE
:apiClasses UP-TO-DATE
:barometerPrep
:sourceMainJava UP-TO-DATE
:compileJava
Note: /home/milan/Documents/Minecraft Modding/ImmersiveRailroadingAutomation/build/sources/main/java/nl/milandamen/immersiverailroadingautomation/block/SignalBlock.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:processResources UP-TO-DATE
:classes
:getVersionJson
:extractNatives SKIPPED
:extractUserdev UP-TO-DATE
:getAssetIndex UP-TO-DATE
:getAssets
:makeStart SKIPPED
:sourceTestJava UP-TO-DATE
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:test

BUILD SUCCESSFUL

Total time: 11.943 secs

Gradle version:

------------------------------------------------------------
Gradle 2.14
------------------------------------------------------------

Build time:   2016-06-14 07:16:37 UTC
Revision:     cba5fea19f1e0c6a00cc904828a6ec4e11739abc

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_191 (Oracle Corporation 25.191-b12)
OS:           Linux 4.18.0-13-generic amd64

FastClasspathScanner is outdated -- consider porting to ClassGraph

Your project, jjtParadox/Barometer, depends on the outdated library FastClasspathScanner in the following source files:

FastClasspathScanner has been significantly reworked since the version your code depends upon:

  • a significant number of bugs have been fixed
  • some nontrivial API changes have been made to simplify and unify the API
  • FastClasspathScanner has been renamed to ClassGraph: https://github.com/classgraph/classgraph

ClassGraph is a significantly more robust library than FastClasspathScanner, and is more future-proof. All future development work will be focused on ClassGraph, and FastClasspathScanner will see no future development.

Please consider porting your code over to the new ClassGraph API, particularly if your project is in production or has downstream dependencies:

Feel free to close this bug report if this code is no longer in use. (You were sent this bug report because your project depends upon FastClasspathScanner, and has been starred by 7 users. Apologies if this bug report is not helpful.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.