rbindkeys 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +23 -0
 - data/Gemfile +4 -0
 - data/LICENSE +22 -0
 - data/README.md +52 -0
 - data/Rakefile +11 -0
 - data/bin/rbindkeys +5 -0
 - data/lib/rbindkeys.rb +38 -0
 - data/lib/rbindkeys/bind_resolver.rb +58 -0
 - data/lib/rbindkeys/bind_set.rb +10 -0
 - data/lib/rbindkeys/bind_tree.rb +148 -0
 - data/lib/rbindkeys/cli.rb +103 -0
 - data/lib/rbindkeys/device.rb +25 -0
 - data/lib/rbindkeys/device_operator.rb +78 -0
 - data/lib/rbindkeys/fix_resolver.rb +26 -0
 - data/lib/rbindkeys/key_bind.rb +21 -0
 - data/lib/rbindkeys/key_event_handler.rb +243 -0
 - data/lib/rbindkeys/key_event_handler/configurer.rb +142 -0
 - data/lib/rbindkeys/log_utils.rb +51 -0
 - data/lib/rbindkeys/observer.rb +140 -0
 - data/lib/rbindkeys/version.rb +3 -0
 - data/lib/rbindkeys/virtual_device.rb +14 -0
 - data/lib/rbindkeys/window_matcher.rb +35 -0
 - data/rbindkeys.gemspec +26 -0
 - data/sample/emacs.rb +100 -0
 - data/sample/swap_left_ctrl_and_caps.rb +4 -0
 - data/spec/bind_resolver_spec.rb +101 -0
 - data/spec/bind_tree_bind_spec.rb +48 -0
 - data/spec/bind_tree_resolve_for_pressed_event_spec.rb +74 -0
 - data/spec/bind_tree_resolve_for_released_event_spec.rb +63 -0
 - data/spec/cli_spec.rb +81 -0
 - data/spec/device_operator_spec.rb +57 -0
 - data/spec/fix_resolver_spec.rb +57 -0
 - data/spec/key_event_handler/configurer_spec.rb +201 -0
 - data/spec/key_event_handler/handle_spec.rb +222 -0
 - metadata +190 -0
 
| 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding:utf-8; mode:ruby; -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rbindkeys'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            include Rbindkeys
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            describe BindTree do
         
     | 
| 
      
 8 
     | 
    
         
            +
              context "normal" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                describe 'BindTree#bind' do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @bt = BindTree.new
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  context 'with valid input/output' do
         
     | 
| 
      
 15 
     | 
    
         
            +
                    it "should construct expected tree" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                      input = [1,2]
         
     | 
| 
      
 17 
     | 
    
         
            +
                      @bt.bind input, [2,3]
         
     | 
| 
      
 18 
     | 
    
         
            +
                      input.should == [1,2] # should not destroyable
         
     | 
| 
      
 19 
     | 
    
         
            +
                      @bt.bind [1,0], [2,3]
         
     | 
| 
      
 20 
     | 
    
         
            +
                      @bt.bind [2], [2,4]
         
     | 
| 
      
 21 
     | 
    
         
            +
                      @bt.tree[1][2].payload.output.should == [2,3]
         
     | 
| 
      
 22 
     | 
    
         
            +
                      @bt.tree[1][0].payload.output.should == [2,3]
         
     | 
| 
      
 23 
     | 
    
         
            +
                      @bt.tree[2].payload.output.should == [2,4]
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  context 'with duplicate node input' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                    it "should raise DuplicateNodeError" do
         
     | 
| 
      
 28 
     | 
    
         
            +
                      @bt.bind [1,2], [2,3]
         
     | 
| 
      
 29 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 30 
     | 
    
         
            +
                        @bt.bind [1,2], [2,4]
         
     | 
| 
      
 31 
     | 
    
         
            +
                        violated "should raise"
         
     | 
| 
      
 32 
     | 
    
         
            +
                      rescue => e
         
     | 
| 
      
 33 
     | 
    
         
            +
                        e.class.should == BindTree::DuplicateNodeError
         
     | 
| 
      
 34 
     | 
    
         
            +
                      end
         
     | 
| 
      
 35 
     | 
    
         
            +
                    end
         
     | 
| 
      
 36 
     | 
    
         
            +
                    it "should raise DuplicateNodeError" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                      @bt.bind [1,2], [2,3]
         
     | 
| 
      
 38 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 39 
     | 
    
         
            +
                        @bt.bind [1,2,6], [2,4]
         
     | 
| 
      
 40 
     | 
    
         
            +
                        violated "should raise"
         
     | 
