# Table name: changeset_comments
#
# id :integer not null, primary key
-# changeset_id :bigint(8) not null
-# author_id :bigint(8) not null
+# changeset_id :integer not null
+# author_id :integer not null
# body :text not null
# created_at :datetime not null
# visible :boolean not null
#
# Table name: changeset_tags
#
-# changeset_id :bigint(8) not null, primary key
+# changeset_id :integer not null, primary key
# k :string default(""), not null, primary key
# v :string default(""), not null
#
#
# Table name: diary_comments
#
-# id :bigint(8) not null, primary key
-# diary_entry_id :bigint(8) not null
-# user_id :bigint(8) not null
+# id :integer not null, primary key
+# diary_entry_id :integer not null
+# user_id :integer not null
# body :text not null
# created_at :datetime not null
# updated_at :datetime not null
#
# Table name: diary_entries
#
-# id :bigint(8) not null, primary key
-# user_id :bigint(8) not null
+# id :integer not null, primary key
+# user_id :integer not null
# title :string not null
# body :text not null
# created_at :datetime not null
#
# Table name: messages
#
-# id :bigint(8) not null, primary key
-# from_user_id :bigint(8) not null
+# id :integer not null, primary key
+# from_user_id :integer not null
# title :string not null
# body :text not null
# sent_on :datetime not null
# message_read :boolean default(FALSE), not null
-# to_user_id :bigint(8) not null
+# to_user_id :integer not null
# to_user_visible :boolean default(TRUE), not null
# from_user_visible :boolean default(TRUE), not null
# body_format :enum default("markdown"), not null
#
# Table name: current_node_tags
#
-# node_id :bigint(8) not null, primary key
+# node_id :integer not null, primary key
# k :string default(""), not null, primary key
# v :string default(""), not null
#
#
# Table name: node_tags
#
-# node_id :bigint(8) not null, primary key
-# version :bigint(8) not null, primary key
+# node_id :integer not null, primary key
+# version :integer not null, primary key
# k :string default(""), not null, primary key
# v :string default(""), not null
#
#
# Table name: relation_tags
#
-# relation_id :bigint(8) default(0), not null, primary key
+# relation_id :integer default(0), not null, primary key
# k :string default(""), not null, primary key
# v :string default(""), not null
-# version :bigint(8) not null, primary key
+# version :integer not null, primary key
#
# Foreign Keys
#
#
# Table name: way_tags
#
-# way_id :bigint(8) default(0), not null, primary key
+# way_id :integer default(0), not null, primary key
# k :string not null, primary key
# v :string not null
-# version :bigint(8) not null, primary key
+# version :integer not null, primary key
#
# Foreign Keys
#
# description :text
# created_at :datetime
# updated_at :datetime
-# user_id :bigint(8) not null
+# user_id :integer not null
# description_format :enum default("markdown"), not null
#
# Foreign Keys
#
# Table name: current_relation_tags
#
-# relation_id :bigint(8) not null, primary key
+# relation_id :integer not null, primary key
# k :string default(""), not null, primary key
# v :string default(""), not null
#
#
# Table name: gpx_files
#
-# id :bigint(8) not null, primary key
-# user_id :bigint(8) not null
+# id :integer not null, primary key
+# user_id :integer not null
# visible :boolean default(TRUE), not null
# name :string default(""), not null
-# size :bigint(8)
+# size :integer
# latitude :float
# longitude :float
# timestamp :datetime not null
# description :string default(""), not null
# inserted :boolean not null
# visibility :enum default("public"), not null
-# length :bigint(8)
#
# Indexes
#
#
# Table name: gpx_file_tags
#
-# gpx_id :bigint(8) default(0), not null
+# gpx_id :integer default(0), not null
# tag :string not null
-# id :bigint(8) not null, primary key
+# id :integer not null, primary key
#
# Indexes
#
# Table name: user_blocks
#
# id :integer not null, primary key
-# user_id :bigint(8) not null
-# creator_id :bigint(8) not null
+# user_id :integer not null
+# creator_id :integer not null
# reason :text not null
# ends_at :datetime not null
# needs_view :boolean default(FALSE), not null
-# revoker_id :bigint(8)
+# revoker_id :integer
# created_at :datetime
# updated_at :datetime
# reason_format :enum default("markdown"), not null
#
# Table name: user_preferences
#
-# user_id :bigint(8) not null, primary key
+# user_id :integer not null, primary key
# k :string not null, primary key
# v :string not null
#
#
# Table name: current_way_tags
#
-# way_id :bigint(8) not null, primary key
+# way_id :integer not null, primary key
# k :string default(""), not null, primary key
# v :string default(""), not null
#
# expact are allowed
# However, would they affect the xml planet dumps?
ok = ["Name", "'me", "he\"", "<hr>", "*ho", "\"help\"@",
- "vergrößern", "ルシステムにも対応します", "輕觸搖晃的遊戲"]
+ "vergrößern", "ルシステムにも対応します", "輕觸搖晃的遊戲", "space space"]
# These need to be 3 chars in length, otherwise the length test above
# should be used.
bad = ["<hr/>", "test@example.com", "s/f", "aa/", "aa;", "aa.",
--- /dev/null
+require "test_helper"
+
+class InvalidCharsValidatable
+ include ActiveModel::Validations
+ validates :chars, :invalid_chars => true
+ attr_accessor :chars
+end
+
+class InvalidCharsValidatorTest < ActiveSupport::TestCase
+ include Rails::Dom::Testing::Assertions::SelectorAssertions
+
+ def test_with_valid_chars
+ c = InvalidCharsValidatable.new
+
+ valid = ["Name.", "'me", "he\"", "<hr>", "*ho", "\"help\"@",
+ "vergrößern", "ルシステムにも対応します", "輕觸搖晃的遊戲", "/;.,?%#"]
+
+ valid.each do |v|
+ c.chars = v
+ assert c.valid?, "'#{v}' should be valid"
+ end
+ end
+
+ def test_with_invalid_chars
+ c = InvalidCharsValidatable.new
+
+ invalid = ["\x7f<hr/>", "test@example.com\x0e-", "s/\x1ff", "aa/\ufffe",
+ "aa\x0b-,", "aa?\x08", "/;\uffff.,?", "\x00-も対応します/", "\x0c#ping",
+ "foo\x1fbar", "foo\x7fbar", "foo\ufffebar", "foo\uffffbar"]
+
+ invalid.each do |v|
+ c.chars = v
+ assert_not c.valid?, "'#{v}' should not be valid"
+ end
+ end
+end
--- /dev/null
+require "test_helper"
+
+class InvalidUrlCharsValidatable
+ include ActiveModel::Validations
+ validates :chars, :invalid_url_chars => true
+ attr_accessor :chars
+end
+
+class InvalidUrlCharsValidatorTest < ActiveSupport::TestCase
+ include Rails::Dom::Testing::Assertions::SelectorAssertions
+
+ def test_with_valid_url_chars
+ c = InvalidUrlCharsValidatable.new
+
+ valid = ["\x7f<hr>", "test@examplecom\x0e-", "s\x1ff", "aa\ufffe",
+ "aa\x0b-", "aa\x08", "\uffff::", "\x00-も対応します", "\x0c*ping",
+ "foo\x1fbar", "foo\x7fbar", "foo\ufffebar", "foo\uffffbar"]
+
+ valid.each do |v|
+ c.chars = v
+ assert c.valid?, "'#{v}' should be valid"
+ end
+ end
+
+ def test_with_invalid_url_chars
+ c = InvalidUrlCharsValidatable.new
+
+ invalid = ["Name.", "you;me", "he\"#", "<hr/>", "50%", "good?",
+ "vergrößern,deutsche", "ルシステムに;.も対応します", "輕觸搖/晃的遊戲", "/;.,?%#"]
+
+ invalid.each do |v|
+ c.chars = v
+ assert_not c.valid?, "'#{v}' should not be valid"
+ end
+ end
+end
--- /dev/null
+require "test_helper"
+
+class LeadingWhitespaceValidatable
+ include ActiveModel::Validations
+ validates :string, :leading_whitespace => true
+ attr_accessor :string
+end
+
+class LeadingWhitespaceValidatorTest < ActiveSupport::TestCase
+ include Rails::Dom::Testing::Assertions::SelectorAssertions
+
+ def test_with_leading_whitespace
+ validator = LeadingWhitespaceValidatable.new
+
+ strings = [" ", " test", " ", "\ttest"]
+
+ strings.each do |v|
+ validator.string = v
+ assert_not validator.valid?, "'#{v}' should not be valid"
+ end
+ end
+
+ def test_without_leading_whitespace
+ validator = LeadingWhitespaceValidatable.new
+
+ strings = ["test", "test ", "t est", "test\t", ".test", "_test"]
+
+ strings.each do |v|
+ validator.string = v
+ assert validator.valid?, "'#{v}' should be valid"
+ end
+ end
+end
--- /dev/null
+require "test_helper"
+
+class TrailingWhitespaceValidatable
+ include ActiveModel::Validations
+ validates :string, :trailing_whitespace => true
+ attr_accessor :string
+end
+
+class TrailingWhitespaceValidatorTest < ActiveSupport::TestCase
+ include Rails::Dom::Testing::Assertions::SelectorAssertions
+
+ def test_with_trailing_whitespace
+ validator = TrailingWhitespaceValidatable.new
+
+ strings = [" ", "test ", " ", "test\t", "_test_ "]
+
+ strings.each do |v|
+ validator.string = v
+ assert_not validator.valid?, "'#{v}' should not be valid"
+ end
+ end
+
+ def test_without_trailing_whitespace
+ validator = TrailingWhitespaceValidatable.new
+
+ strings = ["test", " test", "tes t", "\ttest", "test.", "test_"]
+
+ strings.each do |v|
+ validator.string = v
+ assert validator.valid?, "'#{v}' should be valid"
+ end
+ end
+end