jeremylightsmith-fakeui 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/README +1 -0
- data/Rakefile +25 -0
- data/lib/fakeui.rb +22 -0
- data/lib/fakeui/outline_view.rb +32 -0
- data/lib/fakeui/tab_view.rb +44 -0
- data/lib/fakeui/table_view.rb +25 -0
- data/lib/fakeui/text_field.rb +11 -0
- data/lib/fakeui/text_view.rb +35 -0
- data/lib/fakeui/window.rb +22 -0
- data/spec/fakeui/text_view_spec.rb +36 -0
- data/spec/spec_helper.rb +6 -0
- metadata +65 -0
data/README
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
FakeUI
|
data/Rakefile
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'spec/rake/spectask'
|
|
2
|
+
|
|
3
|
+
task :default => :spec
|
|
4
|
+
|
|
5
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
|
6
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
desc "generate a gem: in general, github should do this for you"
|
|
10
|
+
task :gem do
|
|
11
|
+
`rm -rf *.gem`
|
|
12
|
+
spec = eval(File.read(File.dirname(__FILE__) + "/fakeui.gemspec"))
|
|
13
|
+
expected_files = ['README', 'Rakefile', 'lib/**/*', 'spec/**/*'].map {|d| Dir.glob(d)}.flatten
|
|
14
|
+
unless spec.files.sort == expected_files.sort
|
|
15
|
+
raise "expected gemspec to be \n\t#{expected_files.sort.inspect}\n" +
|
|
16
|
+
"but was\n\t#{spec.files.sort.inspect}"
|
|
17
|
+
end
|
|
18
|
+
Gem::Builder.new(spec).build
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc "build and install gem"
|
|
22
|
+
task :install => :gem do
|
|
23
|
+
`sudo gem install *.gem`
|
|
24
|
+
end
|
|
25
|
+
|
data/lib/fakeui.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# this file loads a fake ui, used for unit testing
|
|
2
|
+
require 'osx/cocoa' # this is used for constants and such, we should get rid of it for testing
|
|
3
|
+
|
|
4
|
+
require 'fakeui/outline_view'
|
|
5
|
+
require 'fakeui/tab_view'
|
|
6
|
+
require 'fakeui/table_view'
|
|
7
|
+
require 'fakeui/text_field'
|
|
8
|
+
require 'fakeui/text_view'
|
|
9
|
+
require 'fakeui/window'
|
|
10
|
+
|
|
11
|
+
# this should be mocked out in tests, if it's not, it should barf, like so...
|
|
12
|
+
module Kernel
|
|
13
|
+
def alert(message, options = {})
|
|
14
|
+
raise message
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class Array
|
|
19
|
+
def to_range
|
|
20
|
+
self
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module FakeUI
|
|
2
|
+
class OutlineView
|
|
3
|
+
def expandItem(item)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def reloadData
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def setDataSource(data_source)
|
|
10
|
+
@data_source = data_source
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def isItemExpanded(item)
|
|
14
|
+
true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def reloadItem_reloadChildren(item, recurse)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def to_s(item = nil, indent = '')
|
|
21
|
+
if @data_source.outlineView_isItemExpandable(self, item)
|
|
22
|
+
(0..@data_source.outlineView_numberOfChildrenOfItem(self, item) - 1).map do |i|
|
|
23
|
+
child = @data_source.outlineView_child_ofItem(self, i, item)
|
|
24
|
+
value = @data_source.outlineView_objectValueForTableColumn_byItem(self, 0, child)
|
|
25
|
+
"#{indent}#{value}\n" + to_s(child, indent + " ")
|
|
26
|
+
end.join("")
|
|
27
|
+
else
|
|
28
|
+
""
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module FakeUI
|
|
2
|
+
class TabView
|
|
3
|
+
def contentRect
|
|
4
|
+
[0, 0, 100, 100]
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def addTabViewItem(item)
|
|
8
|
+
if !@items
|
|
9
|
+
@items = [item]
|
|
10
|
+
@selected = item
|
|
11
|
+
else
|
|
12
|
+
@items << item
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def selectTabViewItem(item)
|
|
17
|
+
raise unless @items.index item
|
|
18
|
+
@selected = item
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def selectTabViewItemAtIndex(index)
|
|
22
|
+
raise unless 0 <= index && index < @items.size
|
|
23
|
+
@selected = @items[index]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def indexOfTabViewItem(item)
|
|
27
|
+
@items.index(item)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def removeTabViewItem(item)
|
|
31
|
+
index = @items.index item
|
|
32
|
+
@items.delete item
|
|
33
|
+
@selected = @items.size > index ? @items[index] : @items[@items.size - 1]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def selectedTabViewItem
|
|
37
|
+
@selected
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def tabViewItems
|
|
41
|
+
@items || []
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module FakeUI
|
|
2
|
+
class TableView
|
|
3
|
+
def setDataSource(dataSource)
|
|
4
|
+
@dataSource = dataSource
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def reloadData
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def selectRow_byExtendingSelection(index, extendSelection)
|
|
11
|
+
@row = index
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def selectedRow
|
|
15
|
+
@row
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def numberOfRows
|
|
19
|
+
@dataSource.numberOfRowsInTableView(self)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def scrollRowToVisible(row)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module FakeUI
|
|
2
|
+
class TextView
|
|
3
|
+
attr_accessor :textStorage, :string, :selectedRange
|
|
4
|
+
|
|
5
|
+
def initialize
|
|
6
|
+
@string = ""
|
|
7
|
+
@selectedRange = [0, 0]
|
|
8
|
+
@textStorage = TextStorage.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def setString(string)
|
|
12
|
+
@string = string
|
|
13
|
+
@selectedRange = [string.size, 0]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def insertText(to_insert)
|
|
17
|
+
@string[@selectedRange[0], @selectedRange[1]] = to_insert
|
|
18
|
+
@selectedRange = [@selectedRange[0] + to_insert.size, 0]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def setSelectedRange(range)
|
|
22
|
+
@selectedRange = range
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def scrollRangeToVisible(range)
|
|
26
|
+
# stub
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def setDelegate(delegate)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class TextStorage
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module FakeUI
|
|
2
|
+
class Window
|
|
3
|
+
def close
|
|
4
|
+
@key = false
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def makeKeyAndOrderFront(parent)
|
|
8
|
+
@key = true
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def makeKeyWindow
|
|
12
|
+
@key = true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def isKeyWindow
|
|
16
|
+
@key
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def makeFirstResponder(view)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe FakeUI::TextView do
|
|
4
|
+
before do
|
|
5
|
+
@text = FakeUI::TextView.new
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should start empty" do
|
|
9
|
+
@text.string.should == ""
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should be settable and insertable" do
|
|
13
|
+
@text.setString("app")
|
|
14
|
+
@text.insertText("le")
|
|
15
|
+
@text.insertText("!")
|
|
16
|
+
@text.string.should == "apple!"
|
|
17
|
+
|
|
18
|
+
@text.setString("orange")
|
|
19
|
+
@text.string.should == "orange"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should keep track of position" do
|
|
23
|
+
@text.setString('cricket')
|
|
24
|
+
@text.setSelectedRange([1, 0])
|
|
25
|
+
@text.selectedRange.should == [1, 0]
|
|
26
|
+
@text.insertText("ow ")
|
|
27
|
+
|
|
28
|
+
@text.string.should == "cow ricket"
|
|
29
|
+
|
|
30
|
+
@text.setSelectedRange([2, 7])
|
|
31
|
+
@text.insertText("l")
|
|
32
|
+
|
|
33
|
+
@text.string.should == "colt"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: jeremylightsmith-fakeui
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: "0.1"
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Jeremy Lightsmith
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2008-07-08 00:00:00 -07:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
description:
|
|
17
|
+
email: jeremy.lightsmith@gmail.com
|
|
18
|
+
executables: []
|
|
19
|
+
|
|
20
|
+
extensions: []
|
|
21
|
+
|
|
22
|
+
extra_rdoc_files:
|
|
23
|
+
- README
|
|
24
|
+
files:
|
|
25
|
+
- README
|
|
26
|
+
- Rakefile
|
|
27
|
+
- lib/fakeui
|
|
28
|
+
- lib/fakeui.rb
|
|
29
|
+
- lib/fakeui/outline_view.rb
|
|
30
|
+
- lib/fakeui/tab_view.rb
|
|
31
|
+
- lib/fakeui/table_view.rb
|
|
32
|
+
- lib/fakeui/text_field.rb
|
|
33
|
+
- lib/fakeui/text_view.rb
|
|
34
|
+
- lib/fakeui/window.rb
|
|
35
|
+
- spec/fakeui
|
|
36
|
+
- spec/fakeui/text_view_spec.rb
|
|
37
|
+
- spec/spec_helper.rb
|
|
38
|
+
has_rdoc: true
|
|
39
|
+
homepage: http://onemanswalk.com/
|
|
40
|
+
post_install_message:
|
|
41
|
+
rdoc_options: []
|
|
42
|
+
|
|
43
|
+
require_paths:
|
|
44
|
+
- lib
|
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
46
|
+
requirements:
|
|
47
|
+
- - ">="
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: "0"
|
|
50
|
+
version:
|
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - ">="
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: "0"
|
|
56
|
+
version:
|
|
57
|
+
requirements: []
|
|
58
|
+
|
|
59
|
+
rubyforge_project:
|
|
60
|
+
rubygems_version: 1.2.0
|
|
61
|
+
signing_key:
|
|
62
|
+
specification_version: 2
|
|
63
|
+
summary: a view stub framework for testing rubycocoa applications
|
|
64
|
+
test_files: []
|
|
65
|
+
|