| 
      
 41 
     | 
    
         
            +
                      rescue => e
         
     | 
| 
      
 42 
     | 
    
         
            +
                        e.class.should == BindTree::DuplicateNodeError
         
     | 
| 
      
 43 
     | 
    
         
            +
                      end
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                end # describe
         
     | 
| 
      
 47 
     | 
    
         
            +
              end # context
         
     | 
| 
      
 48 
     | 
    
         
            +
            end # describe
         
     | 
| 
         @@ -0,0 +1,74 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding:utf-8; mode:ruby; -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rbindkeys'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            include Rbindkeys
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            describe BindTree do
         
     | 
| 
      
 8 
     | 
    
         
            +
              context "BindTree constracted" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                before do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @bt = BindTree.new
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @bt.bind [1,2,3], [4,5,6]
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @bt.bind [1,2,0], [6]
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @bt.bind [1,3], [5,6]
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @bt.bind [1,10,0], [55]
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @bt.bind [2], [2]
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @bt.bind [[4],[5]], [6]
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                describe "BindTree#resolve_for_pressed_event" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @ev = Revdev::InputEvent.new nil, Revdev::EV_KEY, 0, 1
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  context "with unsorted pressed keys" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    it "should rase" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 26 
     | 
    
         
            +
                        @bt.resolve_for_pressed_event(@ev, [2, 1])
         
     | 
| 
      
 27 
     | 
    
         
            +
                        violated "should raise"
         
     | 
| 
      
 28 
     | 
    
         
            +
                      rescue => e
         
     | 
| 
      
 29 
     | 
    
         
            +
                      end
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  context "with binded pressed keys" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                    it "should return Arrays and pressing_binds added" do
         
     | 
| 
      
 34 
     | 
    
         
            +
                      @ev.code = 0
         
     | 
| 
      
 35 
     | 
    
         
            +
                      @bt.resolve_for_pressed_event(@ev, [1,2]).output.should == [6]
         
     | 
| 
      
 36 
     | 
    
         
            +
                      expected_pressing_binds = [1, 2, @ev.code]
         
     | 
| 
      
 37 
     | 
    
         
            +
                      @bt.active_key_binds[0].input.should == expected_pressing_binds
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                      @ev.code = 2
         
     | 
| 
      
 40 
     | 
    
         
            +
                      @bt.resolve_for_pressed_event(@ev, []).output.should == [2]
         
     | 
| 
      
 41 
     | 
    
         
            +
                      expected_pressing_binds = [@ev.code]
         
     | 
| 
      
 42 
     | 
    
         
            +
                      @bt.active_key_binds[1].input.should == expected_pressing_binds
         
     | 
| 
      
 43 
     | 
    
         
            +
                    end
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  context "with no binded pressed keys" do
         
     | 
| 
      
 46 
     | 
    
         
            +
                    it "should return nil" do
         
     | 
| 
      
 47 
     | 
    
         
            +
                      @ev.code = 5
         
     | 
| 
      
 48 
     | 
    
         
            +
                      @bt.resolve_for_pressed_event(@ev, []).should == @bt.default_value
         
     | 
| 
      
 49 
     | 
    
         
            +
                      @bt.resolve_for_pressed_event(@ev, [1]).should == @bt.default_value
         
     | 
| 
      
 50 
     | 
    
         
            +
                      @ev.code = 1
         
     | 
| 
      
 51 
     | 
    
         
            +
                      @bt.resolve_for_pressed_event(@ev, []).should == @bt.default_value
         
     | 
| 
      
 52 
     | 
    
         
            +
                    end
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                  context "with pressed keys as super set of binded keys" do
         
     | 
| 
      
 55 
     | 
    
         
            +
                    it "should return Arrays" do
         
     | 
| 
      
 56 
     | 
    
         
            +
                      @ev.code = 0
         
     | 
| 
      
 57 
     | 
    
         
            +
                      @bt.resolve_for_pressed_event(@ev, [1,2,4,5]).output.should == [6]
         
     | 
| 
      
 58 
     | 
    
         
            +
                      @bt.resolve_for_pressed_event(@ev, [1,4,5,10]).output.should == [55]
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
                  context "with 2 stroke keybind" do
         
     | 
| 
      
 62 
     | 
    
         
            +
                    it "should return Arrays" do
         
     | 
| 
      
 63 
     | 
    
         
            +
                      @ev.code = 4
         
     | 
| 
      
 64 
     | 
    
         
            +
                      tree = @bt.resolve_for_pressed_event(@ev, [])
         
     | 
| 
      
 65 
     | 
    
         
            +
                      tree.class.should == BindTree
         
     | 
