A collection of JUnit rules for testing code which uses java.lang.System.

Overview

System Rules

Build Status Linux Build Status Windows

System Rules is a collection of JUnit rules for testing code which uses java.lang.System.

System Lambda is an alternative to System Rules that leverages the possibilities of Java 8. It is independent of the test framework. You can use it for example as a replacement for System Rules in JUnit Jupiter and TestNG.

Installation

System Rules is available from Maven Central.

<dependency>
  <groupId>com.github.stefanbirkner</groupId>
  <artifactId>system-rules</artifactId>
  <version>1.19.0</version>
</dependency>

Please don't forget to add the scope test if you're using System Rules for tests only.

Usage

System Rules' documentation is stored in the gh-pages branch and is available online at http://stefanbirkner.github.io/system-rules/index.html

Contributing

You have three options if you have a feature request, found a bug or simply have a question about System Rules.

Development Guide

System Rules is build with Maven. If you want to contribute code than

  • Please write a test for your change.
  • Ensure that you didn't break the build by running mvnw test.
  • Fork the repo and create a pull request. (See Understanding the GitHub Flow)

The basic coding style is described in the EditorConfig file .editorconfig.

System Rules supports Travis CI (Linux) and AppVeyor (Windows) for continuous integration. Your pull request will be automatically build by both CI servers. On Travis CI we build your pull request with OpenJDK 6 and run test with different JDKs (Java 6 to 10).

Release Guide

  • Select a new version according to the Semantic Versioning 2.0.0 Standard.
  • Set the new version in pom.xml and in the Installation section of this readme.
  • Commit the modified pom.xml and README.md.
  • Run mvnw clean deploy with JDK 6 or 7.
  • Add a tag for the release: git tag system-rules-X.X.X
