blob: 06b8fe47fae2867cfeb32302ee2e9e71e988c764 [file] [log] [blame]
# frozen_string_literal: true
# Licensed to the Software Freedom Conservancy (SFC) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The SFC licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
require File.expand_path('../../spec_helper', __dir__)
module Selenium
module WebDriver
module Interactions
describe PointerEventProperties do
let(:pointer_event) do
Class.new(Interaction) do
include PointerEventProperties
def initialize(opts)
@opts = opts
super
end
def assert_source(*); end
end
end
let(:opts) do
{width: 0,
height: 0,
pressure: 0.5,
tangential_pressure: 0.4,
tilt_x: -40,
tilt_y: -10,
twist: 177,
altitude_angle: 1.0,
azimuth_angle: 0.5}
end
describe '#process_opts' do
it 'validates all pointer event properties' do
pointer = pointer_event.new(opts)
allow(pointer).to receive(:assert_number)
pointer.process_opts
expect(pointer).to have_received(:assert_number).exactly(9).times
end
it 'validates subset of pointer event properties' do
opts.delete :width
opts.delete :tilt_x
pointer = pointer_event.new(opts)
allow(pointer).to receive(:assert_number)
pointer.process_opts
expect(pointer).to have_received(:assert_number).exactly(7).times
end
end
describe '#assert_number' do
context 'when Numeric' do
let(:min) { 0.0 }
let(:max) { 1 }
it 'raises a TypeError if not a Number' do
expect { pointer_event.new(opts).send(:assert_number, 'nan', min, max) }.to raise_error(TypeError)
end
it 'raises a ArgumentError if below minimum' do
expect { pointer_event.new(nil).send(:assert_number, -max, min, max) }.to raise_error(ArgumentError)
end
it 'raises a ArgumentError if number above maximum' do
expect { pointer_event.new(nil).send(:assert_number, max * 2, min, max) }.to raise_error(ArgumentError)
end
it 'returns number if minimum' do
expect(pointer_event.new(nil).send(:assert_number, min, min, max)).to eq min
end
it 'returns number if maximum' do
expect(pointer_event.new(nil).send(:assert_number, max, min, max)).to eq max
end
it 'returns number if no max provided' do
expect(pointer_event.new(nil).send(:assert_number, max, min)).to eq max
end
end
context 'when Integer' do
let(:min) { 0 }
let(:max) { 1 }
it 'raises a TypeError if not an Integer' do
expect { pointer_event.new(nil).send(:assert_number, 4.4, min, max) }.to raise_error(TypeError)
end
it 'raises a ArgumentError if below minimum' do
expect { pointer_event.new(nil).send(:assert_number, -max, min, max) }.to raise_error(ArgumentError)
end
it 'raises a ArgumentError if number above maximum' do
expect { pointer_event.new(nil).send(:assert_number, max * 2, min, max) }.to raise_error(ArgumentError)
end
it 'returns number if minimum' do
expect(pointer_event.new(nil).send(:assert_number, min, min, max)).to eq min
end
it 'returns number if maximum' do
expect(pointer_event.new(nil).send(:assert_number, max, min, max)).to eq max
end
end
end
end
end # Interactions
end # WebDriver
end # Selenium