| 
      
 66 
     | 
    
         
            +
                      p tree.tree
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                      @ev.code = 5
         
     | 
| 
      
 69 
     | 
    
         
            +
                      tree.resolve_for_pressed_event(@ev, []).output.should == [6]
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              end # context
         
     | 
| 
      
 74 
     | 
    
         
            +
            end # describe
         
     | 
| 
         @@ -0,0 +1,63 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding:utf-8; mode:ruby; -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rbindkeys'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            include Rbindkeys
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            describe BindTree do
         
     | 
| 
      
 8 
     | 
    
         
            +
              describe '#resolve_for_released_event' do
         
     | 
| 
      
 9 
     | 
    
         
            +
                before do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @bt = BindTree.new
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @kb = []
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @kb << KeyBind.new([1,2,3], [4,5,6])
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @kb << KeyBind.new([1,2,0], [6])
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @kb.each do |kb|
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @bt.bind kb.input, kb.output
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
                context "no pressed binds" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @ev = Revdev::InputEvent.new nil, Revdev::EV_KEY, 0, 0
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  it "'s pressed_binds should have empty" do
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @bt.active_key_binds.should be_empty
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @bt.resolve_for_pressed_event(@ev, []).should == @bt.default_value
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @bt.active_key_binds.should be_empty
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
                context "a pressed bind" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 30 
     | 
    
         
            +
                    ev = Revdev::InputEvent.new nil, Revdev::EV_KEY, 0, 1
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @bt.resolve_for_pressed_event ev, [1,2,4]
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @ev = Revdev::InputEvent.new nil, Revdev::EV_KEY, 0, 0
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  it "'s pressed_binds should empty" do
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @bt.active_key_binds.size.should == 1
         
     | 
| 
      
 36 
     | 
    
         
            +
                    @bt.resolve_for_released_event(@ev, [])[0].output.should == [6]
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @bt.active_key_binds.should be_empty
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
                context "two pressed binds" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 42 
     | 
    
         
            +
                    ev = Revdev::InputEvent.new nil, Revdev::EV_KEY, 0, 1
         
     | 
| 
      
 43 
     | 
    
         
            +
                    @bt.resolve_for_pressed_event ev, [1,2,4]
         
     | 
| 
      
 44 
     | 
    
         
            +
                    ev = Revdev::InputEvent.new nil, Revdev::EV_KEY, 3, 1
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @bt.resolve_for_pressed_event ev, [1,2,4]
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @ev = Revdev::InputEvent.new nil, Revdev::EV_KEY, 0, 0
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                  it "'s pressed_binds should decrease" do
         
     | 
| 
      
 49 
     | 
    
         
            +
                    @bt.active_key_binds.length.should == 2
         
     | 
| 
      
 50 
     | 
    
         
            +
                    @bt.resolve_for_released_event(@ev, [])
         
     | 
| 
      
 51 
     | 
    
         
            +
                    @bt.active_key_binds.length.should == 1
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @ev.code = 3
         
     | 
| 
      
 53 
     | 
    
         
            +
                    @bt.resolve_for_released_event(@ev, [])
         
     | 
| 
      
 54 
     | 
    
         
            +
                    @bt.active_key_binds.should be_empty
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                  it "'s pressed_binds should empty" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                    @ev.code = 1
         
     | 
| 
      
 58 
     | 
    
         
            +
                    @bt.resolve_for_released_event(@ev, []).length.should == 2
         
     | 
| 
      
 59 
     | 
    
         
            +
                    @bt.active_key_binds.should be_empty
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/cli_spec.rb
    ADDED
    
    | 
         @@ -0,0 +1,81 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding:utf-8; mode:ruby; -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rbindkeys'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'revdev'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            include Rbindkeys
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            describe CLI do
         
     | 
| 
      
 9 
     | 
    
         
            +
              describe '#.main' do
         
     | 
| 
      
 10 
     | 
    
         
            +
                context ', when ARGV is empty,' do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @stdout = StringIO.new
         
     | 
| 
      
 13 
     | 
    
         
            +
                    # stub(STDOUT){@stdout}
         
     | 
| 
      
 14 
     | 
    
         
            +
                    ARGV = []
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  it 'shoud exit with code 1' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                    expect { CLI::main }.to raise_error do |e|
         
     | 
| 
      
 18 
     | 
    
         
            +
                      e.should be_a SystemExit
         
     | 
| 
      
 19 
     | 
    
         
            +
                      e.status.should == 1
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
                context ', when ARGV have an argument,' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 25 
     | 
    
         
            +
                    ARGV = ['foo']
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @observer = mock Observer
         
     | 