Comments
  • junit:junit-dep is no longer needed for newer JUnit releases

    junit:junit-dep is no longer needed for newer JUnit releases

    With system-rules 1.4.0, JUnit 4.11, and Maven, I got this:

    [WARNING] The POM for junit:junit-dep:jar:4.9.1-SNAPSHOT is missing, no dependency information available

    To use system-rules with JUnit 4.11, it seems necessary to exclude junit:junit-dep from its dependencies (if using Maven):

        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>com.github.stefanbirkner</groupId>
          <artifactId>system-rules</artifactId>
          <version>1.4.0</version>
          <scope>test</scope>
          <!-- junit:junit-dep is deprecated, and junit:junit replaces it. -->
          <exclusions>
            <exclusion>
              <groupId>junit</groupId>
              <artifactId>junit-dep</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
    

    This works; newer releases of junit:junit seem to have subsumed junit:junit-dep.

    I'm not sure what a good solution would be. Shouldn't system-rules depend on junit:junit instead? This is the message included in the junit-dep POM:

    The artifact junit:junit does not contain Hamcrest anymore but declares a dependency to Hamcrest. Thus, junit:junit-dep has become obsolete.

    JUnit problem 
    opened by jdhoek 12
  • Add log-on-failure mode

    Add log-on-failure mode

    Add a new mode, log-on-failure. It should:

    • Continue appending to the saved log
    • Print to the original streams for failed tests
    • This is designed to improve developer convenience, keeping passing tests quiet and making failing tests noisy.

    Rebased as suggested. I also squashed some commits to make it clearer what you are getting:

    • Commit binkley/system-rules@fb4c976 could be cherry-picked separately; it has PrintStreamLog extends TestWatcher rather than ExternalResource
    • Commit binkley/system-rules@cc86caf add log-on-failure mode, requiring previous commit to get at TestWatcher#failed(Throwable, Description).

    Cheers, --binkley

    opened by binkley 9
  • System.exit() not intercepted when in a different thread

    System.exit() not intercepted when in a different thread

    With the code below:

    exec.execute(new Runnable() {
            public void run() {
                try {
                    //
                    // It is enough to detect one change to trigger the exit
                    // process
                    //
                    WatchKey k = watcher.take();
                } catch (InterruptedException x) {
                    ...
                } finally {
                    try {
                        watcher.close();
                        System.exit(EXIT_RESTART);
                    } catch (IOException x) {
                        ...
                    }
                }
            }
        });
    

    I understand that System.exit(0) throws a security exception, but since it is in a runnable, it does not bubble up.

    opened by stefanofornari 7
  • SystemOutRule.getLog() does not work when I running all tests in a Test file

    SystemOutRule.getLog() does not work when I running all tests in a Test file

    Using system-rules 1.16 with Junit, Intellij IDEA and Maven It works just fine when I run my test one by one from my IDEA right click menu, say "Run 'testCanNotRestart()'".

    But does not work when I run all test methods in the test file, in my case there are other 4 test methods there. Also, it will fail when i run "maven test”.

    In the above two fail cases, the SystemOutRule.getLog() just return nothing.

    Won't fix logging problem 
    opened by July-G 6
  • Provide option to not tee output for stdout/stderr

    Provide option to not tee output for stdout/stderr

    I'm generally quite happy with the stdout/stderr rules. There is one niggle. I prefer "clean" tests - no output in general unless they fail. Would you kindly provide an option in the rules constructor (or a factory method) to not tee output when capturing it? (I do understand this behavior comes from commons-io.)

    I'm happy to fork & provide a pull patch to implement, if you wish.

    opened by binkley 6
  • System.in and System.exit do not work together within the same test

    System.in and System.exit do not work together within the same test

    I'm attempting to test a command line runner (based on Spring Batch). Unfortunately, the runner exits rather than, say, returning a value to a trivial wrapper method that exits with that value. In any case, I'd also like to pass data by piping it in through stdin. I can confirm this works in a stand-alone application. However, the mocked data I'm passing into systemInMock doesn't seem to make it to the main method. My code looks something like the following

    public class CommandLineRunnerStdInOutTests {
    
        @Rule
        public final ExpectedSystemExit exit = ExpectedSystemExit.none();
    
        @Rule
        public final TextFromStandardInputStream systemInMock = emptyStandardInputStream();
    
        @Rule
        public final StandardOutputStreamLog log = new StandardOutputStreamLog();
    
        private static final String INPUT_FILE = "data.csv";
        private static final String EXPECTED_FILE = "expected_data.csv";
    
        @Test
        public void testJob() throws Exception {
            String fileContents = Resources.toString(Resources.getResource(INPUT_FILE), Charsets.UTF_8);
            assertTrue(fileContents.length() >  20);
            systemInMock.provideText(fileContents); // passes: file is read correctly
            exit.expectSystemExitWithStatus(0); // passes: batch job completes, but doesn't see any input records
            CommandLineRunner.main(new String[]{"config.xml", "batchJob"});
        }
    
        @Test
        public void testFileOut() throws Exception {
            String fileContents = Resources.toString(Resources.getResource(EXPECTED_FILE), Charsets.UTF_8);
            assertEquals(fileContents, log.getLog()); // fails because log.getLog() returns empty String
        }
    }
    

    Thanks for writing such an awesome tool! Even with this issue, it has still helped me tremendously!

    opened by stevenmanton 6
  • Add methods to access raw stdout/stderr logs

    Add methods to access raw stdout/stderr logs

    I would like to test some code that writes raw binary data to stdout. To do so I believe I need access to the underlying byte array, since a sequence of bytes may not be a valid string. Therefore I suggest to add a method getLogBytes to SystemOutRule and SystemErrRule. Let me know if you think this makes sense and if so I will add documentation and tests to this PR.

    opened by marcvinyals 5
  • Log on failure mode

    Log on failure mode

    Hi, I've coded a log-on-failure mode which is similar to log-only however will log to the standard stream for failed tests. This seems to capture the best of worlds:

    • Passing tests are quiet and do not log to stream
    • Failing tests are noisy and do log to stream

    I have a fork with these changes. Would you like a pull request?

    https://github.com/binkley/system-rules

    Cheers, --binkley

    opened by binkley 5
  • Java 9 compatibility?

    Java 9 compatibility?

    I use the system-rules in some framework dependent projects to test "untestable" things. As Java 9 is approaching quickly I was wondering if system-rules can be used with it, especially that there is a lot of "hack" used to do the things.

    I wanted to give it a try, but it seems there are some Maven plugins required to be upgraded (probably the same as some libraries) I decided to just create that issue to consider checking that compatibility one sunny day.

    opened by szpak 4
  • Allow .set when instantiating EnvironmentVariables

    Allow .set when instantiating EnvironmentVariables

    If some of the environment variable values to set are known statically, then let the user set these immediately when instantiating the rule, reducing the need for setup methods.

    opened by reftel 4
  • ExpectedSystemExit and SystemErrRule or SystemOutRule cause Gradle to throw MessageIOException when used in the same test

    ExpectedSystemExit and SystemErrRule or SystemOutRule cause Gradle to throw MessageIOException when used in the same test

    While creating unit tests to handle some command line output and exceptions thrown in an application, I decided to use SystemErrRule and SystemOutRule to assist with this.

    As this particular test is for the main entry point of the application, it is parsing the command line and calling System.exit(1) when invalid command line arguments have been provided.

    However, including both of these causes Gradle to throw an exception when trying to run the task gradlew test:

    :test
    Unexpected exception thrown.
    org.gradle.messaging.remote.internal.MessageIOException: Could not read message from '/127.0.0.1:50239'.
            at org.gradle.messaging.remote.internal.inet.SocketConnection.receive(SocketConnection.java:79)
            at org.gradle.messaging.remote.internal.hub.MessageHub$ConnectionReceive.run(MessageHub.java:235)
            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(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
            at java.lang.Thread.run(Unknown Source)
    Caused by: com.esotericsoftware.kryo.KryoException: java.io.IOException: An existing connection was forcibly closed by the remote host
            at com.esotericsoftware.kryo.io.Input.fill(Input.java:141)
            at com.esotericsoftware.kryo.io.Input.require(Input.java:159)
            at com.esotericsoftware.kryo.io.Input.readByte(Input.java:255)
            at org.gradle.internal.serialize.kryo.KryoBackedDecoder.readByte(KryoBackedDecoder.java:80)
            at org.gradle.messaging.remote.internal.hub.InterHubMessageSerializer$MessageReader.read(InterHubMessageSerializer.java:69)
            at org.gradle.messaging.remote.internal.hub.InterHubMessageSerializer$MessageReader.read(InterHubMessageSerializer.java:58)
            at org.gradle.messaging.remote.internal.inet.SocketConnection.receive(SocketConnection.java:74)
            ... 6 more
    Caused by: java.io.IOException: An existing connection was forcibly closed by the remote host
            at sun.nio.ch.SocketDispatcher.read0(Native Method)
            at sun.nio.ch.SocketDispatcher.read(Unknown Source)
            at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
            at sun.nio.ch.IOUtil.read(Unknown Source)
            at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
            at org.gradle.messaging.remote.internal.inet.SocketConnection$SocketInputStream.read(SocketConnection.java:158)
            at com.esotericsoftware.kryo.io.Input.fill(Input.java:139)
            ... 12 more
    Unexpected exception thrown.
    org.gradle.messaging.remote.internal.MessageIOException: Could not write message [EndOfStream] to '/127.0.0.1:50239'.
            at org.gradle.messaging.remote.internal.inet.SocketConnection.dispatch(SocketConnection.java:106)
            at org.gradle.messaging.remote.internal.hub.MessageHub$ConnectionDispatch.run(MessageHub.java:284)
            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(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
            at java.lang.Thread.run(Unknown Source)
    Caused by: java.io.IOException: An existing connection was forcibly closed by the remote host
            at sun.nio.ch.SocketDispatcher.write0(Native Method)
            at sun.nio.ch.SocketDispatcher.write(Unknown Source)
            at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
            at sun.nio.ch.IOUtil.write(Unknown Source)
            at sun.nio.ch.SocketChannelImpl.write(Unknown Source)
            at org.gradle.messaging.remote.internal.inet.SocketConnection$SocketOutputStream.flush(SocketConnection.java:221)
            at org.gradle.messaging.remote.internal.inet.SocketConnection.dispatch(SocketConnection.java:104)
            ... 6 more
    :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
    

    In IntelliJ, trying to run this test results in the error response "Failed to start: 0 passed, 1 not started" - so it isn't isolated to Gradle.

    Here is an example setup that can reproduce this issue:

    Program.java:

    package org.test.example;
    
    public final class Program
    {
       public static void main(String[] args)
       {
          if (args.length != 2)
          {
             System.out.println("Proper usage: -port <number>");
    
             System.exit(1);
          }
       }
    }
    

    ProgramTest.java:

    package org.test.example;
    
    import org.junit.Rule;
    import org.junit.Test;
    import org.junit.contrib.java.lang.system.ExpectedSystemExit;
    import org.junit.contrib.java.lang.system.SystemErrRule;
    import org.junit.contrib.java.lang.system.SystemOutRule;
    import org.junit.runner.RunWith;
    import org.powermock.core.classloader.annotations.PrepareForTest;
    import org.powermock.modules.junit4.PowerMockRunner;
    
    import static org.junit.Assert.assertFalse;
    import static org.junit.Assert.assertTrue;
    
    @RunWith(PowerMockRunner.class)
    @PrepareForTest(Program.class)
    public class ProgramTest
    {
       /** Handles System.exit() calls. */
       @Rule
       private final ExpectedSystemExit exit = ExpectedSystemExit.none();
    
       /** Handles System.err calls. */
       @Rule
       private final SystemErrRule err = new SystemErrRule().enableLog().muteForSuccessfulTests();
    
       /** Handles System.out calls. */
       @Rule
       private final SystemOutRule out = new SystemOutRule().enableLog().muteForSuccessfulTests();
    
       /**
        * Verify server does not run when only a single valid command line
        * parameter is provided.
        *
        * @throws Exception On error.
        */
       @Test
       public void testMainOneParameterPort() throws Exception
       {
          expectExit();
    
          Program.main(new String[] { "-port" });
       }
    
       /**
        * Helper function to setup System.exit() expectations
        */
       private void expectExit()
       {
          exit.expectSystemExitWithStatus(1);
    
          exit.checkAssertionAfterwards(() ->
          {
             assertFalse(out.getLog().isEmpty());
             assertTrue(err.getLog().isEmpty());
          });
       }
    }
    

    Environment Configuration:

    Windows 10 Pro x64 10.0.10586
    
    Oracle JDK/JRE x64 1.8.0_66
    
    Gradle 2.5
    
    JUnit 4.12
    System Rules 1.15.1
    Mockito 1.10.19
    PowerMock 1.6.4
    
    PowerMock problem 
    opened by ghost 4
  • EnvironmentVariables clear() does not work properly

    EnvironmentVariables clear() does not work properly

    I have a test dependent of environment variables. I am setting environment variable in @Before like this.

        @Rule
        public final EnvironmentVariables environmentVariables = new EnvironmentVariables();
    
    @Before
        public void setUp() throws Exception {
            environmentVariables.set("someValue","testLink");
        }
    

    In one of the test I need to clear the same environment variable. But when I do this:

    environmentVariables.clear("someValue");

    When I run the test alone it works fine but when I run all the tests in the class, environment variable is not cleared. Probably I am missin something but it can be a bug as well.

    opened by serkan-ozkan 0
  • UnsupportedOperationException with jdk-18

    UnsupportedOperationException with jdk-18

    Under jdk-18 I get a UnsupportedOperationException:

    java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release
    
    	at java.base/java.lang.System.setSecurityManager(System.java:416)
    	at org.junit.contrib.java.lang.system.ProvideSecurityManager.before(ProvideSecurityManager.java:39)
    	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:50)
    	at org.junit.contrib.java.lang.system.internal.PrintStreamRule$1$1.evaluate(PrintStreamRule.java:39)
    	at org.junit.contrib.java.lang.system.internal.PrintStreamHandler$3.evaluate(PrintStreamHandler.java:44)
    	at org.junit.contrib.java.lang.system.internal.PrintStreamRule$1.evaluate(PrintStreamRule.java:35)
    	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
    	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
    
    opened by siom79 2
  • Junit needs upgraded to 4.13.2

    Junit needs upgraded to 4.13.2

    Per (https://snyk.io/vuln/maven:junit:junit) more details about my particular issue here (https://stackoverflow.com/questions/67165571/why-wont-maven-exclude-test-dependency-even-when-in-exclusion)

    Either way a version should be released ASAP with this updated

    opened by jrgleason 0
  • junit 4.12 and compilation issues

    junit 4.12 and compilation issues

    My first problem is that this package refers maven 4.9and 4.11

    4.9:

    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit-dep</artifactId>
    			<version>[4.9,)</version>
    		</dependency>
    

    I don't see a direct link to 4.11 but I get compilation errors with my own code where maven tells me that there is version conflict with junit 4.12 that I use

    FAIK 4.12 is the latest. Can this library be updated?

    I tried to fix this myself but the library does not even build. When I try to do mvn install I immediately get a prompt for my PGP password. I have no clue why, your pom does not contain any ref to GPG but probably some parent does... Anyway PGP stuff on my machine is strictly prohibited for access. So the build fails there.

    Can these issues be fixed? I'd like

    • that system-library uses the latest junit version (4.12 at this moment)
    • That the library builds (mvn install) without prompting for any passwords.
    opened by Wouter1 4
  • keep up with junit's new location

    keep up with junit's new location

    to remove e.g.:

    [WARNING] The artifact junit:junit-dep:jar:4.11-beta-1 has been relocated to junit:junit:jar:4.11-beta-1
    

    when building.

    This also helps me remove a classpath conflict in a project that uses both system-rules and junit (4:12 in my case):

    'junit/extensions/ActiveTestSuite$1.class' is present in both 'junit-4.12.jar' and 'junit-dep-4.11.20120805.1225.jar'
    
    opened by dbyron0 0
Owner
Stefan Birkner
I delete code.
Stefan Birkner
OpenL Tablets Business Rules Management System

Easy Business Rules OpenL Tablets targets the infamous gap between business requirements (rules and policies) and software implementation. Designed to

OpenL Tablets 114 Dec 17, 2022
UMS is a CRUD based management system which uses File Handling to manipulate data and perform the CRUD operations

UMS is a CRUD (Create, Read, Update, Delete) based management system which uses File Handling to manipulate data and perform the CRUD operations. It is a group project made using Java procedural programming having both User and Admin sides.

Daoud-Hussain 9 Dec 20, 2022
Spring REST API for financial management, developed with Java 11, JWT for authentication, JUnit for unit testing and Oracle Database

control_financial Spring REST API for financial management, developed with Java 11, JWT for authentication, JUnit for unit testing and Oracle Database

Vinicius Cassaro 1 May 27, 2022
Team 5468's 2022 FRC robot code. This code is written in Java and is based off of WPILib's Java control system and utilizes a command based system

FRC 2022 Team 5468's 2022 FRC robot code. This code is written in Java and is based off of WPILib's Java control system and utilizes a command based s

null 4 Oct 4, 2022
An intelliJ plugin providing a UI layer for git-flow, which in itself is a collection of Git extensions to provide high-level repository operations for Vincent Driessen's branching model.

Git Flow Integration Plus for Intellij An intelliJ plugin providing a UI layer for git-flow, which in itself is a collection of Git extensions to prov

RubinCarter 35 Nov 8, 2022
The simple, stupid rules engine for Java

Easy Rules The simple, stupid rules engine for Java™ Project status As of December 2020, Easy Rules is in maintenance mode. This means only bug fixes

Jeasy 4.2k Jan 5, 2023
An unofficial rules engine for the world's greatest card game.

Forge Official repo. Dev instructions here: Getting Started (Somewhat outdated) Discord channel here Requirements / Tools you favourite Java IDE (Inte

Forge 150 Dec 30, 2022
An All-In-One Macro for Hypixel Skyblock. Includes numerous features for Quality of Life that do NOT abide by the Hypixel Rules.

AIOMacro An All-In-One Macro for Hypixel Skyblock. Includes numerous features for Quality of Life that do NOT abide by the Hypixel Rules. Installation

Jackson 18 Dec 19, 2022
Example Project which uses spark mongo connector !

mongo-spark-connector-springboot Example Project which uses spark mongo connector to read/aggregate & convert into Spark DataSet/Java RDDs Connects to

Vibhor 2 Dec 6, 2022
Auto-Unit-Test-Case-Generator automatically generates high-level code-coverage JUnit test suites for Java, widely used within the ANT Group.

中文README传送门 What is Auto-Unit-Test-Case-Generator Auto-Unit-Test-Case-Generator generates JUnit test suites for Java class just as its name. During te

TRaaS 108 Dec 22, 2022
The clickgui used in my Minecraft Hacked Client, Ozone. Uses HeroCode Settings but can easily be migrated to another settings system.

OzoneClickGUI The clickgui used in my Minecraft Hacked Client, Ozone. Uses HeroCode Settings but can easily be migrated to another settings system. Pl

ShadeDev 9 Dec 2, 2022
The code examples of the "Effective Software Testing: A Developer's Guide" book

Effective software testing This repository contains the code examples of the Software Testing: A Developer's Guide book, by Maurício Aniche. Each fold

null 44 Dec 29, 2022
A collection of design patterns implemented in Java

Design Patterns A collection of design patterns implemented in Java and referenced from this book: Design Patterns: Elements of Reusable Object-Orient

Karim Elghamry 6 Sep 5, 2022
This is a plugin for Minecraft Server (Spigot API) introduces a sector system which connects a single world across multiple servers.

OpenSourceSectors ?? ??️ This is a plugin for Minecraft Server (Spigot API) introduces a sector system which connects a single world across multiple s

null 20 Dec 28, 2022
Cute view animation collection.

Android View Animations One day, I saw an iOS library, which is a view shaker, it's very beautiful. I think Android also need one, and should be bette

代码家 12.2k Dec 28, 2022
AndroidX Media is a collection of libraries for implementing media use cases on Android

AndroidX Media AndroidX Media is a collection of libraries for implementing media use cases on Android, including local playback (via ExoPlayer) and m

Android Jetpack 311 Jan 1, 2023
Collection of homework assignments I did for myself and for others while as an undergrad @ UNLV.

Mona Lisa Collection of homework assignments I did for myself and for others while as an undergrad @ UNLV. If you have questions or concerns please fe

Luis Maya Aranda 0 May 10, 2022
A collection of client-side tweak kits to enhance your Minecraft game experience. Tweak Minecraft and beyond!

TweakerMore A collection of client-side tweak kits for enhance your Minecraft game experience Everything is disabled by default, so you don't need to

Fallen_Breath 105 Jan 3, 2023
Curated Collection of all Low level design Questions and implementation asked in major Tech companies , Get yourself prepared for the LLD round and ace the interview.

Low level Design / Machine Coding Question Collections What is Machine Coding Round ? Machine Coding Round has become very popular interview round in

Kumaran gowthaman 619 Dec 31, 2022