# Copyright 2012-present Facebook, Inc.
# Licensed under the Apache License, Version 2.0

# no unicode literals
from __future__ import absolute_import, division, print_function

import asyncio
import errno
import os
import os.path
import unittest

import WatchmanInstance
from pywatchman_aio import AIOClient as WatchmanClient


class AsyncWatchmanTestCase(unittest.TestCase):
    def setUp(self):
        self.loop = asyncio.get_event_loop()
        sockpath = WatchmanInstance.getSharedInstance().getSockPath()
        self.client = self.loop.run_until_complete(WatchmanClient.from_socket(sockpath))

    def tearDown(self):
        self.client.close()

    def run(self, result):
        assert result
        super(AsyncWatchmanTestCase, self).run(result)
        return result

    def touch(self, fname, times=None):
        try:
            os.utime(fname, times)
        except OSError as e:
            if e.errno == errno.ENOENT:
                with open(fname, "a"):
                    os.utime(fname, times)
            else:
                raise

    def touch_relative(self, base, *fname):
        fname = os.path.join(base, *fname)
        self.touch(fname, None)

    def watchman_command(self, *args):

        task = asyncio.wait_for(self.client.query(*args), 10)
        return self.loop.run_until_complete(task)

    def get_file_list(self, root):
        expr = {"expression": ["exists"], "fields": ["name"]}
        res = self.watchman_command("query", root, expr)["files"]
        return res

    def assert_sub_contains_all(self, sub, what):
        files = set(f for f in sub["files"])
        what = [f for f in what]
        for obj in what:
            assert obj in files, str(obj) + " was not in subscription " + repr(sub)

    def assert_file_sets_equal(self, iter1, iter2, message=None):
        set1 = set(f for f in iter1)
        set2 = set(f for f in iter2)
        self.assertEqual(set1, set2, message)

    # Wait for the file list to match the input set
    def assert_root_file_set(self, root, files):
        self.assert_file_sets_equal(self.get_file_list(root), files)

    def wait_for_sub(self, name, root, timeout=10):
        client = self.client
        task = asyncio.wait_for(client.get_subscription(name, root), timeout)
        return self.loop.run_until_complete(task)

@@ -1582,27 +1582,16 @@
 s = set(
-f for f in 
 sub%5B%22fil
@@ -1600,41 +1600,8 @@
 %22%5D)%0A
-        what = %5Bf for f in what%5D%0A
     
@@ -1787,35 +1787,24 @@
  set1 = set(
-f for f in 
 iter1)%0A     
@@ -1821,19 +1821,8 @@
 set(
-f for f in 
 iter

Remove unnecessary generator and dead code in AsyncWatchmanTestCase