| 
      
 27 
     | 
    
         
            +
                    Observer.should_receive(:new){@observer}
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @observer.should_receive(:start){nil}
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                  it 'should call Observer#new#start' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    config = CLI::config
         
     | 
| 
      
 32 
     | 
    
         
            +
                    CLI::main
         
     | 
| 
      
 33 
     | 
    
         
            +
                    CLI::config.should == config
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
                context ', when ARGV have an invalid option (--config),' do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 38 
     | 
    
         
            +
                    ARGV = ['--config']
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  it 'should exit with code 1' do
         
     | 
| 
      
 41 
     | 
    
         
            +
                    expect { CLI::main }.to raise_error do |e|
         
     | 
| 
      
 42 
     | 
    
         
            +
                      e.should be_a SystemExit
         
     | 
| 
      
 43 
     | 
    
         
            +
                      e.status.should == 1
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
                context ', when ARGV have an option (--config) and an event device,' do
         
     | 
| 
      
 48 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 49 
     | 
    
         
            +
                    @config = 'a_config_file'
         
     | 
| 
      
 50 
     | 
    
         
            +
                    ARGV = ['--config', @config,'foodev']
         
     | 
| 
      
 51 
     | 
    
         
            +
                    @observer = mock Observer
         
     | 
| 
      
 52 
     | 
    
         
            +
                    Observer.should_receive(:new){@observer}
         
     | 
| 
      
 53 
     | 
    
         
            +
                    @observer.should_receive(:start){nil}
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  it 'should call Observer#new#start ' do
         
     | 
| 
      
 56 
     | 
    
         
            +
                    CLI::main
         
     | 
| 
      
 57 
     | 
    
         
            +
                    CLI::config.should == @config
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
                context ', when ARGV have an option (--evdev-list),' do
         
     | 
| 
      
 61 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 62 
     | 
    
         
            +
                    ARGV = ['--evdev-list']
         
     | 
| 
      
 63 
     | 
    
         
            +
                    @evdev = mock Revdev::EventDevice
         
     | 
| 
      
 64 
     | 
    
         
            +
                    @id = mock Object
         
     | 
| 
      
 65 
     | 
    
         
            +
                    @evdev.stub(:device_name){"foo"}
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @evdev.stub(:device_id){@id}
         
     | 
| 
      
 67 
     | 
    
         
            +
                    @id.stub(:hr_bustype){'bar'}
         
     | 
| 
      
 68 
     | 
    
         
            +
                    Revdev::EventDevice.stub(:new){@evdev}
         
     | 
| 
      
 69 
     | 
    
         
            +
                    Dir.should_receive(:glob).with(CLI::EVDEVS).
         
     | 
| 
      
 70 
     | 
    
         
            +
                      and_return(['/dev/input/event4','/dev/input/event2',
         
     | 
| 
      
 71 
     | 
    
         
            +
                                  '/dev/input/event13'])
         
     | 
| 
      
 72 
     | 
    
         
            +
                    # @stdout = StringIO.new
         
     | 
| 
      
 73 
     | 
    
         
            +
                    # $stdout = @stdout
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
      
 75 
     | 
    
         
            +
                  it 'should pring device info' do
         
     | 
| 
      
 76 
     | 
    
         
            +
                    CLI::main
         
     | 
| 
      
 77 
     | 
    
         
            +
                    # @stdout.string.should match(%r!^/dev/input/event2!)
         
     | 
| 
      
 78 
     | 
    
         
            +
                  end
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,57 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding:utf-8; mode:ruby; -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rbindkeys'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'revdev'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            include Rbindkeys
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            describe DeviceOperator do
         
     | 
| 
      
 9 
     | 
    
         
            +
              before do
         
     | 
| 
      
 10 
     | 
    
         
            +
                @dev = mock Device
         
     | 
| 
      
 11 
     | 
    
         
            +
                @vdev = mock VirtualDevice
         
     | 
| 
      
 12 
     | 
    
         
            +
                @operator = DeviceOperator.new @dev, @vdev
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              describe "#send_key" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                context "with a code and a press value" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @code = 10
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @value = 1
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  it "should call #send_event" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @operator.should_receive(:send_event).with(Revdev::EV_KEY,@code,@value)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @operator.send_key @code, @value
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              context "#send_event" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                context "with normal values" do
         
     | 
| 
      
 30 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @type = Revdev::EV_KEY
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @code = 10
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @value = 1
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  it "should send a #write_input_event to @vdev" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                    @vdev.should_receive(:write_input_event) do |ie|
         
     | 
