spec/schema_spec.rb in xsd-reader-0.0.1 vs spec/schema_spec.rb in xsd-reader-0.1.0
- old
+ new
@@ -1,17 +1,71 @@
require File.dirname(__FILE__) + '/spec_helper'
-describe XsdReader do
- before :all do
- @reader ||= XsdReader::XML.new(:xsd_file => File.expand_path(File.join(File.dirname(__FILE__), 'examples', 'ddex-ern-v36.xsd')))
+describe XsdReader::Schema do
+ let(:reader){
+ XsdReader::XML.new(:xsd_file => File.expand_path(File.join(File.dirname(__FILE__), 'examples', 'ddex-v36', 'ddex-ern-v36.xsd')))
+ }
+
+ let(:schema){
+ reader.schema
+ }
+
+ describe "#elements" do
+ it "gives a element readers" do
+ expect(schema.elements.map(&:class)).to eq [XsdReader::Element]*2
+ end
end
- describe XsdReader::Schema do
- before :each do
- @schema = @reader.schema
+ describe '#target_namespace' do
+ it "gives the target namespace" do
+ expect(schema.target_namespace).to eq 'http://ddex.net/xml/ern/36'
end
+ end
- it "gives a element readers" do
- expect(@schema.elements.map(&:class)).to eq [XsdReader::Element]*2
+ describe '#namespaces' do
+ it 'returns a hash of namespace shortcuts' do
+ expect(schema.namespaces).to eq({
+ 'xmlns:xs' => "http://www.w3.org/2001/XMLSchema",
+ 'xmlns:ern' => "http://ddex.net/xml/ern/36",
+ 'xmlns:avs' => "http://ddex.net/xml/avs/avs"
+ })
end
end
-end # describe XsdReader
\ No newline at end of file
+
+ describe "#import_by_namespace" do
+ it "returns import objects for the given namespace" do
+ import = schema.import_by_namespace('http://ddex.net/xml/avs/avs')
+ expect(import.class).to eq XsdReader::Import
+ expect(import.namespace).to eq 'http://ddex.net/xml/avs/avs'
+ expect(import.reader.schema.target_namespace).to eq 'http://ddex.net/xml/avs/avs'
+ expect(import).to be schema.imports[0]
+ end
+
+ it "returns import objects for given namespace codes" do
+ import = schema.import_by_namespace('avs')
+ expect(import.class).to eq XsdReader::Import
+ expect(import.namespace).to eq 'http://ddex.net/xml/avs/avs'
+ expect(import.reader.schema.target_namespace).to eq 'http://ddex.net/xml/avs/avs'
+ expect(import).to be schema.imports[0]
+ end
+
+ it "returns import objects for given namespace codes with xmlns prefix" do
+ import = schema.import_by_namespace('xmlns:avs')
+ expect(import.class).to eq XsdReader::Import
+ expect(import.namespace).to eq 'http://ddex.net/xml/avs/avs'
+ expect(import.reader.schema.target_namespace).to eq 'http://ddex.net/xml/avs/avs'
+ expect(import).to be schema.imports[0]
+ end
+
+ it "returns nil when no matching import is found" do
+ expect(schema.import_by_namespace('foo')).to eq nil
+ end
+
+ it "returns nil when a nil namespace is given" do
+ expect(schema.import_by_namespace(nil)).to eq nil
+ end
+ end
+
+ it "includes imported definitions as if they were local" do
+ expect(schema.simple_types.map(&:name)).to eq ["ddex_LocalCollectionAnchorReference", "ddex_LocalResourceAnchorReference", "AccessLimitation", "AdministratingRecordCompanyRole", "AllTerritoryCode", "ArtistRole", "AudioCodecType", "BinaryDataType", "BusinessContributorRole", "CalculationType", "CarrierType", "CdProtectionType", "CharacterType", "CodingType", "CollectionType", "CommercialModelType", "CompilationType", "ContainerFormat", "CreationType", "CreativeContributorRole", "CueOrigin", "CueSheetType", "CueUseType", "CurrencyCode", "CurrentTerritoryCode", "DataMismatchResponseType", "DataMismatchStatus", "DataMismatchType", "DdexTerritoryCode", "DeductionRateType", "DeliveryActionType", "DeliveryMessageType", "DeprecatedCurrencyCode", "DeprecatedIsoTerritoryCode", "DigitizationMode", "DisputeReason", "DistributionChannelType", "DpidStatus", "DrmEnforcementType", "DrmPlatformType", "DsrMessageType", "EquipmentType", "ErnMessageType", "ErncFileStatus", "ErncProposedActionType", "ExpressionType", "ExternallyLinkedResourceType", "FileStatus", "FingerprintAlgorithmType", "GoverningAgreementType", "HashSumAlgorithmType", "ImageCodecType", "ImageType", "InvoiceAvailabilityStatus", "IsoCurrencyCode", "IsoLanguageCode", "IsoTerritoryCode", "LabelNameType", "LicenseOrClaimRefusalReason", "LicenseOrClaimRequestUpdateReason", "LicenseOrClaimUpdateReason", "LicenseRejectionReason", "LicenseStatus", "LicensingProcessStatus", "LodFileStatus", "LodProposedActionType", "MembershipType", "MessageActionType", "MessageContentRevenueType", "MessageContextType", "MessageControlType", "MidiType", "MlcMessageType", "MusicalWorkContributorRole", "MusicalWorkRightsClaimType", "MusicalWorkType", "MwlCaCMessageInBatchType", "MwnMessageType", "NewReleaseMessageStatus", "OperatingSystemType", "OrderType", "PLineType", "ParentalWarningType", "PartyRelationshipType", "PercentageType", "PriceInformationType", "PriceRangeType", "PriceType", "Priority", "ProductType", "ProjectContributorRelationshipType", "Purpose", "RateModificationType", "RatingAgency", "ReasonType", "RecipientRevenueType", "RecordingMode", "RedeliveryReasonType", "ReferenceUnit", "RelationalRelator", "ReleaseAvailabilityStatus", "ReleaseRelationshipType", "ReleaseResourceType", "ReleaseType", "ReportFormat", "ReportType", "RequestReason", "RequestedActionType", "ResourceContributorRole", "ResourceOmissionReason", "ResourceType", "RevenueSourceType", "RightShareRelationshipType", "RightShareType", "RightsClaimPolicyType", "RightsControllerRole", "RightsControllerType", "RightsCoverage", "RoyaltyRateCalculationType", "RoyaltyRateType", "SalesReportAvailabilityStatus", "Sex", "SheetMusicCodecType", "SheetMusicType", "SoftwareType", "SoundProcessorType", "SoundRecordingType", "SupplyChainStatus", "TaxScope", "TaxType", "TerritoryCodeType", "TerritoryCodeTypeIncludingDeprecatedCodes", "TextCodecType", "TextType", "ThemeType", "TisTerritoryCode", "TitleType", "TrackContributorRelationshipType", "UnitOfBitRate", "UnitOfConditionValue", "UnitOfExtent", "UnitOfFrameRate", "UnitOfFrequency", "UpdateIndicator", "UseType", "UserInterfaceType", "ValueType", "VideoCodecType", "VideoContentType", "VideoDefinitionType", "VideoType", "VisualPerceptionType", "VocalType", "WsMessageStatus", "TerritoryCode"]
+ end
+end # describe XsdReader::Schema