import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.LinkedTransferQueue;

public class Main {
    public static void main (String[]args){
        //TIP Press <shortcut actionId="ShowIntentionActions"/> with your caret at the highlighted text
        // to see how IntelliJ IDEA suggests fixing it.
        testLinkedTransferQueueDrainToMaxUOE();
        testLinkedTransferQueueDrainToUOE();
    }

    static void testLinkedTransferQueueDrainToUOE() {
        System.out.println("\nTesting LinkedTransferQueue.drainTo with unmodifiable collection...");
        LinkedTransferQueue<String> queue = new LinkedTransferQueue<>();
        queue.add("element");

        Collection<String> unmodifiableSink = Collections.unmodifiableList(new ArrayList<>());

        try {
            queue.drainTo(unmodifiableSink); // throw
            System.out.println("Failed: drainTo did not throw UnsupportedOperationException");
        } catch (UnsupportedOperationException e) {
            System.out.println("Passed: drainTo threw UnsupportedOperationException");
        }
    }

    static void testLinkedTransferQueueDrainToMaxUOE() {
        System.out.println("\nTesting LinkedTransferQueue.drainTo(max) with unmodifiable collection...");
        LinkedTransferQueue<String> queue = new LinkedTransferQueue<>();
        queue.add("element");

        Collection<String> unmodifiableSink = Collections.unmodifiableList(new ArrayList<>());

        try {
            queue.drainTo(unmodifiableSink, 10); // throw
            System.out.println("Failed: drainTo(max) did not throw UnsupportedOperationException");
        } catch (UnsupportedOperationException e) {
            System.out.println("Passed: drainTo(max) threw UnsupportedOperationException");
        }
    }
}