| 
      
 37 
     | 
    
         
            +
                      ie.code.should == @code
         
     | 
| 
      
 38 
     | 
    
         
            +
                      10
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @operator.send_event @type, @code, @value
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
                context "with an input event" do
         
     | 
| 
      
 44 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @ie = Revdev::InputEvent.new nil, Revdev::EV_KEY, 10, 1
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  it "should send a #write_input_event to @vdev" do
         
     | 
| 
      
 48 
     | 
    
         
            +
                    @vdev.should_receive(:write_input_event) do |ie|
         
     | 
| 
      
 49 
     | 
    
         
            +
                      ie.should == @ie
         
     | 
| 
      
 50 
     | 
    
         
            +
                      10
         
     | 
| 
      
 51 
     | 
    
         
            +
                    end
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @operator.send_event @ie
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,57 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding:utf-8; mode:ruby; -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rbindkeys'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            include Rbindkeys
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            describe FixResolver do
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              describe ".instance" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                context "with different value" do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  it "should return different instances" do
         
     | 
| 
      
 12 
     | 
    
         
            +
                    f = FixResolver.instance :foo
         
     | 
| 
      
 13 
     | 
    
         
            +
                    g = FixResolver.instance :bar
         
     | 
| 
      
 14 
     | 
    
         
            +
                    f.equal?(g).should be_false
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  it "should return different instances" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                    f = FixResolver.instance :foo
         
     | 
| 
      
 18 
     | 
    
         
            +
                    g = FixResolver.instance :foo
         
     | 
| 
      
 19 
     | 
    
         
            +
                    f.equal?(g).should be_true
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              describe '.new' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                context 'with any arg' do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  it 'should raise an exception' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                    lambda{FixResolver.new}.should raise_error
         
     | 
| 
      
 28 
     | 
    
         
            +
                    lambda{FixResolver.new :foo}.should raise_error
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              describe '#bind' do
         
     | 
| 
      
 34 
     | 
    
         
            +
                before do
         
     | 
| 
      
 35 
     | 
    
         
            +
                  @resolver = FixResolver.instance :foo
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
                context 'with any args' do
         
     | 
| 
      
 38 
     | 
    
         
            +
                  it 'should raise an exception' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                    lambda{@resolver.bind 1, 2}.should raise_error
         
     | 
| 
      
 40 
     | 
    
         
            +
                    lambda{@resolver.bind [], []}.should raise_error
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              describe '#resolve' do
         
     | 
| 
      
 46 
     | 
    
         
            +
                before do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  @resolver = FixResolver.instance :foo
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
                context 'with any args' do
         
     | 
| 
      
 50 
     | 
    
         
            +
                  it 'should return :foo' do
         
     | 
| 
      
 51 
     | 
    
         
            +
                    @resolver.resolve(1, []).should == :foo
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @resolver.resolve(3, [1,2]).should == :foo
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,201 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding:utf-8; mode:ruby; -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rbindkeys'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'revdev'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            include Rbindkeys
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            $tmp_dir = 'tmp'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            describe KeyEventHandler do
         
     | 
| 
      
 12 
     | 
    
         
            +
              before :all do
         
     | 
| 
      
 13 
     | 
    
         
            +
                FileUtils.mkdir $tmp_dir
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              after :all do
         
     | 
| 
      
 17 
     | 
    
         
            +
                FileUtils.rm_r $tmp_dir
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              before do
         
     | 
| 
      
 21 
     | 
    
         
            +
                @ope = mock DeviceOperator
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              describe "bind keys methods" do
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                before do
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @defval = :hoge
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @bind_set = []
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @res = mock Rbindkeys::BindResolver
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  # define stubs
         
     | 
| 
      
 32 
     | 
    
         
            +
                  @res.stub(:bind) do |i, o|
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @bind_set << [i, o]
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  @res.stub(:resolve) do |input, pressed_key_set|
         
     | 
| 
      
 36 
     | 
    
         
            +
                    if input == 10
         
     | 
| 
      
 37 
     | 
    
         
            +
                      BindResolver.new
         
     | 
| 
      
 38 
     | 
    
         
            +
                    else
         
     | 
| 
      
 39 
     | 
    
         
            +
                      @defval
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @res.stub(:just_resolve) do |input, pressed_key_set|
         
     | 
| 
      
 43 
     | 
    
         
            +
                    if input == 10
         
     | 
| 
      
 44 
     | 
    
         
            +
                      BindResolver.new
         
     | 
| 
      
 45 
     | 
    
         
            +
                    else
         
     | 
| 
      
 46 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @res.stub(:kind_of?) do |klass|
         
     | 
| 
      
 50 
     | 
    
         
            +
                    klass == Rbindkeys::BindResolver
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                  Rbindkeys::BindResolver.stub!(:new).and_return(@res)
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                  @handler = KeyEventHandler.new @ope
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                describe KeyEventHandler, "#pre_bind_key" do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  context "with a bind" do
         
     | 
| 
      
 59 
     | 
    
         
            +
                    it "map the bind to @pre_bind_resolver" do
         
     | 
| 
      
 60 
     | 
    
         
            +
                      @handler.pre_bind_key 1, 0
         
     | 
| 
      
 61 
     | 
    
         
            +
                      @handler.pre_bind_resolver[1].should == 0
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
                  context "with duplicated binds" do
         
     | 
| 
      
 65 
     | 
    
         
            +
                    it "should raise a DuplicatedNodeError" do
         
     | 
| 
      
 66 
     | 
    
         
            +
                      @handler.pre_bind_key 1, 0
         
     | 
| 
      
 67 
     | 
    
         
            +
                      lambda{ @handler.pre_bind_key(1, 2) }.should raise_error(DuplicateNodeError)
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                describe KeyEventHandler, "#bind_key" do
         
     | 
| 
      
 73 
     | 
    
         
            +
                  context "with two Fixnum" do
         
     | 
| 
      
 74 
     | 
    
         
            +
                    it "construct @bind_set" do
         
     | 
| 
      
 75 
     | 
    
         
            +
                      @handler.bind_key 0, 1
         
     | 
| 
      
 76 
     | 
    
         
            +
                      @bind_set.should == [[[0],[1]]]
         
     | 
| 
      
 77 
     | 
    
         
            +
                    end
         
     | 
| 
      
 78 
     | 
    
         
            +
                  end
         
     | 
| 
      
 79 
     | 
    
         
            +
                  context "with two Arrays" do
         
     | 
| 
      
 80 
     | 
    
         
            +
                    it "construct @bind_set" do
         
     | 
| 
      
 81 
     | 
    
         
            +
                      @handler.bind_key [0, 1], [2, 3]
         
     | 
| 
      
 82 
     | 
    
         
            +
                      @bind_set.should == [[[0, 1], [2, 3]]]
         
     | 
| 
      
 83 
     | 
    
         
            +
                    end
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
                  context "with an Array and a KeyResolver" do
         
     | 
| 
      
 86 
     | 
    
         
            +
                    it "construct @bind_set" do
         
     | 
| 
      
 87 
     | 
    
         
            +
                      @handler.bind_key [0,1], @res
         
     | 
| 
      
 88 
     | 
    
         
            +
                      @bind_set.should == [[[0,1], @res]]
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
                  context "with an Array and a block" do
         
     | 
| 
      
 92 
     | 
    
         
            +
                    it "construct @bind_set" do
         
     | 
| 
      
 93 
     | 
    
         
            +
                      @handler.bind_key [0,1] do
         
     | 
| 
      
 94 
     | 
    
         
            +
                        p 'foo'
         
     | 
| 
      
 95 
     | 
    
         
            +
                      end
         
     | 
| 
      
 96 
     | 
    
         
            +
                      @bind_set.first[1].class.should == Proc
         
     | 
| 
      
 97 
     | 
    
         
            +
                    end
         
     | 
| 
      
 98 
     | 
    
         
            +
                  end
         
     | 
| 
      
 99 
     | 
    
         
            +
                  context "with mix classes" do
         
     | 
| 
      
 100 
     | 
    
         
            +
                    it "construct @bind_set" do
         
     | 
| 
      
 101 
     | 
    
         
            +
                      @handler.bind_key 1, [2, 3]
         
     | 
| 
      
 102 
     | 
    
         
            +
                      @handler.bind_key [2, 3], 4
         
     | 
| 
      
 103 
     | 
    
         
            +
                      @bind_set.should == [[[1], [2, 3]], [[2, 3], [4]]]
         
     | 
| 
      
 104 
     | 
    
         
            +
                    end
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
      
 106 
     | 
    
         
            +
                  context "with invalid args" do
         
     | 
| 
      
 107 
     | 
    
         
            +
                    it "raise some error" do
         
     | 
| 
      
 108 
     | 
    
         
            +
                      lambda{@handler.bind_key [1], [[[2]]]}.should raise_error
         
     | 
| 
      
 109 
     | 
    
         
            +
                    end
         
     | 
| 
      
 110 
     | 
    
         
            +
                  end
         
     | 
| 
      
 111 
     | 
    
         
            +
                end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                describe KeyEventHandler, "#bind_prefix_key" do
         
     | 
| 
      
 114 
     | 
    
         
            +
                  context "with a new prefix key" do
         
     | 
| 
      
 115 
     | 
    
         
            +
                    it "construct @bind_set" do
         
     | 
| 
      
 116 
     | 
    
         
            +
                      @handler.bind_prefix_key [0,1] do
         
     | 
| 
      
 117 
     | 
    
         
            +
                        @handler.bind_key 2, 3
         
     | 
| 
      
 118 
     | 
    
         
            +
                      end
         
     | 
| 
      
 119 
     | 
    
         
            +
                      @bind_set.length.should == 2
         
     | 
| 
      
 120 
     | 
    
         
            +
                      @bind_set.include?([[2],[3]]).should be_true
         
     | 
| 
      
 121 
     | 
    
         
            +
                    end
         
     | 
| 
      
 122 
     | 
    
         
            +
                  end
         
     | 
| 
      
 123 
     | 
    
         
            +
                  context "with a existing prefix key" do
         
     | 
| 
      
 124 
     | 
    
         
            +
                    it "should construct @bind_set" do
         
     | 
| 
      
 125 
     | 
    
         
            +
                      @handler.bind_prefix_key [0,10] do
         
     | 
| 
      
 126 
     | 
    
         
            +
                        @handler.bind_key 2, 3
         
     | 
| 
      
 127 
     | 
    
         
            +
                      end
         
     | 
| 
      
 128 
     | 
    
         
            +
                      @bind_set.length.should == 1
         
     | 
| 
      
 129 
     | 
    
         
            +
                      @bind_set.include?([[2],[3]]).should be_true
         
     | 
| 
      
 130 
     | 
    
         
            +
                    end
         
     | 
| 
      
 131 
     | 
    
         
            +
                  end
         
     | 
| 
      
 132 
     | 
    
         
            +
                end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                describe KeyEventHandler, "#window" do
         
     | 
| 
      
 135 
     | 
    
         
            +
                  context 'with invalid arg' do
         
     | 
| 
      
 136 
     | 
    
         
            +
                    it 'should raise ArgumentError' do
         
     | 
| 
      
 137 
     | 
    
         
            +
                      lambda { @handler.window(nil, "foo") }.should raise_error
         
     | 
| 
      
 138 
     | 
    
         
            +
                      lambda { @handler.window(nil, :class => "bar") }.should raise_error
         
     | 
| 
      
 139 
     | 
    
         
            +
                    end
         
     | 
| 
      
 140 
     | 
    
         
            +
                  end
         
     | 
| 
      
 141 
     | 
    
         
            +
                  context 'with nil and a regex' do
         
     | 
| 
      
 142 
     | 
    
         
            +
                    it 'should return the BindResolver and added it to @window_bind_resolver_map' do
         
     | 
| 
      
 143 
     | 
    
         
            +
                      size = @handler.window_bind_resolver_map.size
         
     | 
| 
      
 144 
     | 
    
         
            +
                      res = @handler.window(nil, /foo/)
         
     | 
| 
      
 145 
     | 
    
         
            +
                      res.should be_a BindResolver
         
     | 
| 
      
 146 
     | 
    
         
            +
                      (@handler.window_bind_resolver_map.size - size).should == 1
         
     | 
| 
      
 147 
     | 
    
         
            +
                      p '--------------'
         
     | 
| 
      
 148 
     | 
    
         
            +
                      Hash[*@handler.window_bind_resolver_map.flatten].value?(res).should be_true
         
     | 
| 
      
 149 
     | 
    
         
            +
                    end
         
     | 
| 
      
 150 
     | 
    
         
            +
                  end
         
     | 
| 
      
 151 
     | 
    
         
            +
                  context 'with nil and a Hash having :class key' do
         
     | 
| 
      
 152 
     | 
    
         
            +
                    it 'should return the BindResolver and added it to @window_bind_resolver_map' do
         
     | 
| 
      
 153 
     | 
    
         
            +
                      size = @handler.window_bind_resolver_map.size
         
     | 
| 
      
 154 
     | 
    
         
            +
                      res = @handler.window(nil, :class => /foo/)
         
     | 
| 
      
 155 
     | 
    
         
            +
                      res.should be_a BindResolver
         
     | 
| 
      
 156 
     | 
    
         
            +
                      (@handler.window_bind_resolver_map.size - size).should == 1
         
     | 
| 
      
 157 
     | 
    
         
            +
                      Hash[*@handler.window_bind_resolver_map.flatten].value?(res).should be_true
         
     | 
| 
      
 158 
     | 
    
         
            +
                    end
         
     | 
| 
      
 159 
     | 
    
         
            +
                  end
         
     | 
| 
      
 160 
     | 
    
         
            +
                  context 'with a BindResolver and a regex' do
         
     | 
| 
      
 161 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 162 
     | 
    
         
            +
                      @arg_resolver = mock BindResolver
         
     | 
| 
      
 163 
     | 
    
         
            +
                      @arg_resolver.stub(:kind_of?).and_return(false)
         
     | 
| 
      
 164 
     | 
    
         
            +
                      @arg_resolver.stub(:kind_of?).with(BindResolver).and_return(true)
         
     | 
| 
      
 165 
     | 
    
         
            +
                    end
         
     | 
| 
      
 166 
     | 
    
         
            +
                    it 'should return the BindResolver and added it to @window_bind_resolver_map' do
         
     | 
| 
      
 167 
     | 
    
         
            +
                      size = @handler.window_bind_resolver_map.size
         
     | 
| 
      
 168 
     | 
    
         
            +
                      res = @handler.window(@arg_resolver, /foo/)
         
     | 
| 
      
 169 
     | 
    
         
            +
                      res.should be_a BindResolver
         
     | 
| 
      
 170 
     | 
    
         
            +
                      (@handler.window_bind_resolver_map.size - size).should == 1
         
     | 
| 
      
 171 
     | 
    
         
            +
                      Hash[*@handler.window_bind_resolver_map.flatten].value?(res).should be_true
         
     | 
| 
      
 172 
     | 
    
         
            +
                    end
         
     | 
| 
      
 173 
     | 
    
         
            +
                  end
         
     | 
| 
      
 174 
     | 
    
         
            +
                end
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                describe "KeyEventHandler#load_config" do
         
     | 
| 
      
 177 
     | 
    
         
            +
                  before :all do
         
     | 
| 
      
 178 
     | 
    
         
            +
                    @config = File.join $tmp_dir, 'config'
         
     | 
| 
      
 179 
     | 
    
         
            +
                    open @config, 'w' do |f|
         
     | 
| 
      
 180 
     | 
    
         
            +
                      f.write <<-EOF
         
     | 
| 
      
 181 
     | 
    
         
            +
            pre_bind_key KEY_CAPSLOCK, KEY_LEFTCTRL
         
     | 
| 
      
 182 
     | 
    
         
            +
            bind_key [KEY_LEFTCTRL,KEY_F], KEY_RIGHT
         
     | 
| 
      
 183 
     | 
    
         
            +
            bind_key [KEY_LEFTCTRL,KEY_W], [KEY_LEFTCTRL,KEY_X]
         
     | 
| 
      
 184 
     | 
    
         
            +
            bind_prefix_key [KEY_LEFTCTRL,KEY_X] do
         
     | 
| 
      
 185 
     | 
    
         
            +
              bind_key KEY_K, [KEY_LEFTCTRL, KEY_W]
         
     | 
| 
      
 186 
     | 
    
         
            +
            end
         
     | 
| 
      
 187 
     | 
    
         
            +
            EOF
         
     | 
| 
      
 188 
     | 
    
         
            +
                    end
         
     | 
| 
      
 189 
     | 
    
         
            +
                  end
         
     | 
| 
      
 190 
     | 
    
         
            +
                  it "construct @pre_bind_key_set and @bind_key_set" do
         
     | 
| 
      
 191 
     | 
    
         
            +
                    @handler.load_config @config
         
     | 
| 
      
 192 
     | 
    
         
            +
                    @handler.pre_bind_resolver.size.should == 1
         
     | 
| 
      
 193 
     | 
    
         
            +
                    @bind_set.length.should == 4
         
     | 
| 
      
 194 
     | 
    
         
            +
                    @bind_set[0][1].should == [Revdev::KEY_RIGHT]
         
     | 
| 
      
 195 
     | 
    
         
            +
                    @bind_set[1][1].should == [Revdev::KEY_LEFTCTRL, Revdev::KEY_X]
         
     | 
| 
      
 196 
     | 
    
         
            +
                    @bind_set[2][1].should == @res
         
     | 
| 
      
 197 
     | 
    
         
            +
                    @bind_set[3][1].should == [Revdev::KEY_LEFTCTRL, Revdev::KEY_W]
         
     | 
| 
      
 198 
     | 
    
         
            +
                  end
         
     | 
| 
      
 199 
     | 
    
         
            +
                end
         
     | 
| 
      
 200 
     | 
    
         
            +
              end
         
     | 
| 
      
 201 
     | 
    
         
            +
            end
         
     |